mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-08 18:42:53 +00:00
SUNRPC: Fix suspicious RCU usage
We need to hold the rcu_read_lock() when calling rcu_dereference(),
otherwise we can't guarantee that the object being dereferenced still
exists.
Fixes: 39e5d2df
("SUNRPC search xprt switch for sockaddr")
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
68a564006a
commit
bb29dd8433
@ -2753,14 +2753,18 @@ EXPORT_SYMBOL_GPL(rpc_cap_max_reconnect_timeout);
|
|||||||
|
|
||||||
void rpc_clnt_xprt_switch_put(struct rpc_clnt *clnt)
|
void rpc_clnt_xprt_switch_put(struct rpc_clnt *clnt)
|
||||||
{
|
{
|
||||||
|
rcu_read_lock();
|
||||||
xprt_switch_put(rcu_dereference(clnt->cl_xpi.xpi_xpswitch));
|
xprt_switch_put(rcu_dereference(clnt->cl_xpi.xpi_xpswitch));
|
||||||
|
rcu_read_unlock();
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rpc_clnt_xprt_switch_put);
|
EXPORT_SYMBOL_GPL(rpc_clnt_xprt_switch_put);
|
||||||
|
|
||||||
void rpc_clnt_xprt_switch_add_xprt(struct rpc_clnt *clnt, struct rpc_xprt *xprt)
|
void rpc_clnt_xprt_switch_add_xprt(struct rpc_clnt *clnt, struct rpc_xprt *xprt)
|
||||||
{
|
{
|
||||||
|
rcu_read_lock();
|
||||||
rpc_xprt_switch_add_xprt(rcu_dereference(clnt->cl_xpi.xpi_xpswitch),
|
rpc_xprt_switch_add_xprt(rcu_dereference(clnt->cl_xpi.xpi_xpswitch),
|
||||||
xprt);
|
xprt);
|
||||||
|
rcu_read_unlock();
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rpc_clnt_xprt_switch_add_xprt);
|
EXPORT_SYMBOL_GPL(rpc_clnt_xprt_switch_add_xprt);
|
||||||
|
|
||||||
@ -2770,9 +2774,8 @@ bool rpc_clnt_xprt_switch_has_addr(struct rpc_clnt *clnt,
|
|||||||
struct rpc_xprt_switch *xps;
|
struct rpc_xprt_switch *xps;
|
||||||
bool ret;
|
bool ret;
|
||||||
|
|
||||||
xps = rcu_dereference(clnt->cl_xpi.xpi_xpswitch);
|
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
|
xps = rcu_dereference(clnt->cl_xpi.xpi_xpswitch);
|
||||||
ret = rpc_xprt_switch_has_addr(xps, sap);
|
ret = rpc_xprt_switch_has_addr(xps, sap);
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
Reference in New Issue
Block a user