From: Weston Andros Adamson Date: Mon, 20 Jan 2014 03:45:36 +0000 (-0500) Subject: nfs4: fix discover_server_trunking use after free X-Git-Tag: v3.14-rc1~15^2~12 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=abad2fa5ba67725a3f9c376c8cfe76fbe94a3041;p=kernel%2Fkernel-generic.git nfs4: fix discover_server_trunking use after free If clp is new (cl_count = 1) and it matches another client in nfs4_discover_server_trunking, the nfs_put_client will free clp before ->cl_preserve_clid is set. Cc: stable@vger.kernel.org # 3.7+ Signed-off-by: Weston Andros Adamson Signed-off-by: Trond Myklebust --- diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c index 06e770a..73d4ecd 100644 --- a/fs/nfs/nfs4client.c +++ b/fs/nfs/nfs4client.c @@ -414,13 +414,11 @@ struct nfs_client *nfs4_init_client(struct nfs_client *clp, error = nfs4_discover_server_trunking(clp, &old); if (error < 0) goto error; - nfs_put_client(clp); - if (clp != old) { - clp->cl_preserve_clid = true; - clp = old; - } - return clp; + if (clp != old) + clp->cl_preserve_clid = true; + nfs_put_client(clp); + return old; error: nfs_mark_client_ready(clp, error);