diff mbox series

NFSD: Fix NFSv4's PUTPUBFH operation

Message ID 20240811172607.7804-1-cel@kernel.org (mailing list archive)
State New
Headers show
Series NFSD: Fix NFSv4's PUTPUBFH operation | expand

Commit Message

Chuck Lever Aug. 11, 2024, 5:26 p.m. UTC
From: Chuck Lever <chuck.lever@oracle.com>

According to RFC 8881, all minor versions of NFSv4 support PUTPUBFH.

Replace the XDR decoder for PUTPUBFH with a "noop" since we no
longer want the minorversion check, and PUTPUBFH has no arguments to
decode. (Ideally nfsd4_decode_noop should really be called
nfsd4_decode_void).

PUTPUBFH should now behave just like PUTROOTFH.

Reported-by: Cedric Blancher <cedric.blancher@gmail.com>
Fixes: e1a90ebd8b23 ("NFSD: Combine decode operations for v4 and v4.1")
Cc: Dan Shelton <dan.f.shelton@gmail.com>
Cc: Roland Mainz <roland.mainz@nrubsig.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 fs/nfsd/nfs4xdr.c | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)

Comments

Cedric Blancher Sept. 19, 2024, 12:50 p.m. UTC | #1
Could this bugfix please be added to the Linux 6.6 LTS branch too?

Ced

