Message ID | 20230725115900.23690-1-pchelkin@ispras.ru (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | NFSv4.2: fix error handling in nfs42_proc_getxattr | expand |
On 25 Jul 2023, at 7:58, Fedor Pchelkin wrote: > There is a slight issue with error handling code inside > nfs42_proc_getxattr(). If page allocating loop fails then we free the > failing page array element which is NULL but __free_page() can't deal with > NULL args. > > Found by Linux Verification Center (linuxtesting.org). > > Fixes: a1f26739ccdc ("NFSv4.2: improve page handling for GETXATTR") > Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru> Looks right to me, Reviewed-by: Benjamin Coddington <bcodding@redhat.com> Ben
diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c index 63802d195556..49f78e23b34c 100644 --- a/fs/nfs/nfs42proc.c +++ b/fs/nfs/nfs42proc.c @@ -1377,7 +1377,6 @@ ssize_t nfs42_proc_getxattr(struct inode *inode, const char *name, for (i = 0; i < np; i++) { pages[i] = alloc_page(GFP_KERNEL); if (!pages[i]) { - np = i + 1; err = -ENOMEM; goto out; } @@ -1401,8 +1400,8 @@ ssize_t nfs42_proc_getxattr(struct inode *inode, const char *name, } while (exception.retry); out: - while (--np >= 0) - __free_page(pages[np]); + while (--i >= 0) + __free_page(pages[i]); kfree(pages); return err;
There is a slight issue with error handling code inside nfs42_proc_getxattr(). If page allocating loop fails then we free the failing page array element which is NULL but __free_page() can't deal with NULL args. Found by Linux Verification Center (linuxtesting.org). Fixes: a1f26739ccdc ("NFSv4.2: improve page handling for GETXATTR") Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru> --- fs/nfs/nfs42proc.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)