diff options
-rw-r--r-- | libwifi_hal/Android.mk | 1 | ||||
-rw-r--r-- | libwifi_hal/driver_tool.cpp | 19 | ||||
-rw-r--r-- | libwifi_hal/include/wifi_hal/driver_tool.h | 4 |
3 files changed, 22 insertions, 2 deletions
diff --git a/libwifi_hal/Android.mk b/libwifi_hal/Android.mk index f93015902..1ed59882f 100644 --- a/libwifi_hal/Android.mk +++ b/libwifi_hal/Android.mk @@ -106,6 +106,7 @@ LOCAL_EXPORT_C_INCLUDE_DIRS := \ $(LOCAL_PATH)/include \ $(call include-path-for, libhardware_legacy) LOCAL_SHARED_LIBRARIES := \ + libbase \ libcutils \ liblog \ libnl \ diff --git a/libwifi_hal/driver_tool.cpp b/libwifi_hal/driver_tool.cpp index 6b0b7522b..c05c00080 100644 --- a/libwifi_hal/driver_tool.cpp +++ b/libwifi_hal/driver_tool.cpp @@ -16,6 +16,9 @@ #include "wifi_hal/driver_tool.h" +#include <android-base/logging.h> +#include <private/android_filesystem_config.h> + #include "hardware_legacy/wifi.h" namespace android { @@ -25,7 +28,21 @@ const int DriverTool::kFirmwareModeSta = WIFI_GET_FW_PATH_STA; const int DriverTool::kFirmwareModeAp = WIFI_GET_FW_PATH_AP; const int DriverTool::kFirmwareModeP2p = WIFI_GET_FW_PATH_P2P; -const char DriverTool::kFirmwareReloadPath[] = WIFI_DRIVER_FW_PATH_PARAM; +bool DriverTool::TakeOwnershipOfFirmwareReload() { + if (!wifi_get_fw_path(kFirmwareModeSta) && + !wifi_get_fw_path(kFirmwareModeAp) && + !wifi_get_fw_path(kFirmwareModeP2p)) { + return true; // HAL doesn't think we need to load firmware for any mode. + } + + if (chown(WIFI_DRIVER_FW_PATH_PARAM, AID_WIFI, AID_WIFI) != 0) { + PLOG(ERROR) << "Error changing ownership of '" << WIFI_DRIVER_FW_PATH_PARAM + << "' to wifi:wifi"; + return false; + } + + return true; +} bool DriverTool::LoadDriver() { return ::wifi_load_driver() == 0; diff --git a/libwifi_hal/include/wifi_hal/driver_tool.h b/libwifi_hal/include/wifi_hal/driver_tool.h index 376d17d93..e0941c0f9 100644 --- a/libwifi_hal/include/wifi_hal/driver_tool.h +++ b/libwifi_hal/include/wifi_hal/driver_tool.h @@ -27,7 +27,9 @@ class DriverTool { static const int kFirmwareModeAp; static const int kFirmwareModeP2p; - static const char kFirmwareReloadPath[]; + // Change the owner of the firmware reload path to wifi:wifi if + // firmware reload is supported. + static bool TakeOwnershipOfFirmwareReload(); DriverTool() = default; virtual ~DriverTool() = default; |