From b226436fc76f11afdc1f96330ba5613abe467d19 Mon Sep 17 00:00:00 2001 From: roynatech2544 Date: Tue, 11 Oct 2022 02:48:26 +0900 Subject: [PATCH] universal7885: aidl-support: Fork subprocess to setuid --- .../apps/aidl-support/fm/default/Android.bp | 3 --- .../fm/default/FMAudioRouteControl.cpp | 16 +++++++++++++++- .../aidl-support/fm/default/FMDevControl.cpp | 7 ++----- .../sepolicy/private/hal_fmradio_default.te | 3 +++ 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/universal7885-common/apps/aidl-support/fm/default/Android.bp b/universal7885-common/apps/aidl-support/fm/default/Android.bp index 12c77b2..65e131b 100644 --- a/universal7885-common/apps/aidl-support/fm/default/Android.bp +++ b/universal7885-common/apps/aidl-support/fm/default/Android.bp @@ -23,12 +23,9 @@ cc_binary { "libfileio", "libutils", "audioflinger-aidl-cpp", - "audiopolicy-aidl-cpp", - "audiopolicy-types-aidl-cpp", "libaudiofoundation", "libaudioutils", "libaudioclient", - "libaudiopolicy", "libaudiomanager", "vendor.eureka.hardware.fmradio-V1-ndk", ], diff --git a/universal7885-common/apps/aidl-support/fm/default/FMAudioRouteControl.cpp b/universal7885-common/apps/aidl-support/fm/default/FMAudioRouteControl.cpp index 6aedc5d..7b6c511 100644 --- a/universal7885-common/apps/aidl-support/fm/default/FMAudioRouteControl.cpp +++ b/universal7885-common/apps/aidl-support/fm/default/FMAudioRouteControl.cpp @@ -17,13 +17,15 @@ #include #include +#include + #define FM_FAILURE (-1) #define FM_SUCCESS 0 #define IOHANDLE 13 using namespace android; -int audioflinger_exynos7885_forceroute (bool speaker) { +static int audioflinger_exynos7885_forceroute(bool speaker) { const sp &af = AudioSystem::get_audio_flinger(); if (af == 0) return PERMISSION_DENIED; @@ -34,3 +36,15 @@ int audioflinger_exynos7885_forceroute (bool speaker) { } return FM_SUCCESS; } + +void setAudioFlingerSpeaker(bool enable) { + pid_t pid; + + if ((pid = fork()) < 0) { + return; + } + if (pid == 0) { + setuid(1041); + audioflinger_exynos7885_forceroute(enable); + } +} diff --git a/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp b/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp index 9fac37d..7bd784f 100644 --- a/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp +++ b/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp @@ -16,12 +16,11 @@ #include -#include #include #include // FMAudioRouteControl.cpp -extern int audioflinger_exynos7885_forceroute(bool speaker); +extern void setAudioFlingerSpeaker(bool enable); namespace aidl::vendor::eureka::hardware::fmradio { @@ -86,9 +85,7 @@ static int fd = -1; fm_radio_slsi::stop_search(fd); break; case SetType::SET_TYPE_FM_SPEAKER_ROUTE: - seteuid(1041 /* AudioServer UID */); - audioflinger_exynos7885_forceroute(value); - seteuid(0); + setAudioFlingerSpeaker(value); break; default: break; diff --git a/universal7885-common/sepolicy/private/hal_fmradio_default.te b/universal7885-common/sepolicy/private/hal_fmradio_default.te index 1a8a6f1..4112459 100644 --- a/universal7885-common/sepolicy/private/hal_fmradio_default.te +++ b/universal7885-common/sepolicy/private/hal_fmradio_default.te @@ -13,3 +13,6 @@ allow hal_fmradio_default sysfs_virtual:dir search; allow hal_fmradio_default fm_radio_device:chr_file { read write open ioctl }; allow hal_fmradio_default self:capability setuid; + +binder_call(hal_fmradio_default, audioserver) +binder_call(audioserver, hal_fmradio_default)