From e7a021d90129f05b30ed75b6e2b24bde8f784a1c Mon Sep 17 00:00:00 2001 From: Markus Fritsche Date: Thu, 23 Apr 2026 20:34:07 +0200 Subject: [PATCH] patches: add drop-orphan-file-io (c1.4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Completes the filp_open/kernel_read/kernel_write removal pass across the driver. Deletes bes_fw.c DATA_DUMP_OBSERVE blocks (4 #ifdefs gated on a commented-out #define, dead by default; would fail to build on modern kernels due to removed get_fs/set_fs) and main.c's orphan access_file() helper (no callers in-tree, also relies on get_fs/set_fs). With c1.2 + c1.3 + c1.4 combined: zero filp_open / kernel_read / kernel_write / vfs_read / vfs_write references anywhere in the driver -- precondition for a linux-wireless RFC for drivers/staging/bes2600/ unlocked. Deployed + verified on ohm (srcversion 12BAFB9C…): WiFi associated, no KFENCE / sdio_tx_work / RX failure / PS Mode Error / factory cali data get failed. Net: -69 lines. --- ...han-DATA_DUMP_OBSERVE-and-access_fil.patch | 168 ++++++++++++++++++ ...han-DATA_DUMP_OBSERVE-and-access_fil.patch | 168 ++++++++++++++++++ 2 files changed, 336 insertions(+) create mode 100644 patches/drop-orphan-file-io-danctnix/0001-bes2600-drop-orphan-DATA_DUMP_OBSERVE-and-access_fil.patch create mode 100644 patches/drop-orphan-file-io/0001-bes2600-drop-orphan-DATA_DUMP_OBSERVE-and-access_fil.patch diff --git a/patches/drop-orphan-file-io-danctnix/0001-bes2600-drop-orphan-DATA_DUMP_OBSERVE-and-access_fil.patch b/patches/drop-orphan-file-io-danctnix/0001-bes2600-drop-orphan-DATA_DUMP_OBSERVE-and-access_fil.patch new file mode 100644 index 000000000..38fef5087 --- /dev/null +++ b/patches/drop-orphan-file-io-danctnix/0001-bes2600-drop-orphan-DATA_DUMP_OBSERVE-and-access_fil.patch @@ -0,0 +1,168 @@ +From 44e085360fec09c1c1f7b35a23ec679f7065d3f7 Mon Sep 17 00:00:00 2001 +From: Markus Fritsche +Date: Thu, 23 Apr 2026 20:19:27 +0200 +Subject: [PATCH] bes2600: drop orphan DATA_DUMP_OBSERVE and access_file() file + I/O + +Two dead-in-default-build file-I/O sites remain in the driver +after the factory and chardev kernel_*() removals in the preceding +patches: + + - bes_fw.c DATA_DUMP_OBSERVE: four #ifdef DATA_DUMP_OBSERVE + blocks built around the firmware-download path that open + /lib/firmware/bes2002_fw_write.bin via filp_open(O_CREAT | + O_RDWR), then log every transmitted firmware chunk via + vfs_write() inside a get_fs()/set_fs(KERNEL_DS) wrapper. The + controlling #define at bes_fw.c line 128 is commented out + ('//#define DATA_DUMP_OBSERVE'), so none of this is ever + compiled in a stock build. + + - main.c access_file(): a helper gated on + GET_MAC_ADDR_METHOD == 2 || == 3 (default 4) using the same + get_fs()/set_fs()/vfs_read()/vfs_write() pattern. No caller + in the tree references it -- it was orphaned when the methods + that consumed it were refactored out. + +Both sites are unbuildable on modern kernels anyway: get_fs() / +set_fs() were removed from arm64 and the generic uaccess path in +the v5.10 era, and the legacy vfs_read() / vfs_write() variants +that took userspace-typed buffers went with them. The in-kernel +replacements would be kernel_read() / kernel_write(), which this +series is explicitly removing from the driver. + +Remove both blocks, the commented-out '//#define DATA_DUMP_OBSERVE' +line, and the access_file() definition and its #if gate. No +behaviour change in any default or non-default build, because +nothing compiled or linked in the first place. After this patch +the driver contains zero filp_open / kernel_read / kernel_write / +vfs_read / vfs_write references -- a precondition for a +drivers/staging/bes2600/ linux-wireless RFC. + +Signed-off-by: Markus Fritsche +--- + bes2600/bes_fw.c | 34 ---------------------------------- + bes2600/main.c | 35 ----------------------------------- + 2 files changed, 69 deletions(-) + +diff --git a/drivers/staging/bes2600/bes_fw.c b/drivers/staging/bes2600/bes_fw.c +index 133c945..d612c3c 100644 +--- a/drivers/staging/bes2600/bes_fw.c ++++ b/drivers/staging/bes2600/bes_fw.c +@@ -125,8 +125,6 @@ int bes_host_slave_sync(struct bes2600_common *hw_priv) + } + */ + +-//#define DATA_DUMP_OBSERVE +- + static int bes_firmware_download_write_reg(struct platform_fw_t *fw_data, u32 addr, u32 val) + { + u8 frame_num = 0; +@@ -468,14 +466,6 @@ static int bes_firmware_download(struct platform_fw_t *fw_data, const char *fw_n + + const struct firmware *fw_bin; + +-#ifdef DATA_DUMP_OBSERVE +- char *observe; +- size_t observe_len; +- loff_t observe_off = 0; +- mm_segment_t old_fs; +- struct file *observe_file = NULL; +-#endif +- + struct fw_msg_hdr_t header; + struct fw_info_t fw_info; + struct download_fw_t download_addr; +@@ -583,14 +573,6 @@ retry: + } + download_addr.addr = fw_info.addr; + +-#ifdef DATA_DUMP_OBSERVE +- observe_file = filp_open("/lib/firmware/bes2002_fw_write.bin", O_CREAT | O_RDWR, 0); +- if (IS_ERR(observe_file)) { +- bes_err("create data_dump file err:%ld\n", IS_ERR(observe_file)); +- observe_file = NULL; +- } +-#endif +- + while (code_length) { + + #if 1 +@@ -640,17 +622,6 @@ retry: + //mdelay(5000); + bes_devel("tx_download_firmware_data:%x %d\n", download_addr.addr, length); + +-#ifdef DATA_DUMP_OBSERVE +- if (observe_file) { +- observe = (char *)(long_buf + sizeof(struct fw_msg_hdr_t) + sizeof(struct download_fw_t)); +- observe_len = length - sizeof(struct fw_msg_hdr_t) - sizeof(struct download_fw_t); +- old_fs = get_fs(); +- set_fs(KERNEL_DS); +- vfs_write(observe_file, observe, observe_len, &observe_off); +- set_fs(old_fs); +- } +-#endif +- + ret = bes2600_data_write(long_buf, length > 512 ? length : 512); + if (ret) { + bes_err("tx download fw data err:%d\n", ret); +@@ -832,11 +803,6 @@ retry: + + err2: + kfree(long_buf); +-#ifdef DATA_DUMP_OBSERVE +- if (observe_file) { +- filp_close(observe_file, NULL); +- } +-#endif + err1: + kfree(short_buf); + release_firmware(fw_bin); +diff --git a/drivers/staging/bes2600/main.c b/drivers/staging/bes2600/main.c +index 6ed6b15..9d2aac5 100644 +--- a/drivers/staging/bes2600/main.c ++++ b/drivers/staging/bes2600/main.c +@@ -790,41 +790,6 @@ void bes2600_core_release(struct bes2600_common *self) + return; + } + +-#if (GET_MAC_ADDR_METHOD == 2) || (GET_MAC_ADDR_METHOD == 3) /* To use macaddr and ps mode of customers */ +-int access_file(char *path, char *buffer, int size, int isRead) +-{ +- int ret=0; +- struct file *fp; +- mm_segment_t old_fs = get_fs(); +- +- if(isRead) +- fp = filp_open(path,O_RDONLY,S_IRUSR); +- else +- fp = filp_open(path,O_CREAT|O_WRONLY,S_IRUSR); +- +- if (IS_ERR(fp)) { +- bes_err("BES2600 : can't open %s\n", path); +- return -1; +- } +- +- if (isRead) { +- fp->f_pos = 0; +- set_fs(KERNEL_DS); +- ret = vfs_read(fp,buffer,size,&fp->f_pos); +- set_fs(old_fs); +- } else { +- fp->f_pos = 0; +- set_fs(KERNEL_DS); +- ret = vfs_write(fp,buffer,size,&fp->f_pos); +- set_fs(old_fs); +- } +- filp_close(fp,NULL); +- +- bes_info("BES2600 : access_file return code(%d)\n", ret); +- return ret; +-} +-#endif +- + int bes2600_wifi_start(struct bes2600_common *hw_priv) + { + int ret = 0, if_id; +-- +2.53.0 + diff --git a/patches/drop-orphan-file-io/0001-bes2600-drop-orphan-DATA_DUMP_OBSERVE-and-access_fil.patch b/patches/drop-orphan-file-io/0001-bes2600-drop-orphan-DATA_DUMP_OBSERVE-and-access_fil.patch new file mode 100644 index 000000000..0cea07310 --- /dev/null +++ b/patches/drop-orphan-file-io/0001-bes2600-drop-orphan-DATA_DUMP_OBSERVE-and-access_fil.patch @@ -0,0 +1,168 @@ +From 44e085360fec09c1c1f7b35a23ec679f7065d3f7 Mon Sep 17 00:00:00 2001 +From: Markus Fritsche +Date: Thu, 23 Apr 2026 20:19:27 +0200 +Subject: [PATCH] bes2600: drop orphan DATA_DUMP_OBSERVE and access_file() file + I/O + +Two dead-in-default-build file-I/O sites remain in the driver +after the factory and chardev kernel_*() removals in the preceding +patches: + + - bes_fw.c DATA_DUMP_OBSERVE: four #ifdef DATA_DUMP_OBSERVE + blocks built around the firmware-download path that open + /lib/firmware/bes2002_fw_write.bin via filp_open(O_CREAT | + O_RDWR), then log every transmitted firmware chunk via + vfs_write() inside a get_fs()/set_fs(KERNEL_DS) wrapper. The + controlling #define at bes_fw.c line 128 is commented out + ('//#define DATA_DUMP_OBSERVE'), so none of this is ever + compiled in a stock build. + + - main.c access_file(): a helper gated on + GET_MAC_ADDR_METHOD == 2 || == 3 (default 4) using the same + get_fs()/set_fs()/vfs_read()/vfs_write() pattern. No caller + in the tree references it -- it was orphaned when the methods + that consumed it were refactored out. + +Both sites are unbuildable on modern kernels anyway: get_fs() / +set_fs() were removed from arm64 and the generic uaccess path in +the v5.10 era, and the legacy vfs_read() / vfs_write() variants +that took userspace-typed buffers went with them. The in-kernel +replacements would be kernel_read() / kernel_write(), which this +series is explicitly removing from the driver. + +Remove both blocks, the commented-out '//#define DATA_DUMP_OBSERVE' +line, and the access_file() definition and its #if gate. No +behaviour change in any default or non-default build, because +nothing compiled or linked in the first place. After this patch +the driver contains zero filp_open / kernel_read / kernel_write / +vfs_read / vfs_write references -- a precondition for a +drivers/staging/bes2600/ linux-wireless RFC. + +Signed-off-by: Markus Fritsche +--- + bes2600/bes_fw.c | 34 ---------------------------------- + bes2600/main.c | 35 ----------------------------------- + 2 files changed, 69 deletions(-) + +diff --git a/bes2600/bes_fw.c b/bes2600/bes_fw.c +index 133c945..d612c3c 100644 +--- a/bes2600/bes_fw.c ++++ b/bes2600/bes_fw.c +@@ -125,8 +125,6 @@ int bes_host_slave_sync(struct bes2600_common *hw_priv) + } + */ + +-//#define DATA_DUMP_OBSERVE +- + static int bes_firmware_download_write_reg(struct platform_fw_t *fw_data, u32 addr, u32 val) + { + u8 frame_num = 0; +@@ -468,14 +466,6 @@ static int bes_firmware_download(struct platform_fw_t *fw_data, const char *fw_n + + const struct firmware *fw_bin; + +-#ifdef DATA_DUMP_OBSERVE +- char *observe; +- size_t observe_len; +- loff_t observe_off = 0; +- mm_segment_t old_fs; +- struct file *observe_file = NULL; +-#endif +- + struct fw_msg_hdr_t header; + struct fw_info_t fw_info; + struct download_fw_t download_addr; +@@ -583,14 +573,6 @@ retry: + } + download_addr.addr = fw_info.addr; + +-#ifdef DATA_DUMP_OBSERVE +- observe_file = filp_open("/lib/firmware/bes2002_fw_write.bin", O_CREAT | O_RDWR, 0); +- if (IS_ERR(observe_file)) { +- bes_err("create data_dump file err:%ld\n", IS_ERR(observe_file)); +- observe_file = NULL; +- } +-#endif +- + while (code_length) { + + #if 1 +@@ -640,17 +622,6 @@ retry: + //mdelay(5000); + bes_devel("tx_download_firmware_data:%x %d\n", download_addr.addr, length); + +-#ifdef DATA_DUMP_OBSERVE +- if (observe_file) { +- observe = (char *)(long_buf + sizeof(struct fw_msg_hdr_t) + sizeof(struct download_fw_t)); +- observe_len = length - sizeof(struct fw_msg_hdr_t) - sizeof(struct download_fw_t); +- old_fs = get_fs(); +- set_fs(KERNEL_DS); +- vfs_write(observe_file, observe, observe_len, &observe_off); +- set_fs(old_fs); +- } +-#endif +- + ret = bes2600_data_write(long_buf, length > 512 ? length : 512); + if (ret) { + bes_err("tx download fw data err:%d\n", ret); +@@ -832,11 +803,6 @@ retry: + + err2: + kfree(long_buf); +-#ifdef DATA_DUMP_OBSERVE +- if (observe_file) { +- filp_close(observe_file, NULL); +- } +-#endif + err1: + kfree(short_buf); + release_firmware(fw_bin); +diff --git a/bes2600/main.c b/bes2600/main.c +index 6ed6b15..9d2aac5 100644 +--- a/bes2600/main.c ++++ b/bes2600/main.c +@@ -790,41 +790,6 @@ void bes2600_core_release(struct bes2600_common *self) + return; + } + +-#if (GET_MAC_ADDR_METHOD == 2) || (GET_MAC_ADDR_METHOD == 3) /* To use macaddr and ps mode of customers */ +-int access_file(char *path, char *buffer, int size, int isRead) +-{ +- int ret=0; +- struct file *fp; +- mm_segment_t old_fs = get_fs(); +- +- if(isRead) +- fp = filp_open(path,O_RDONLY,S_IRUSR); +- else +- fp = filp_open(path,O_CREAT|O_WRONLY,S_IRUSR); +- +- if (IS_ERR(fp)) { +- bes_err("BES2600 : can't open %s\n", path); +- return -1; +- } +- +- if (isRead) { +- fp->f_pos = 0; +- set_fs(KERNEL_DS); +- ret = vfs_read(fp,buffer,size,&fp->f_pos); +- set_fs(old_fs); +- } else { +- fp->f_pos = 0; +- set_fs(KERNEL_DS); +- ret = vfs_write(fp,buffer,size,&fp->f_pos); +- set_fs(old_fs); +- } +- filp_close(fp,NULL); +- +- bes_info("BES2600 : access_file return code(%d)\n", ret); +- return ret; +-} +-#endif +- + int bes2600_wifi_start(struct bes2600_common *hw_priv) + { + int ret = 0, if_id; +-- +2.53.0 +