summaryrefslogtreecommitdiffstats
path: root/include/trace/events/rxrpc.h
diff options
context:
space:
mode:
authorDavid Howells2018-03-30 22:05:23 +0200
committerDavid Howells2018-03-30 22:05:23 +0200
commitd3be4d244330f7ef53242d8dc1b7f77d105e767f (patch)
tree794c9aeba90ac11e8d6a3109df89ad966adc73f6 /include/trace/events/rxrpc.h
parentrxrpc: Fix checker warnings and errors (diff)
downloadkernel-qcow2-linux-d3be4d244330f7ef53242d8dc1b7f77d105e767f.tar.gz
kernel-qcow2-linux-d3be4d244330f7ef53242d8dc1b7f77d105e767f.tar.xz
kernel-qcow2-linux-d3be4d244330f7ef53242d8dc1b7f77d105e767f.zip
rxrpc: Fix potential call vs socket/net destruction race
rxrpc_call structs don't pin sockets or network namespaces, but may attempt to access both after their refcount reaches 0 so that they can detach themselves from the network namespace. However, there's no guarantee that the socket still exists at this point (so sock_net(&call->socket->sk) may be invalid) and the namespace may have gone away if the call isn't pinning a peer. Fix this by (a) carrying a net pointer in the rxrpc_call struct and (b) waiting for all calls to be destroyed when the network namespace goes away. This was detected by checker: net/rxrpc/call_object.c:634:57: warning: incorrect type in argument 1 (different address spaces) net/rxrpc/call_object.c:634:57: expected struct sock const *sk net/rxrpc/call_object.c:634:57: got struct sock [noderef] <asn:4>*<noident> Fixes: 2baec2c3f854 ("rxrpc: Support network namespacing") Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'include/trace/events/rxrpc.h')
0 files changed, 0 insertions, 0 deletions