[1/1] NFSv4.2 re-initialize cn_resp in case of a retry
diff mbox series

Message ID 20200121221441.29521-1-olga.kornievskaia@gmail.com
State New
Headers show
Series
  • [1/1] NFSv4.2 re-initialize cn_resp in case of a retry
Related show

Commit Message

Olga Kornievskaia Jan. 21, 2020, 10:14 p.m. UTC
From: Olga Kornievskaia <kolga@netapp.com>

If nfs42_proc_copy returned a EAGAIN, we need to re-initialize the
memory in case memory allocation fails.

Fixes: 66588abe2 ("NFSv4.2 fix kfree in __nfs42_copy_file_range")
Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>
Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
---
 fs/nfs/nfs4file.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Anna Schumaker Jan. 22, 2020, 6:40 p.m. UTC | #1
Hi Olga,

On Tue, 2020-01-21 at 17:14 -0500, Olga Kornievskaia wrote:
> From: Olga Kornievskaia <kolga@netapp.com>
> 
> If nfs42_proc_copy returned a EAGAIN, we need to re-initialize the
> memory in case memory allocation fails.

I guess I'm not sure how we would hit this. Doesn't kzalloc() return NULL if the
memory allocation fails?

> 
> Fixes: 66588abe2 ("NFSv4.2 fix kfree in __nfs42_copy_file_range")
> Reported-by: kbuild test robot <lkp@intel.com>
> Reported-by: Julia Lawall <julia.lawall@lip6.fr>
> Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
> ---
>  fs/nfs/nfs4file.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c
> index 620de90..9f72efe 100644
> --- a/fs/nfs/nfs4file.c
> +++ b/fs/nfs/nfs4file.c
> @@ -177,8 +177,10 @@ static ssize_t __nfs4_copy_file_range(struct file
> *file_in, loff_t pos_in,
>  	ret = nfs42_proc_copy(file_in, pos_in, file_out, pos_out, count,
>  				nss, cnrs, sync);
>  out:
> -	if (!nfs42_files_from_same_server(file_in, file_out))
> +	if (!nfs42_files_from_same_server(file_in, file_out)) {
>  		kfree(cn_resp);
> +		cn_resp = NULL;
> +	}
>  	if (ret == -EAGAIN)
>  		goto retry;
>  	return ret;
Olga Kornievskaia Jan. 22, 2020, 8:27 p.m. UTC | #2
On Wed, Jan 22, 2020 at 1:40 PM Schumaker, Anna
<Anna.Schumaker@netapp.com> wrote:
>
> Hi Olga,
>
> On Tue, 2020-01-21 at 17:14 -0500, Olga Kornievskaia wrote:
> > From: Olga Kornievskaia <kolga@netapp.com>
> >
> > If nfs42_proc_copy returned a EAGAIN, we need to re-initialize the
> > memory in case memory allocation fails.
>
> I guess I'm not sure how we would hit this. Doesn't kzalloc() return NULL if the
> memory allocation fails?

You are right kzalloc would always return NULL so forget about this patch.

>
> >
> > Fixes: 66588abe2 ("NFSv4.2 fix kfree in __nfs42_copy_file_range")
> > Reported-by: kbuild test robot <lkp@intel.com>
> > Reported-by: Julia Lawall <julia.lawall@lip6.fr>
> > Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
> > ---
> >  fs/nfs/nfs4file.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c
> > index 620de90..9f72efe 100644
> > --- a/fs/nfs/nfs4file.c
> > +++ b/fs/nfs/nfs4file.c
> > @@ -177,8 +177,10 @@ static ssize_t __nfs4_copy_file_range(struct file
> > *file_in, loff_t pos_in,
> >       ret = nfs42_proc_copy(file_in, pos_in, file_out, pos_out, count,
> >                               nss, cnrs, sync);
> >  out:
> > -     if (!nfs42_files_from_same_server(file_in, file_out))
> > +     if (!nfs42_files_from_same_server(file_in, file_out)) {
> >               kfree(cn_resp);
> > +             cn_resp = NULL;
> > +     }
> >       if (ret == -EAGAIN)
> >               goto retry;
> >       return ret;

Patch
diff mbox series

diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c
index 620de90..9f72efe 100644
--- a/fs/nfs/nfs4file.c
+++ b/fs/nfs/nfs4file.c
@@ -177,8 +177,10 @@  static ssize_t __nfs4_copy_file_range(struct file *file_in, loff_t pos_in,
 	ret = nfs42_proc_copy(file_in, pos_in, file_out, pos_out, count,
 				nss, cnrs, sync);
 out:
-	if (!nfs42_files_from_same_server(file_in, file_out))
+	if (!nfs42_files_from_same_server(file_in, file_out)) {
 		kfree(cn_resp);
+		cn_resp = NULL;
+	}
 	if (ret == -EAGAIN)
 		goto retry;
 	return ret;