mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
9p: use kvzalloc for readdir buffer
The readdir buffer is sized to msize, so kzalloc() can fail under
fragmentation with a page allocation failure in v9fs_alloc_rdir_buf()
/ v9fs_dir_readdir_dotl().
The buffer is only a response sink and is never pack_sg_list()'d,
so kvzalloc() is safe for all transports, unlike the fcall buffers
fixed in e21d451a82 ("9p: Use kvmalloc for message buffers on
supported transports").
Signed-off-by: Pierre Barre <pierre@barre.sh>
Message-ID: <20260512132032.369281-1-pierre@barre.sh>
Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
This commit is contained in:
parent
9061075b4f
commit
b4d71bea14
|
|
@ -70,7 +70,7 @@ static struct p9_rdir *v9fs_alloc_rdir_buf(struct file *filp, int buflen)
|
|||
struct p9_fid *fid = filp->private_data;
|
||||
|
||||
if (!fid->rdir)
|
||||
fid->rdir = kzalloc(sizeof(struct p9_rdir) + buflen, GFP_KERNEL);
|
||||
fid->rdir = kvzalloc(sizeof(struct p9_rdir) + buflen, GFP_KERNEL);
|
||||
return fid->rdir;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -765,7 +765,7 @@ static void p9_fid_destroy(struct p9_fid *fid)
|
|||
spin_lock_irqsave(&clnt->lock, flags);
|
||||
idr_remove(&clnt->fids, fid->fid);
|
||||
spin_unlock_irqrestore(&clnt->lock, flags);
|
||||
kfree(fid->rdir);
|
||||
kvfree(fid->rdir);
|
||||
kfree(fid);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user