diff options
-rw-r--r-- | sepolicy/set_bdaddr.te | 1 | ||||
-rw-r--r-- | shared/utils/bdaddr/bdaddr.rc | 2 | ||||
-rw-r--r-- | shared/utils/bdaddr/set_bdaddr.sh | 19 |
3 files changed, 16 insertions, 6 deletions
diff --git a/sepolicy/set_bdaddr.te b/sepolicy/set_bdaddr.te index e81d6ab..c7fa166 100644 --- a/sepolicy/set_bdaddr.te +++ b/sepolicy/set_bdaddr.te @@ -4,6 +4,7 @@ init_daemon_domain(set_bdaddr); # audit2allow allow set_bdaddr proc_cmdline:file { open read }; +allow set_bdaddr proc_bootconfig:file { open read }; allow set_bdaddr rootfs:dir { open read }; allow set_bdaddr self:bluetooth_socket { bind create read write }; allow set_bdaddr self:capability net_admin; diff --git a/shared/utils/bdaddr/bdaddr.rc b/shared/utils/bdaddr/bdaddr.rc index d4f007d..65706db 100644 --- a/shared/utils/bdaddr/bdaddr.rc +++ b/shared/utils/bdaddr/bdaddr.rc @@ -19,6 +19,8 @@ service set_bdaddr /vendor/bin/set_bdaddr.sh user root group system capabilities NET_ADMIN + disabled + oneshot on post-fs start set_bdaddr diff --git a/shared/utils/bdaddr/set_bdaddr.sh b/shared/utils/bdaddr/set_bdaddr.sh index 299626d..e59fa39 100644 --- a/shared/utils/bdaddr/set_bdaddr.sh +++ b/shared/utils/bdaddr/set_bdaddr.sh @@ -17,17 +17,24 @@ # limitations under the License. # -# Get the unique board serial number from /proc/cmdline, -# prepend '0's to the serial number to fill 5 LSBs of the -# BT address and prepend "C0" as MSB to prepare a 6 byte -# Bluetooth Random Static Address. Reference: +# Get the unique board serial number from /proc/cmdline or +# /proc/bootconfig, prepend '0's to the serial number to +# fill 5 LSBs of the BT address and prepend "C0" as MSB to +# prepare a 6 byte Bluetooth Random Static Address. Reference: # https://www.bluetooth.com/wp-content/uploads/2022/05/Bluetooth_LE_Primer_Paper.pdf [Page 23] # # Format the output in xx:xx:xx:xx:xx:xx format for the # "bdaddr" command to work. -BTADDR=`/vendor/bin/cat /proc/cmdline | vendor/bin/grep -o serialno.* |\ - /vendor/bin/cut -f2 -d'=' | /vendor/bin/awk '{printf("C0%010s\n", $1)}' |\ +BTADDR=`/vendor/bin/cat /proc/cmdline | /vendor/bin/grep -o serialno.* |\ + /vendor/bin/cut -f2 -d'=' | /vendor/bin/awk '{printf("c0%010s\n", $1)}' |\ /vendor/bin/sed 's/\(..\)/\1:/g' | /vendor/bin/sed '$s/:$//'` +if [ -z "${BTADDR}" ] +then + BTADDR=`/vendor/bin/cat /proc/bootconfig | /vendor/bin/grep -o serialno.* |\ + /vendor/bin/cut -f2 -d'=' | /vendor/bin/cut -c 3-10 |\ + /vendor/bin/awk '{printf("c0%010s\n", $1)}' |\ + /vendor/bin/sed 's/\(..\)/\1:/g' | /vendor/bin/sed '$s/:$//'` +fi /vendor/bin/hw/bdaddr "${BTADDR}" |