SUNRPC: Do not dereference non-socket transports in sysfs
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Fri, 25 Mar 2022 14:37:31 +0000 (10:37 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Fri, 25 Mar 2022 17:22:58 +0000 (13:22 -0400)
commit421ab1be43bd015ffe744f4ea25df4f19d1ce6fe
tree1785c927d5e19320706b5fa78effe0fc9f271c71
parent1d15d121cc2ad4d016a7dc1493132a9696f91fc5
SUNRPC: Do not dereference non-socket transports in sysfs

Do not cast the struct xprt to a sock_xprt unless we know it is a UDP or
TCP transport. Otherwise the call to lock the mutex will scribble over
whatever structure is actually there. This has been seen to cause hard
system lockups when the underlying transport was RDMA.

Fixes: b49ea673e119 ("SUNRPC: lock against ->sock changing during sysfs read")
Cc: stable@vger.kernel.org
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
include/linux/sunrpc/xprt.h
include/linux/sunrpc/xprtsock.h
net/sunrpc/sysfs.c
net/sunrpc/xprtsock.c