From: Jeff Layton <jlayton@kernel.org> Date: 2023-03-30 18:57:46
Ensure that OPDESC() doesn't return a pointer that doesn't lie within
the array. In particular, this is a problem when this funtion is passed
OP_ILLEGAL, but let's return NULL for any invalid value.
Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
fs/nfsd/nfs4proc.c | 2 ++
1 file changed, 2 insertions(+)
This is the patch that I think we want ahead of this one:
nfsd: call op_release, even when op_func returns an error
If you end up with OP_ILLEGAL, then op->opdesc ends up pointing
somewhere far, far away, and the new op_release changes can trip over
that. We could add a Fixes tag for this, I suppose:
22b03214962e nfsd4: introduce OPDESC helper
...but that commit is from 2011, so it's probably not worth it.
From: Chuck Lever III <hidden> Date: 2023-03-30 19:33:12
On Mar 30, 2023, at 2:57 PM, Jeff Layton [off-list ref] wrote:
Ensure that OPDESC() doesn't return a pointer that doesn't lie within
the array. In particular, this is a problem when this funtion is passed
OP_ILLEGAL, but let's return NULL for any invalid value.
Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
fs/nfsd/nfs4proc.c | 2 ++
1 file changed, 2 insertions(+)
This is the patch that I think we want ahead of this one:
nfsd: call op_release, even when op_func returns an error
If you end up with OP_ILLEGAL, then op->opdesc ends up pointing
somewhere far, far away, and the new op_release changes can trip over
that. We could add a Fixes tag for this, I suppose:
22b03214962e nfsd4: introduce OPDESC helper
...but that commit is from 2011, so it's probably not worth it.
Well, my concern would be that we want this fix in stable if the
op_release fix is applied as well. I think we will need to either
squash these two or mark this one with an explicit Fixes: tag.
Several OPDESC callers appear to expect the return value will be
a non-NULL pointer, so this will either crash the system, or
crash the human reading the code. ;-)
Besides, those callers appear to have already range-checked the
opnum (on cursory inspection). It's only nfsd4_decode_compound()
that looks dodgy.
How about something like this (untested) instead?
NFSD: Don't call OPDESC with a potentially illegal opnum
[ Fill in your description here, or squash this patch ]
From: Jeff Layton <jlayton@kernel.org> Date: 2023-03-30 21:58:16
On Thu, 2023-03-30 at 19:32 +0000, Chuck Lever III wrote:
quoted
On Mar 30, 2023, at 2:57 PM, Jeff Layton [off-list ref] wrote:
Ensure that OPDESC() doesn't return a pointer that doesn't lie within
the array. In particular, this is a problem when this funtion is passed
OP_ILLEGAL, but let's return NULL for any invalid value.
Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
fs/nfsd/nfs4proc.c | 2 ++
1 file changed, 2 insertions(+)
This is the patch that I think we want ahead of this one:
nfsd: call op_release, even when op_func returns an error
If you end up with OP_ILLEGAL, then op->opdesc ends up pointing
somewhere far, far away, and the new op_release changes can trip over
that. We could add a Fixes tag for this, I suppose:
22b03214962e nfsd4: introduce OPDESC helper
...but that commit is from 2011, so it's probably not worth it.
Well, my concern would be that we want this fix in stable if the
op_release fix is applied as well. I think we will need to either
squash these two or mark this one with an explicit Fixes: tag.
Several OPDESC callers appear to expect the return value will be
a non-NULL pointer, so this will either crash the system, or
crash the human reading the code. ;-)
Yep, but the alternative is that they go off into la-la land and
probably just crash anyway with a GPF. You might get lucky and not
crash, but it's doubtful that it'd do anything you'd expect. At least by
setting it early to a NULL pointer, you're more likely to crash earlier,
at a point where you might be able to determine the cause.
quoted hunk
Besides, those callers appear to have already range-checked the
opnum (on cursory inspection). It's only nfsd4_decode_compound()
that looks dodgy.
How about something like this (untested) instead?
NFSD: Don't call OPDESC with a potentially illegal opnum
[ Fill in your description here, or squash this patch ]