NFSv4.2: Fix a memory stomp in decode_attr_security_label
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Tue, 18 Oct 2022 22:21:14 +0000 (18:21 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 31 Dec 2022 12:32:18 +0000 (13:32 +0100)
[ Upstream commit 43c1031f7110967c240cb6e922adcfc4b8899183 ]

We must not change the value of label->len if it is zero, since that
indicates we stored a label.

Fixes: b4487b935452 ("nfs: Fix getxattr kernel panic and memory overflow")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/nfs/nfs4xdr.c

index 9103e02..deec76c 100644 (file)
@@ -4236,12 +4236,10 @@ static int decode_attr_security_label(struct xdr_stream *xdr, uint32_t *bitmap,
                        return -EIO;
                bitmap[2] &= ~FATTR4_WORD2_SECURITY_LABEL;
                if (len < NFS4_MAXLABELLEN) {
-                       if (label) {
-                               if (label->len) {
-                                       if (label->len < len)
-                                               return -ERANGE;
-                                       memcpy(label->label, p, len);
-                               }
+                       if (label && label->len) {
+                               if (label->len < len)
+                                       return -ERANGE;
+                               memcpy(label->label, p, len);
                                label->len = len;
                                label->pi = pi;
                                label->lfs = lfs;