Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a24221dc authored by Jeff Layton's avatar Jeff Layton Committed by Trond Myklebust
Browse files

nfs: fix potential credential leak in ff_layout_update_mirror_cred



If we have two tasks racing to update a mirror's credentials, then they
can end up leaking one (or more) sets of credentials. The first task
will set mirror->cred and then the second task will just overwrite it.

Use a cmpxchg to ensure that the creds are only set once. If we get to
the point where we would set mirror->cred and find that they're already
set, then we just release the creds that were just found.

Signed-off-by: default avatarJeff Layton <jeff.layton@primarydata.com>
Cc: stable@vger.kernel.org # 4.0+
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
parent 1372a313
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -324,7 +324,8 @@ static int ff_layout_update_mirror_cred(struct nfs4_ff_layout_mirror *mirror,
				__func__, PTR_ERR(cred));
			return PTR_ERR(cred);
		} else {
			mirror->cred = cred;
			if (cmpxchg(&mirror->cred, NULL, cred))
				put_rpccred(cred);
		}
	}
	return 0;