commit:     59f69be672470056d48c84c2dc4a1ebec7dfbad9
Author:     Arisu Tachibana <alicef <AT> gentoo <DOT> org>
AuthorDate: Fri Sep  5 12:45:29 2025 +0000
Commit:     Arisu Tachibana <alicef <AT> gentoo <DOT> org>
CommitDate: Fri Sep  5 12:45:29 2025 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=59f69be6

Add 1801_proc_fix_type_confusion_in_pde_set_flags.patch

Signed-off-by: Arisu Tachibana <alicef <AT> gentoo.org>

 0000_README                                        |  4 +++
 ..._proc_fix_type_confusion_in_pde_set_flags.patch | 40 ++++++++++++++++++++++
 2 files changed, 44 insertions(+)

diff --git a/0000_README b/0000_README
index df581c25..1902d1c9 100644
--- a/0000_README
+++ b/0000_README
@@ -79,6 +79,10 @@ Patch:  
1800_proc_fix_missing_pde_set_flags_for_net_proc_files.patch
 From:   
https://lore.kernel.org/all/[email protected]/
 Desc:   proc: fix missing pde_set_flags() for net proc files
 
+Patch:  1801_proc_fix_type_confusion_in_pde_set_flags.patch
+From:   
https://lore.kernel.org/linux-fsdevel/[email protected]/
+Desc:   proc: fix type confusion in pde_set_flags()
+
 Patch:  2000_BT-Check-key-sizes-only-if-Secure-Simple-Pairing-enabled.patch
 From:   
https://lore.kernel.org/linux-bluetooth/[email protected]/raw
 Desc:   Bluetooth: Check key sizes only when Secure Simple Pairing is enabled. 
See bug #686758

diff --git a/1801_proc_fix_type_confusion_in_pde_set_flags.patch 
b/1801_proc_fix_type_confusion_in_pde_set_flags.patch
new file mode 100644
index 00000000..4777dbdc
--- /dev/null
+++ b/1801_proc_fix_type_confusion_in_pde_set_flags.patch
@@ -0,0 +1,40 @@
+Subject: [PATCH] proc: fix type confusion in pde_set_flags()
+
+Commit 2ce3d282bd50 ("proc: fix missing pde_set_flags() for net proc files")
+missed a key part in the definition of proc_dir_entry:
+
+union {
+       const struct proc_ops *proc_ops;
+       const struct file_operations *proc_dir_ops;
+};
+
+So dereference of ->proc_ops assumes it is a proc_ops structure results in
+type confusion and make NULL check for 'proc_ops' not work for proc dir.
+
+Add !S_ISDIR(dp->mode) test before calling pde_set_flags() to fix it.
+
+Fixes: 2ce3d282bd50 ("proc: fix missing pde_set_flags() for net proc files")
+Reported-by: Brad Spengler <[email protected]>
+Signed-off-by: wangzijie <[email protected]>
+---
+ fs/proc/generic.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/fs/proc/generic.c b/fs/proc/generic.c
+index bd0c099cf..176281112 100644
+--- a/fs/proc/generic.c
++++ b/fs/proc/generic.c
+@@ -393,7 +393,8 @@ struct proc_dir_entry *proc_register(struct proc_dir_entry 
*dir,
+       if (proc_alloc_inum(&dp->low_ino))
+               goto out_free_entry;
+ 
+-      pde_set_flags(dp);
++      if (!S_ISDIR(dp->mode))
++              pde_set_flags(dp);
+ 
+       write_lock(&proc_subdir_lock);
+       dp->parent = dir;
+-- 
+2.25.1
+
+

Reply via email to