2023-10-25 06:09:49

by Manas Ghandat

[permalink] [raw]
Subject: [PATCH-v2] jfs: fix slab-out-of-bounds Read in dtSearch

Currently while searching for current page in the sorted entry table
of the page there is a out of bound access. Added a bound check to fix
the error.

Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>
Closes: https://lore.kernel.org/r/[email protected]/
Signed-off-by: Manas Ghandat <[email protected]>
---
V1 -> V2 : Removed redundant check on stbl

fs/jfs/jfs_dtree.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c
index 92b7c533407c..cf67d32d5b7f 100644
--- a/fs/jfs/jfs_dtree.c
+++ b/fs/jfs/jfs_dtree.c
@@ -633,6 +633,9 @@ int dtSearch(struct inode *ip, struct component_name * key, ino_t * data,
for (base = 0, lim = p->header.nextindex; lim; lim >>= 1) {
index = base + (lim >> 1);

+ if (stbl[index] < 0)
+ goto out;
+
if (p->header.flag & BT_LEAF) {
/* uppercase leaf name to compare */
cmp =
--
2.37.2


2023-11-01 15:21:39

by Dave Kleikamp

[permalink] [raw]
Subject: Re: [PATCH-v2] jfs: fix slab-out-of-bounds Read in dtSearch

On 10/25/23 1:09AM, Manas Ghandat wrote:
> Currently while searching for current page in the sorted entry table
> of the page there is a out of bound access. Added a bound check to fix
> the error.

Looks good. I made the small change of setting rc = -EIO in that case,
so we know there is something wrong with the file system.

Thanks,
Shaggy

>
> Reported-by: kernel test robot <[email protected]>
> Reported-by: Dan Carpenter <[email protected]>
> Closes: https://lore.kernel.org/r/[email protected]/
> Signed-off-by: Manas Ghandat <[email protected]>
> ---
> V1 -> V2 : Removed redundant check on stbl
>
> fs/jfs/jfs_dtree.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c
> index 92b7c533407c..cf67d32d5b7f 100644
> --- a/fs/jfs/jfs_dtree.c
> +++ b/fs/jfs/jfs_dtree.c
> @@ -633,6 +633,9 @@ int dtSearch(struct inode *ip, struct component_name * key, ino_t * data,
> for (base = 0, lim = p->header.nextindex; lim; lim >>= 1) {
> index = base + (lim >> 1);
>
> + if (stbl[index] < 0)
> + goto out;
> +
> if (p->header.flag & BT_LEAF) {
> /* uppercase leaf name to compare */
> cmp =