From: Trond Myklebust Date: Tue, 8 Jan 2013 15:03:22 +0000 (-0500) Subject: SUNRPC: Fix an RCU dereference in xprt_reserve X-Git-Url: http://git.mmlx.us/?a=commitdiff_plain;h=45bc0dce9879505d6fd9ff68dcd0359fb260dfd7;p=linux-edison.git SUNRPC: Fix an RCU dereference in xprt_reserve Signed-off-by: Trond Myklebust --- diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c index e1e439ea177..7f3a01a8cae 100644 --- a/net/sunrpc/xprt.c +++ b/net/sunrpc/xprt.c @@ -1093,7 +1093,7 @@ EXPORT_SYMBOL_GPL(xprt_free); */ void xprt_reserve(struct rpc_task *task) { - struct rpc_xprt *xprt = task->tk_xprt; + struct rpc_xprt *xprt; task->tk_status = 0; if (task->tk_rqstp != NULL) @@ -1101,7 +1101,10 @@ void xprt_reserve(struct rpc_task *task) task->tk_timeout = 0; task->tk_status = -EAGAIN; + rcu_read_lock(); + xprt = rcu_dereference(task->tk_client->cl_xprt); xprt->ops->alloc_slot(xprt, task); + rcu_read_unlock(); } static inline __be32 xprt_alloc_xid(struct rpc_xprt *xprt)