On Sun, 11 Aug 2024 at 19:26, <cel@kernel.org> wrote:
>
> From: Chuck Lever <chuck.lever@oracle.com>
>
> According to RFC 8881, all minor versions of NFSv4 support PUTPUBFH.
>
> Replace the XDR decoder for PUTPUBFH with a "noop" since we no
> longer want the minorversion check, and PUTPUBFH has no arguments to
> decode. (Ideally nfsd4_decode_noop should really be called
> nfsd4_decode_void).
>
> PUTPUBFH should now behave just like PUTROOTFH.
>
> Reported-by: Cedric Blancher <cedric.blancher@gmail.com>
> Fixes: e1a90ebd8b23 ("NFSD: Combine decode operations for v4 and v4.1")
> Cc: Dan Shelton <dan.f.shelton@gmail.com>
> Cc: Roland Mainz <roland.mainz@nrubsig.org>
> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
> ---
>  fs/nfsd/nfs4xdr.c | 10 +---------
>  1 file changed, 1 insertion(+), 9 deletions(-)
>
> diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
> index 42b41d55d4ed..adfafe48b947 100644
> --- a/fs/nfsd/nfs4xdr.c
> +++ b/fs/nfsd/nfs4xdr.c
> @@ -1245,14 +1245,6 @@ nfsd4_decode_putfh(struct nfsd4_compoundargs *argp, union nfsd4_op_u *u)
>         return nfs_ok;
>  }
>
> -static __be32
> -nfsd4_decode_putpubfh(struct nfsd4_compoundargs *argp, union nfsd4_op_u *p)
> -{
> -       if (argp->minorversion == 0)
> -               return nfs_ok;
> -       return nfserr_notsupp;
> -}
> -
>  static __be32
>  nfsd4_decode_read(struct nfsd4_compoundargs *argp, union nfsd4_op_u *u)
>  {
> @@ -2374,7 +2366,7 @@ static const nfsd4_dec nfsd4_dec_ops[] = {
>         [OP_OPEN_CONFIRM]       = nfsd4_decode_open_confirm,
>         [OP_OPEN_DOWNGRADE]     = nfsd4_decode_open_downgrade,
>         [OP_PUTFH]              = nfsd4_decode_putfh,
> -       [OP_PUTPUBFH]           = nfsd4_decode_putpubfh,
> +       [OP_PUTPUBFH]           = nfsd4_decode_noop,
>         [OP_PUTROOTFH]          = nfsd4_decode_noop,
>         [OP_READ]               = nfsd4_decode_read,
>         [OP_READDIR]            = nfsd4_decode_readdir,
> --
> 2.45.2
>
Chuck Lever III Sept. 19, 2024, 1:46 p.m. UTC | #2
> On Sep 19, 2024, at 5:50 AM, Cedric Blancher <cedric.blancher@gmail.com> wrote:
> 
> Could this bugfix please be added to the Linux 6.6 LTS branch too?

Once I submit the pull request for v6.12, the stable folks should
see this patch has a Fixes: tag and pull it into all the LTS trees.

I'll try to remember to check on it once the v6.12 merge window
closes.


> Ced
> 
> On Sun, 11 Aug 2024 at 19:26, <cel@kernel.org> wrote:
>> 
>> From: Chuck Lever <chuck.lever@oracle.com>
>> 
>> According to RFC 8881, all minor versions of NFSv4 support PUTPUBFH.
>> 
>> Replace the XDR decoder for PUTPUBFH with a "noop" since we no
>> longer want the minorversion check, and PUTPUBFH has no arguments to
>> decode. (Ideally nfsd4_decode_noop should really be called
>> nfsd4_decode_void).
>> 
>> PUTPUBFH should now behave just like PUTROOTFH.
>> 
>> Reported-by: Cedric Blancher <cedric.blancher@gmail.com>
>> Fixes: e1a90ebd8b23 ("NFSD: Combine decode operations for v4 and v4.1")
>> Cc: Dan Shelton <dan.f.shelton@gmail.com>
>> Cc: Roland Mainz <roland.mainz@nrubsig.org>
>> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
>> ---
>> fs/nfsd/nfs4xdr.c | 10 +---------
>> 1 file changed, 1 insertion(+), 9 deletions(-)
>> 
>> diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
>> index 42b41d55d4ed..adfafe48b947 100644
>> --- a/fs/nfsd/nfs4xdr.c
>> +++ b/fs/nfsd/nfs4xdr.c
>> @@ -1245,14 +1245,6 @@ nfsd4_decode_putfh(struct nfsd4_compoundargs *argp, union nfsd4_op_u *u)
>>        return nfs_ok;
>> }
>> 
>> -static __be32
>> -nfsd4_decode_putpubfh(struct nfsd4_compoundargs *argp, union nfsd4_op_u *p)
>> -{
>> -       if (argp->minorversion == 0)
>> -               return nfs_ok;
>> -       return nfserr_notsupp;
>> -}
>> -
>> static __be32
>> nfsd4_decode_read(struct nfsd4_compoundargs *argp, union nfsd4_op_u *u)
>> {
>> @@ -2374,7 +2366,7 @@ static const nfsd4_dec nfsd4_dec_ops[] = {
>>        [OP_OPEN_CONFIRM]       = nfsd4_decode_open_confirm,
>>        [OP_OPEN_DOWNGRADE]     = nfsd4_decode_open_downgrade,
>>        [OP_PUTFH]              = nfsd4_decode_putfh,
>> -       [OP_PUTPUBFH]           = nfsd4_decode_putpubfh,
>> +       [OP_PUTPUBFH]           = nfsd4_decode_noop,
>>        [OP_PUTROOTFH]          = nfsd4_decode_noop,
>>        [OP_READ]               = nfsd4_decode_read,
>>        [OP_READDIR]            = nfsd4_decode_readdir,
>> --
>> 2.45.2
>> 
> 
> 
> -- 
> Cedric Blancher <cedric.blancher@gmail.com>
> [https://plus.google.com/u/0/+CedricBlancher/]
> Institute Pasteur

--
Chuck Lever
diff mbox series

Patch

diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 42b41d55d4ed..adfafe48b947 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -1245,14 +1245,6 @@  nfsd4_decode_putfh(struct nfsd4_compoundargs *argp, union nfsd4_op_u *u)
 	return nfs_ok;
 }
 
-static __be32
-nfsd4_decode_putpubfh(struct nfsd4_compoundargs *argp, union nfsd4_op_u *p)
-{
-	if (argp->minorversion == 0)
-		return nfs_ok;
-	return nfserr_notsupp;
-}
-
 static __be32
 nfsd4_decode_read(struct nfsd4_compoundargs *argp, union nfsd4_op_u *u)
 {
@@ -2374,7 +2366,7 @@  static const nfsd4_dec nfsd4_dec_ops[] = {
 	[OP_OPEN_CONFIRM]	= nfsd4_decode_open_confirm,
 	[OP_OPEN_DOWNGRADE]	= nfsd4_decode_open_downgrade,
 	[OP_PUTFH]		= nfsd4_decode_putfh,
-	[OP_PUTPUBFH]		= nfsd4_decode_putpubfh,
+	[OP_PUTPUBFH]		= nfsd4_decode_noop,
 	[OP_PUTROOTFH]		= nfsd4_decode_noop,
 	[OP_READ]		= nfsd4_decode_read,
 	[OP_READDIR]		= nfsd4_decode_readdir,