nfsd: make a copy of struct iattr before calling notify_change
authorJeff Layton <jlayton@kernel.org>
Wed, 17 May 2023 16:26:44 +0000 (12:26 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 9 Jun 2023 08:34:00 +0000 (10:34 +0200)
commitbd424277a1f86c41254d1068889908067d1f6aa5
treeb15936c4e75386dd39ca0c9f81a166c0e4d02133
parentdac09fec5b57377d4ac1f735762af939fff6fc06
nfsd: make a copy of struct iattr before calling notify_change

[ Upstream commit d53d70084d27f56bcdf5074328f2c9ec861be596 ]

notify_change can modify the iattr structure. In particular it can
end up setting ATTR_MODE when ATTR_KILL_SUID is already set, causing
a BUG() if the same iattr is passed to notify_change more than once.

Make a copy of the struct iattr before calling notify_change.

Reported-by: Zhi Li <yieli@redhat.com>
Link: https://bugzilla.redhat.com/show_bug.cgi?id=2207969
Tested-by: Zhi Li <yieli@redhat.com>
Fixes: 34b91dda7124 ("NFSD: Make nfsd4_setattr() wait before returning NFS4ERR_DELAY")
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/nfsd/vfs.c