linux-stable/net
Sven Eckelmann 82000f0040 batman-adv: Reduce tt_global hash refcnt only for removed entry
[ Upstream commit f131a56880 ]

The batadv_hash_remove is a function which searches the hashtable for an
entry using a needle, a hashtable bucket selection function and a compare
function. It will lock the bucket list and delete an entry when the compare
function matches it with the needle. It returns the pointer to the
hlist_node which matches or NULL when no entry matches the needle.

The batadv_tt_global_free is not itself protected in anyway to avoid that
any other function is modifying the hashtable between the search for the
entry and the call to batadv_hash_remove. It can therefore happen that the
entry either doesn't exist anymore or an entry was deleted which is not the
same object as the needle. In such an situation, the reference counter (for
the reference stored in the hashtable) must not be reduced for the needle.
Instead the reference counter of the actually removed entry has to be
reduced.

Otherwise the reference counter will underflow and the object might be
freed before all its references were dropped. The kref helpers reported
this problem as:

  refcount_t: underflow; use-after-free.

Fixes: 7683fdc1e8 ("batman-adv: protect the local and the global trans-tables with rcu")
Reported-by: Martin Weinelt <martin@linuxlounge.net>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Acked-by: Antonio Quartulli <a@unstable.cc>
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-05-08 07:20:47 +02:00
..
6lowpan 6lowpan: iphc: reset mac_header after decompress to fix panic 2018-10-03 17:00:47 -07:00
9p 9p: do not trust pdu content for stat item size 2019-04-20 09:15:04 +02:00
802
8021q net: fix use-after-free in GRO with ESP 2018-07-22 14:28:44 +02:00
appletalk appletalk: Fix use-after-free in atalk_proc_exit 2019-04-20 09:15:07 +02:00
atm net: atm: Fix potential Spectre v1 vulnerabilities 2019-04-27 09:35:33 +02:00
ax25 ax25: fix possible use-after-free 2019-02-23 09:06:44 +01:00
batman-adv batman-adv: Reduce tt_global hash refcnt only for removed entry 2019-05-08 07:20:47 +02:00
bluetooth Bluetooth: Verify that l2cap_get_conf_opt provides large enough buffer 2019-04-03 06:25:07 +02:00
bpf
bridge netfilter: bridge: set skb transport_header before entering NF_INET_PRE_ROUTING 2019-05-04 09:15:18 +02:00
caif caif: reduce stack size with KASAN 2019-05-08 07:20:45 +02:00
can can: bcm: check timer values before ktime conversion 2019-01-31 08:13:46 +01:00
ceph libceph: wait for latest osdmap in ceph_monc_blacklist_add() 2019-03-27 14:13:51 +09:00
core net: ethtool: not call vzalloc for zero sized memory request 2019-04-17 08:37:50 +02:00
dcb net: dcb: For wild-card lookups, use priority -1, not 0 2018-09-19 22:43:43 +02:00
dccp dccp: do not use ipv6 header for ipv4 flow 2019-04-03 06:25:08 +02:00
decnet
dns_resolver KEYS: DNS: fix parsing multiple options 2018-07-22 14:28:49 +02:00
dsa net: dsa: slave: Don't propagate flag changes on down slave interfaces 2019-02-12 19:46:11 +01:00
ethernet
hsr net/hsr: fix possible crash in add_timer() 2019-03-19 13:13:22 +01:00
ieee802154 ipv6: remove dependency of nf_defrag_ipv6 on ipv6 module 2019-04-27 09:35:40 +02:00
ife
ipv4 ipv4: ip_do_fragment: Preserve skb_iif during fragmentation 2019-05-08 07:20:43 +02:00
ipv6 ipv6: invert flowlabel sharing check in process and user mode 2019-05-08 07:20:44 +02:00
ipx
iucv
kcm kcm: switch order of device registration to fix a crash 2019-04-17 08:37:45 +02:00
key af_key: unconditionally clone on broadcast 2019-03-23 14:35:14 +01:00
l2tp l2tp: fix infoleak in l2tp_ip6_recvmsg() 2019-03-19 13:13:22 +01:00
l3mdev
lapb
llc llc: do not use sk_eat_skb() 2018-12-01 09:42:51 +01:00
mac80211 mac80211: do not call driver wake_tx_queue op during reconfig 2019-04-27 09:35:38 +02:00
mac802154 net: mac802154: tx: expand tailroom if necessary 2018-09-09 19:55:52 +02:00
mpls mpls: Return error for RTA_GATEWAY attribute 2019-03-13 14:03:09 -07:00
ncsi
netfilter netfilter: nft_set_rbtree: check for inactive element after flag mismatch 2019-05-04 09:15:18 +02:00
netlabel netlabel: fix out-of-bounds memory accesses 2019-03-13 14:03:08 -07:00
netlink genetlink: Fix a memory leak on error path 2019-04-03 06:25:08 +02:00
netrom netrom: switch to sock timer API 2019-02-06 17:31:32 +01:00
nfc net: nfc: Fix NULL dereference on nfc_llcp_build_tlv fails 2019-03-13 14:03:08 -07:00
nsh nsh: set mac len based on inner packet 2018-07-22 14:28:49 +02:00
openvswitch ipv6: remove dependency of nf_defrag_ipv6 on ipv6 module 2019-04-27 09:35:40 +02:00
packet packet: validate msg_namelen in send directly 2019-05-08 07:20:44 +02:00
phonet phonet: fix building with clang 2019-03-23 14:35:16 +01:00
psample
qrtr net: qrtr: Broadcast messages only from control port 2018-08-24 13:09:13 +02:00
rds net: rds: exchange of 8K and 1M pool 2019-05-02 09:40:33 +02:00
rfkill
rose net/rose: fix unbound loop in rose_loopback_timer() 2019-05-02 09:40:34 +02:00
rxrpc rxrpc: Fix net namespace cleanup 2019-05-08 07:20:44 +02:00
sched net/sched: act_sample: fix divide by zero in the traffic path 2019-04-17 08:37:49 +02:00
sctp sctp: avoid running the sctp state machine recursively 2019-05-08 07:20:44 +02:00
smc net/smc: fix TCP fallback socket release 2019-01-09 17:14:46 +01:00
strparser strparser: Remove early eaten to fix full tcp receive buffer stall 2018-07-22 14:28:47 +02:00
sunrpc sunrpc: don't mark uninitialised items as VALID. 2019-05-02 09:40:29 +02:00
switchdev
tipc tipc: check link name with right length in tipc_nl_compat_link_set 2019-05-02 09:40:32 +02:00
tls net/tls: Fixed return value when tls_complete_pending_work() fails 2018-12-05 19:41:11 +01:00
unix missing barriers in some of unix_sock ->addr and ->path accesses 2019-03-19 13:13:24 +01:00
vmw_vsock vsock/virtio: fix kernel panic from virtio_transport_reset_no_sock 2019-05-02 09:40:31 +02:00
wimax
wireless cfg80211: extend range deviation for DMG 2019-03-05 17:58:02 +01:00
x25 net/x25: fix a race in x25_bind() 2019-03-19 13:13:23 +01:00
xfrm xfrm: refine validation of template and selector families 2019-02-15 08:09:13 +01:00
compat.c sock: Make sock->sk_stamp thread-safe 2019-01-09 17:14:46 +01:00
Kconfig
Makefile
socket.c net: socket: set sock->sk to NULL after calling proto_ops::release() 2019-03-13 14:03:09 -07:00
sysctl_net.c