diff mbox series

netfs: Fix a KMSAN uninit-value error in netfs_clear_buffer

Message ID Zu4doSKzXfSuVipQ@gmail.com (mailing list archive)
State New
Headers show
Series netfs: Fix a KMSAN uninit-value error in netfs_clear_buffer | expand

Commit Message

Chang Yu Sept. 21, 2024, 1:13 a.m. UTC
Use kzalloc instead of kmalloc in netfs_buffer_append_folio to fix
a KMSAN uninit-value error in netfs_clear_buffer

Signed-off-by: Chang Yu <marcus.yu.56@gmail.com>
Reported-by: syzbot+921873345a95f4dae7e9@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=921873345a95f4dae7e9
Fixes: cd0277ed0c18 ("netfs: Use new folio_queue data type and iterator instead of xarray iter")
---
 fs/netfs/misc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

David Howells Sept. 22, 2024, 12:06 a.m. UTC | #1
Chang Yu <marcus.yu.56@gmail.com> wrote:

> -		tail = kmalloc(sizeof(*tail), GFP_NOFS);
> +		tail = kzalloc(sizeof(*tail), GFP_NOFS);

I'm deliberately not doing that because of the performance hit.  That's 31
pointers of which, in many cases, we're only going to use the first couple.
There's a bitmask indicating which pointers need putting and a counter that
indicates how many are used.

David
David Howells Sept. 23, 2024, 7:12 a.m. UTC | #2
Chang Yu <marcus.yu.56@gmail.com> wrote:

> Use kzalloc instead of kmalloc in netfs_buffer_append_folio to fix
> a KMSAN uninit-value error in netfs_clear_buffer

Btw, is this a theoretical error or are you actually seeing an uninitialised
pointer being dereferenced?

David
Chang Yu Oct. 1, 2024, 6:25 a.m. UTC | #3
On Mon, Sep 23, 2024 at 08:12:23AM +0100, David Howells wrote:
> Chang Yu <marcus.yu.56@gmail.com> wrote:
> 
> > Use kzalloc instead of kmalloc in netfs_buffer_append_folio to fix
> > a KMSAN uninit-value error in netfs_clear_buffer
> 
> Btw, is this a theoretical error or are you actually seeing an uninitialised
> pointer being dereferenced?
Apologies for the late reply. Yes this bug was reported by syzbot
(https://syzkaller.appspot.com/bug?extid=921873345a95f4dae7e9) and I was
able to reproduce it locally on my machine. I've just tested it with the
latest upstream and confirmed that the bug is still present. I will
send a revised patch shortly, please feel free to take a look.

Chang
diff mbox series

Patch

diff --git a/fs/netfs/misc.c b/fs/netfs/misc.c
index 0ad0982ce0e2..6f967b6d30b6 100644
--- a/fs/netfs/misc.c
+++ b/fs/netfs/misc.c
@@ -22,7 +22,7 @@  int netfs_buffer_append_folio(struct netfs_io_request *rreq, struct folio *folio
 		return -EIO;
 
 	if (!tail || folioq_full(tail)) {
-		tail = kmalloc(sizeof(*tail), GFP_NOFS);
+		tail = kzalloc(sizeof(*tail), GFP_NOFS);
 		if (!tail)
 			return -ENOMEM;
 		netfs_stat(&netfs_n_folioq);