Patch "nfsd: fix undefined behavior in nfsd4_layout_verify" has been added to the 4.11-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
nfsd: fix undefined behavior in nfsd4_layout_verify
to the 4.11-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
nfsd-fix-undefined-behavior-in-nfsd4_layout_verify.patch
and it can be found in the queue-4.11 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
b550a32e60a4941994b437a8d662432a486235a5Mon Sep 17 00:00:00 2001
From: Ari Kauppi <[email protected]>
Date: Fri, 5 May 2017 16:07:55 -0400
Subject: nfsd: fix undefined behavior in nfsd4_layout_verify
From: Ari Kauppi <[email protected]>
commit b550a32e60a4941994b437a8d662432a486235a5 upstream.
UBSAN: Undefined behaviour in fs/nfsd/nfs4proc.c:1262:34 shift exponent 128 is too large for 32-bit type 'int'
Depending on compiler+architecture, this may cause the check for layout_type to succeed for overly large values (which seems to be the case with amd64). The large value will be later used in de-referencing nfsd4_layout_ops for function pointers.
--- fs/nfsd/nfs4proc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/nfsd/nfs4proc.c +2 -1
@@ -1259,7 +1259,8 @@ nfsd4_layout_verify(struct svc_export *ereturn NULL ; } -if (!(exp->ex_layout_types & (1 << layout_type))) { +if (layout_type >=LAYOUT_TYPE_MAX || + !(exp->ex_layout_types & (1 << layout_type))) {dprintk ("%s: layout type %d not supported\n" , __func__, layout_type);return NULL ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.11/nfsd-check-for-oversized-nfsv2-v3-arguments.patch queue-4.11/nfsd-fix-undefined-behavior-in-nfsd4_layout_verify.patch