* [PATCH] jfs: validate active AG before updating db_active
@ 2026-06-11 21:29 Kyle Zeng
2026-06-12 9:45 ` kernel test robot
2026-06-12 10:51 ` kernel test robot
0 siblings, 2 replies; 3+ messages in thread
From: Kyle Zeng @ 2026-06-11 21:29 UTC (permalink / raw)
To: jfs-discussion
Cc: linux-kernel, Christian Brauner, Dave Kleikamp,
outbounddisclosures, Kyle Zeng, stable
When an empty regular file is opened for write, jfs_open() tracks a
single active file per allocation group. The allocation group is derived
from ji->ixpxd, which is copied from the on-disk inode in
copy_from_dinode().
A corrupted image can set di_ixpxd to an address that maps beyond the
mounted bmap's db_numag. The existing code stores that unchecked result
in signed char active_ag and then uses it to index db_active[]. For
example, an AG value of 249 wraps to -7 before the atomic increment,
causing a write before db_active and corrupting adjacent struct bmap
state.
Compute the AG in an unsigned type and reject values outside db_numag
before storing active_ag or indexing db_active[]. dbMount() already
validates db_numag <= MAXAG, so accepted values fit in active_ag and in
the db_active[] array.
Fixes: d31b53e3cd06 ("JFS: Don't save agno in the inode")
Cc: stable@vger.kernel.org
Assisted-by: Codex:gpt-5.5
Signed-off-by: Kyle Zeng <kylebot@openai.com>
---
fs/jfs/file.c | 30 ++++++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)
diff --git a/fs/jfs/file.c b/fs/jfs/file.c
index 81556da507b9..6d5f336b7a19 100644
--- a/fs/jfs/file.c
+++ b/fs/jfs/file.c
@@ -38,6 +38,24 @@ int jfs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
return rc ? -EIO : 0;
}
+static int jfs_get_active_ag(struct inode *inode, int *agp)
+{
+ struct jfs_inode_info *ji = JFS_IP(inode);
+ struct jfs_sb_info *sbi = JFS_SBI(inode->i_sb);
+ struct bmap *bmap = sbi->bmap;
+ u64 ag = BLKTOAG(addressPXD(&ji->ixpxd), sbi);
+
+ if (ag >= bmap->db_numag) {
+ jfs_error(inode->i_sb,
+ "inode %lu has invalid active ag %llu\n",
+ inode->i_ino, (unsigned long long)ag);
+ return -EIO;
+ }
+
+ *agp = ag;
+ return 0;
+}
+
static int jfs_open(struct inode *inode, struct file *file)
{
int rc;
@@ -63,11 +81,18 @@ static int jfs_open(struct inode *inode, struct file *file)
if (S_ISREG(inode->i_mode) && file->f_mode & FMODE_WRITE &&
(inode->i_size == 0)) {
struct jfs_inode_info *ji = JFS_IP(inode);
+ struct bmap *bmap;
+ int active_ag;
+
+ rc = jfs_get_active_ag(inode, &active_ag);
+ if (rc)
+ return rc;
+
spin_lock_irq(&ji->ag_lock);
if (ji->active_ag == -1) {
- struct jfs_sb_info *jfs_sb = JFS_SBI(inode->i_sb);
- ji->active_ag = BLKTOAG(addressPXD(&ji->ixpxd), jfs_sb);
- atomic_inc(&jfs_sb->bmap->db_active[ji->active_ag]);
+ bmap = JFS_SBI(inode->i_sb)->bmap;
+ ji->active_ag = active_ag;
+ atomic_inc(&bmap->db_active[active_ag]);
}
spin_unlock_irq(&ji->ag_lock);
}
--
2.43.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] jfs: validate active AG before updating db_active
2026-06-11 21:29 [PATCH] jfs: validate active AG before updating db_active Kyle Zeng
@ 2026-06-12 9:45 ` kernel test robot
2026-06-12 10:51 ` kernel test robot
1 sibling, 0 replies; 3+ messages in thread
From: kernel test robot @ 2026-06-12 9:45 UTC (permalink / raw)
To: Kyle Zeng, jfs-discussion
Cc: oe-kbuild-all, linux-kernel, Christian Brauner, Dave Kleikamp,
outbounddisclosures, Kyle Zeng, stable
Hi Kyle,
kernel test robot noticed the following build errors:
[auto build test ERROR on brauner-vfs/vfs.all]
[also build test ERROR on linus/master kleikamp-shaggy/jfs-next v7.1-rc7 next-20260611]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Kyle-Zeng/jfs-validate-active-AG-before-updating-db_active/20260612-054255
base: https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git vfs.all
patch link: https://lore.kernel.org/r/20260611212956.10206-1-kylebot%40openai.com
patch subject: [PATCH] jfs: validate active AG before updating db_active
config: s390-randconfig-002-20260612 (https://download.01.org/0day-ci/archive/20260612/202606121758.6bifYIqm-lkp@intel.com/config)
compiler: s390-linux-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260612/202606121758.6bifYIqm-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202606121758.6bifYIqm-lkp@intel.com/
All errors (new ones prefixed by >>):
fs/jfs/file.c: In function 'jfs_get_active_ag':
>> fs/jfs/file.c:52:3: error: implicit declaration of function 'jfs_error'; did you mean 'xas_error'? [-Werror=implicit-function-declaration]
jfs_error(inode->i_sb,
^~~~~~~~~
xas_error
cc1: some warnings being treated as errors
vim +52 fs/jfs/file.c
43
44 static int jfs_get_active_ag(struct inode *inode, int *agp)
45 {
46 struct jfs_inode_info *ji = JFS_IP(inode);
47 struct jfs_sb_info *sbi = JFS_SBI(inode->i_sb);
48 struct bmap *bmap = sbi->bmap;
49 u64 ag = BLKTOAG(addressPXD(&ji->ixpxd), sbi);
50
51 if (ag >= bmap->db_numag) {
> 52 jfs_error(inode->i_sb,
53 "inode %lu has invalid active ag %llu\n",
54 inode->i_ino, (unsigned long long)ag);
55 return -EIO;
56 }
57
58 *agp = ag;
59 return 0;
60 }
61
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] jfs: validate active AG before updating db_active
2026-06-11 21:29 [PATCH] jfs: validate active AG before updating db_active Kyle Zeng
2026-06-12 9:45 ` kernel test robot
@ 2026-06-12 10:51 ` kernel test robot
1 sibling, 0 replies; 3+ messages in thread
From: kernel test robot @ 2026-06-12 10:51 UTC (permalink / raw)
To: Kyle Zeng, jfs-discussion
Cc: llvm, oe-kbuild-all, linux-kernel, Christian Brauner,
Dave Kleikamp, outbounddisclosures, Kyle Zeng, stable
Hi Kyle,
kernel test robot noticed the following build errors:
[auto build test ERROR on brauner-vfs/vfs.all]
[also build test ERROR on linus/master kleikamp-shaggy/jfs-next v7.1-rc7 next-20260611]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Kyle-Zeng/jfs-validate-active-AG-before-updating-db_active/20260612-054255
base: https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git vfs.all
patch link: https://lore.kernel.org/r/20260611212956.10206-1-kylebot%40openai.com
patch subject: [PATCH] jfs: validate active AG before updating db_active
config: s390-defconfig (https://download.01.org/0day-ci/archive/20260612/202606121834.MtsXleJq-lkp@intel.com/config)
compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260612/202606121834.MtsXleJq-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202606121834.MtsXleJq-lkp@intel.com/
All errors (new ones prefixed by >>):
>> fs/jfs/file.c:52:3: error: call to undeclared function 'jfs_error'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
52 | jfs_error(inode->i_sb,
| ^
fs/jfs/file.c:52:3: note: did you mean 'xas_error'?
include/linux/xarray.h:1435:19: note: 'xas_error' declared here
1435 | static inline int xas_error(const struct xa_state *xas)
| ^
1 error generated.
vim +/jfs_error +52 fs/jfs/file.c
43
44 static int jfs_get_active_ag(struct inode *inode, int *agp)
45 {
46 struct jfs_inode_info *ji = JFS_IP(inode);
47 struct jfs_sb_info *sbi = JFS_SBI(inode->i_sb);
48 struct bmap *bmap = sbi->bmap;
49 u64 ag = BLKTOAG(addressPXD(&ji->ixpxd), sbi);
50
51 if (ag >= bmap->db_numag) {
> 52 jfs_error(inode->i_sb,
53 "inode %lu has invalid active ag %llu\n",
54 inode->i_ino, (unsigned long long)ag);
55 return -EIO;
56 }
57
58 *agp = ag;
59 return 0;
60 }
61
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-06-12 10:51 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-11 21:29 [PATCH] jfs: validate active AG before updating db_active Kyle Zeng
2026-06-12 9:45 ` kernel test robot
2026-06-12 10:51 ` kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome