Allow wifi_sniffer to enable sniffer mode.
In this commit, we add necessary sepolicy rule for
wifi_sniffer. Including setup sniffer mode and up
wlan0 interface.
Bug: 141439795
Test: function works
Change-Id: Ia937309de0db960166370ac1cc0d4900d430c03f
diff --git a/vendor/qcom/common/file.te b/vendor/qcom/common/file.te
index e9ea07d..eb06150 100644
--- a/vendor/qcom/common/file.te
+++ b/vendor/qcom/common/file.te
@@ -29,6 +29,7 @@
type sysfs_rpm, sysfs_type, fs_type;
type sysfs_wlc, sysfs_type, fs_type;
type sysfs_esim, sysfs_type, fs_type;
+type sysfs_wifi_conmode, sysfs_type, fs_type;
type debugfs_clk, debugfs_type, fs_type;
type debugfs_ion, debugfs_type, fs_type;
@@ -103,7 +104,7 @@
type audio_vendor_data_file, file_type, data_file_type;
type modem_fdr_file, file_type, data_file_type;
type mediadrm_vendor_data_file, file_type, data_file_type;
-type tcpdump_vendor_data_file, file_type, data_file_type;
+type tcpdump_vendor_data_file, file_type, data_file_type, mlstrustedobject;
type data_qsee_file, file_type, data_file_type;
type vendor_tui_data_file, file_type, data_file_type;
type wifi_vendor_log_data_file, file_type, data_file_type;
diff --git a/vendor/qcom/common/file_contexts b/vendor/qcom/common/file_contexts
index 2729ce4..b0f72d9 100644
--- a/vendor/qcom/common/file_contexts
+++ b/vendor/qcom/common/file_contexts
@@ -129,6 +129,7 @@
/vendor/bin/ftmdaemon u:object_r:ftmd_exec:s0
/vendor/bin/hw/qcrild u:object_r:rild_exec:s0
/vendor/bin/mm-pp-dpps u:object_r:mm-pp-daemon_exec:s0
+/vendor/bin/wifi_sniffer u:object_r:wifi_sniffer_exec:s0
/vendor/bin/hw/android\.hardware\.confirmationui@1\.0-service-crosshatch u:object_r:hal_confirmationui_default_exec:s0
/vendor/bin/hw/android\.hardware\.drm@1\.2-service\.clearkey u:object_r:hal_drm_clearkey_exec:s0
diff --git a/vendor/qcom/common/genfs_contexts b/vendor/qcom/common/genfs_contexts
index 38c55c6..fb8fae8 100644
--- a/vendor/qcom/common/genfs_contexts
+++ b/vendor/qcom/common/genfs_contexts
@@ -99,6 +99,7 @@
genfscon sysfs /module/diagchar u:object_r:sysfs_diag:s0
genfscon sysfs /module/msm_poweroff u:object_r:sysfs_poweroff:s0
+genfscon sysfs /module/wlan/parameters/con_mode u:object_r:sysfs_wifi_conmode:s0
genfscon sysfs /class/gpio/export u:object_r:sysfs_gpio_export:s0
genfscon sysfs /devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-00/c440000.qcom,spmi:qcom,pm8998@0:pinctrl@c000 u:object_r:sysfs_pinctrl:s0
diff --git a/vendor/qcom/common/logger_app.te b/vendor/qcom/common/logger_app.te
index 79de7e5..dd68926 100644
--- a/vendor/qcom/common/logger_app.te
+++ b/vendor/qcom/common/logger_app.te
@@ -16,10 +16,14 @@
allow logger_app cnss_vendor_data_file:dir create_dir_perms;
allow logger_app cnss_vendor_data_file:file create_file_perms;
+ allow logger_app tcpdump_vendor_data_file:dir create_dir_perms;
+ allow logger_app tcpdump_vendor_data_file:file create_file_perms;
+
set_prop(logger_app, vendor_cnss_diag_prop)
set_prop(logger_app, vendor_modem_diag_prop)
set_prop(logger_app, vendor_bluetooth_log_prop)
set_prop(logger_app, vendor_tcpdump_log_prop)
+ set_prop(logger_app, vendor_wifi_sniffer_prop)
get_prop(logger_app, vendor_usb_config_prop)
')
diff --git a/vendor/qcom/common/property.te b/vendor/qcom/common/property.te
index 120f2d8..0939221 100644
--- a/vendor/qcom/common/property.te
+++ b/vendor/qcom/common/property.te
@@ -28,6 +28,7 @@
type vendor_radio_sku_prop, property_type;
type vendor_tcpdump_log_prop, property_type;
type ctl_vendor_rmt_storage_prop, property_type;
+type vendor_wifi_sniffer_prop, property_type;
#imsrcsservice
type ctl_vendor_imsrcsservice_prop, property_type;
diff --git a/vendor/qcom/common/property_contexts b/vendor/qcom/common/property_contexts
index 3dc99bd..cc53d03 100644
--- a/vendor/qcom/common/property_contexts
+++ b/vendor/qcom/common/property_contexts
@@ -213,3 +213,8 @@
vendor.tcpdump.log.ondemand u:object_r:vendor_tcpdump_log_prop:s0
vendor.tcpdump.log.alwayson u:object_r:vendor_tcpdump_log_prop:s0
vendor.tcpdump.output.dir u:object_r:vendor_tcpdump_log_prop:s0
+
+# wifi_sniffer
+persist.vendor.wifi.sniffer.freq u:object_r:vendor_wifi_sniffer_prop:s0
+persist.vendor.wifi.sniffer.bandwidth u:object_r:vendor_wifi_sniffer_prop:s0
+vendor.wifi.sniffer.start u:object_r:vendor_wifi_sniffer_prop:s0
diff --git a/vendor/qcom/common/wifi_sniffer.te b/vendor/qcom/common/wifi_sniffer.te
new file mode 100644
index 0000000..70cfa31
--- /dev/null
+++ b/vendor/qcom/common/wifi_sniffer.te
@@ -0,0 +1,20 @@
+type wifi_sniffer, domain;
+type wifi_sniffer_exec, exec_type, vendor_file_type, file_type;
+
+userdebug_or_eng(`
+ # make transition from init to its domain
+ init_daemon_domain(wifi_sniffer)
+ net_domain(wifi_sniffer)
+
+# configurate con mode
+ allow wifi_sniffer self:capability { net_admin net_raw };
+ allow wifi_sniffer sysfs_wifi_conmode:file rw_file_perms;
+
+# interface up
+ allowxperm wifi_sniffer self:udp_socket ioctl SIOCSIFFLAGS;
+ allow wifi_sniffer self:netlink_generic_socket create_socket_perms_no_ioctl;
+
+ get_prop(wifi_sniffer, vendor_wifi_sniffer_prop)
+
+ dontaudit wifi_sniffer debugfs_wlan:dir search;
+')