rxrpc: Fix possible NULL pointer access in ICMP handling
David Howells authored
If an ICMP packet comes in on the UDP socket backing an AF_RXRPC socket as
the UDP socket is being shut down, rxrpc_error_report() may get called to
deal with it after sk_user_data on the UDP socket has been cleared, leading
to a NULL pointer access when this local endpoint record gets accessed.

Fix this by just returning immediately if sk_user_data was NULL.

The oops looks like the following:

#PF: supervisor read access in kernel mode
#PF: error_code(0x0000) - not-present page
...
RIP: 0010:rxrpc_error_report+0x1bd/0x6a9
...
Call Trace:
 ? sock_queue_err_skb+0xbd/0xde
 ? __udp4_lib_err+0x313/0x34d
 __udp4_lib_err+0x313/0x34d
 icmp_unreach+0x1ee/0x207
 icmp_rcv+0x25b/0x28f
 ip_protocol_deliver_rcu+0x95/0x10e
 ip_local_deliver+0xe9/0x148
 __netif_receive_skb_one_core+0x52/0x6e
 process_backlog+0xdc/0x177
 net_rx_action+0xf9/0x270
 __do_softirq+0x1b6/0x39a
 ? smpboot_register_percpu_thread+0xce/0xce
 run_ksoftirqd+0x1d/0x42
 smpboot_thread_fn+0x19e/0x1b3
 kthread+0xf1/0xf6
 ? kthread_delayed_work_timer_fn+0x83/0x83
 ret_from_fork+0x24/0x30

Fixes: 17926a79

 ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both")
Reported-by: syzbot+611164843bd48cc2190c@syzkaller.appspotmail.com
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
f0308fb0
Name Last commit Last update
..
6lowpan 6lowpan: no need to check return value of debugfs_create functions
802 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
8021q Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
9p Merge tag '9p-for-5.4' of git://github.com/martinetd/linux
appletalk appletalk: enforce CAP_NET_RAW for raw sockets
atm pppoatm: use %*ph to print small buffer
ax25 ax25: enforce CAP_NET_RAW for raw sockets
batman-adv netfilter: drop bridge nf reset from nf_reset
bluetooth Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next
bpf bpf/flow_dissector: support flags in BPF_PROG_TEST_RUN
bpfilter Merge tag 'kbuild-v5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild
bridge Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
caif treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194
can can: add support of SAE J1939 protocol
ceph libceph: use ceph_kvmalloc() for osdmap arrays
core net: silence KCSAN warnings about sk->sk_backlog.len reads
dcb treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201
dccp netfilter: drop bridge nf reset from nf_reset
decnet treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 53
dns_resolver Revert "Merge tag 'keys-acl-20190703' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs"
dsa net: dsa: sja1105: Fix sleeping while atomic in .port_hwtstamp_set
ethernet Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
hsr hsr: switch ->dellink() to ->ndo_uninit()
ieee802154 ieee802154: enforce CAP_NET_RAW for raw sockets
ife net: Fix Kconfig indentation
ipv4 net: annotate sk->sk_rcvlowat lockless reads
ipv6 ip6erspan: remove the incorrect mtu limit for ip6erspan
iucv net/af_iucv: mark expected switch fall-throughs
kcm kcm: disable preemption in kcm_parse_func_strparser()
key Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
l2tp netfilter: drop bridge nf reset from nf_reset
l3mdev ipv6: convert major tx path to use RT6_LOOKUP_F_DST_NOREF
lapb Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
llc net: silence KCSAN warnings around sk_add_backlog() calls
mac80211 mac80211: fix scan when operating on DFS channels in ETSI domains
mac802154 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
mpls ipv4: mpls: fix mpls_xmit for iptunnel
ncsi net/ncsi: Disable global multicast filter
netfilter netfilter: conntrack: avoid possible false sharing
netlabel netlabel: remove redundant assignment to pointer iter
netlink net: remove empty netlink_tap_exit_net
netrom netrom: hold sock when setting skb->destructor
nfc nfc: fix memory leak in llcp_sock_bind()
nsh treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
openvswitch netfilter: drop bridge nf reset from nf_reset
packet netfilter: drop bridge nf reset from nf_reset
phonet treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 336
psample net: sched: take reference to psample group in flow_action infra
qrtr net: qrtr: Stop rx_worker before freeing node
rds net/rds: Fix error handling in rds_ib_add_one()
rfkill
rose
rxrpc
sched
sctp
smc
strparser
sunrpc
switchdev
tipc
tls
unix
vmw_vsock
wimax
wireless
x25
xdp
xfrm
Kconfig
Makefile
compat.c
socket.c
sysctl_net.c