android_kernel_oneplus_msm8998/net/core
Subash Abhinov Kasiviswanathan 19dc97c984 net: Fix null de-reference of device refcount
[ Upstream commit 10cc514f451a0f239aa34f91bc9dc954a9397840 ]

In event of failure during register_netdevice, free_netdev is
invoked immediately. free_netdev assumes that all the netdevice
refcounts have been dropped prior to it being called and as a
result frees and clears out the refcount pointer.

However, this is not necessarily true as some of the operations
in the NETDEV_UNREGISTER notifier handlers queue RCU callbacks for
invocation after a grace period. The IPv4 callback in_dev_rcu_put
tries to access the refcount after free_netdev is called which
leads to a null de-reference-

44837.761523:   <6> Unable to handle kernel paging request at
                    virtual address 0000004a88287000
44837.761651:   <2> pc : in_dev_finish_destroy+0x4c/0xc8
44837.761654:   <2> lr : in_dev_finish_destroy+0x2c/0xc8
44837.762393:   <2> Call trace:
44837.762398:   <2>  in_dev_finish_destroy+0x4c/0xc8
44837.762404:   <2>  in_dev_rcu_put+0x24/0x30
44837.762412:   <2>  rcu_nocb_kthread+0x43c/0x468
44837.762418:   <2>  kthread+0x118/0x128
44837.762424:   <2>  ret_from_fork+0x10/0x1c

Fix this by waiting for the completion of the call_rcu() in
case of register_netdevice errors.

Fixes: 93ee31f14f ("[NET]: Fix free_netdev on register_netdev failure.")
Cc: Sean Tranchetti <stranche@codeaurora.org>
Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-09-21 07:12:39 +02:00
..
datagram.c
dev.c net: Fix null de-reference of device refcount 2019-09-21 07:12:39 +02:00
dev_addr_lists.c
dev_ioctl.c
drop_monitor.c
dst.c
dst_cache.c
ethtool.c ethtool: check the return value of get_regs_len 2019-06-11 12:24:13 +02:00
fib_rules.c
filter.c bpf: reject wrong sized filters earlier 2019-05-16 19:44:52 +02:00
flow.c
flow_dissector.c
gen_estimator.c
gen_stats.c
link_watch.c
lwtunnel.c
Makefile
neighbour.c net: neigh: fix multiple neigh timer scheduling 2019-08-04 09:34:54 +02:00
net-procfs.c
net-sysfs.c net-sysfs: Fix mem leak in netdev_register_kobject 2019-03-23 08:44:22 +01:00
net-sysfs.h
net-traces.c
net_namespace.c netns: provide pure entropy for net_hash_mix() 2019-04-27 09:33:55 +02:00
netclassid_cgroup.c
netevent.c
netpoll.c net: fix skb use after free in netpoll 2019-09-10 10:29:50 +01:00
netprio_cgroup.c
pktgen.c pktgen: do not sleep with the thread lock held. 2019-06-11 12:24:12 +02:00
ptp_classifier.c
request_sock.c
rtnetlink.c
scm.c
secure_seq.c
skbuff.c net: Do not allocate page fragments that are not skb aligned 2019-02-23 09:05:14 +01:00
sock.c net: call sk_dst_reset when set SO_DONTROUTE 2019-01-26 09:42:53 +01:00
sock_diag.c
stream.c tcp: make sure EPOLLOUT wont be missed 2019-09-06 10:18:15 +02:00
sysctl_net_core.c
timestamping.c
tso.c
utils.c