diff mbox series

NFSv4.2: fix error handling in nfs42_proc_getxattr

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

Commit Message

Fedor Pchelkin July 25, 2023, 11:58 a.m. UTC
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(-)

Comments

Benjamin Coddington July 26, 2023, 3:04 p.m. UTC | #1
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 mbox series

Patch

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;