AW: [PATCH] bfs: prevent underflow in bfs_find_entry()
From: Walter Harms
Date: Mon Mar 09 2020 - 04:40:45 EST
________________________________________
Von: kernel-janitors-owner@xxxxxxxxxxxxxxx <kernel-janitors-owner@xxxxxxxxxxxxxxx> im Auftrag von Dan Carpenter <dan.carpenter@xxxxxxxxxx>
Gesendet: Samstag, 7. März 2020 07:08
An: Tigran A. Aivazian
Cc: linux-kernel@xxxxxxxxxxxxxxx; kernel-janitors@xxxxxxxxxxxxxxx
Betreff: [PATCH] bfs: prevent underflow in bfs_find_entry()
We check if "namelen" is larger than BFS_NAMELEN but we don't check
if it's less than zero so it causes a static checker.
fs/bfs/dir.c:346 bfs_find_entry() warn: no lower bound on 'namelen'
It's nicer to make it unsigned anyway.
Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
---
fs/bfs/dir.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/bfs/dir.c b/fs/bfs/dir.c
index d8dfe3a0cb39..46a2663e5eb2 100644
--- a/fs/bfs/dir.c
+++ b/fs/bfs/dir.c
@@ -326,7 +326,7 @@ static struct buffer_head *bfs_find_entry(struct inode *dir,
struct buffer_head *bh = NULL;
struct bfs_dirent *de;
const unsigned char *name = child->name;
- int namelen = child->len;
+ unsigned int namelen = child->len;
*res_dir = NULL;
if (namelen > BFS_NAMELEN)
hi Dan,
the namelen usage is fishy. It goes into bfs_namecmp()
where it is checked for namelen < BFS_NAMELEN, leaving
only the case ==.
bfs_namecmp() expects an int, so i would expect a warning.
Perhaps in this case it is better to change the if() into
if ( namelen <= 0 || namelen >= BFS_NAMELEN)
return NULL;
note: bfs_add_entry has the same "issue"
jm2c,
re,
wh
--
2.11.0