Ido Schimmel
9819741aee
rtnetlink: Disallow FDB configuration for non-Ethernet device
[ Upstream commit da71577545a52be3e0e9225a946e5fd79cfab015 ]
When an FDB entry is configured, the address is validated to have the
length of an Ethernet address, but the device for which the address is
configured can be of any type.
The above can result in the use of uninitialized memory when the address
is later compared against existing addresses since 'dev->addr_len' is
used and it may be greater than ETH_ALEN, as with ip6tnl devices.
Fix this by making sure that FDB entries are only configured for
Ethernet devices.
BUG: KMSAN: uninit-value in memcmp+0x11d/0x180 lib/string.c:863
CPU: 1 PID: 4318 Comm: syz-executor998 Not tainted 4.19.0-rc3+ #49
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
Google 01/01/2011
Call Trace:
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x14b/0x190 lib/dump_stack.c:113
kmsan_report+0x183/0x2b0 mm/kmsan/kmsan.c:956
__msan_warning+0x70/0xc0 mm/kmsan/kmsan_instr.c:645
memcmp+0x11d/0x180 lib/string.c:863
dev_uc_add_excl+0x165/0x7b0 net/core/dev_addr_lists.c:464
ndo_dflt_fdb_add net/core/rtnetlink.c:3463 [inline]
rtnl_fdb_add+0x1081/0x1270 net/core/rtnetlink.c:3558
rtnetlink_rcv_msg+0xa0b/0x1530 net/core/rtnetlink.c:4715
netlink_rcv_skb+0x36e/0x5f0 net/netlink/af_netlink.c:2454
rtnetlink_rcv+0x50/0x60 net/core/rtnetlink.c:4733
netlink_unicast_kernel net/netlink/af_netlink.c:1317 [inline]
netlink_unicast+0x1638/0x1720 net/netlink/af_netlink.c:1343
netlink_sendmsg+0x1205/0x1290 net/netlink/af_netlink.c:1908
sock_sendmsg_nosec net/socket.c:621 [inline]
sock_sendmsg net/socket.c:631 [inline]
___sys_sendmsg+0xe70/0x1290 net/socket.c:2114
__sys_sendmsg net/socket.c:2152 [inline]
__do_sys_sendmsg net/socket.c:2161 [inline]
__se_sys_sendmsg+0x2a3/0x3d0 net/socket.c:2159
__x64_sys_sendmsg+0x4a/0x70 net/socket.c:2159
do_syscall_64+0xb8/0x100 arch/x86/entry/common.c:291
entry_SYSCALL_64_after_hwframe+0x63/0xe7
RIP: 0033:0x440ee9
Code: e8 cc ab 02 00 48 83 c4 18 c3 0f 1f 80 00 00 00 00 48 89 f8 48 89 f7
48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff
ff 0f 83 bb 0a fc ff c3 66 2e 0f 1f 84 00 00 00 00
RSP: 002b:00007fff6a93b518 EFLAGS: 00000213 ORIG_RAX: 000000000000002e
RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 0000000000440ee9
RDX: 0000000000000000 RSI: 0000000020000240 RDI: 0000000000000003
RBP: 0000000000000000 R08: 00000000004002c8 R09: 00000000004002c8
R10: 00000000004002c8 R11: 0000000000000213 R12: 000000000000b4b0
R13: 0000000000401ec0 R14: 0000000000000000 R15: 0000000000000000
Uninit was created at:
kmsan_save_stack_with_flags mm/kmsan/kmsan.c:256 [inline]
kmsan_internal_poison_shadow+0xb8/0x1b0 mm/kmsan/kmsan.c:181
kmsan_kmalloc+0x98/0x100 mm/kmsan/kmsan_hooks.c:91
kmsan_slab_alloc+0x10/0x20 mm/kmsan/kmsan_hooks.c:100
slab_post_alloc_hook mm/slab.h:446 [inline]
slab_alloc_node mm/slub.c:2718 [inline]
__kmalloc_node_track_caller+0x9e7/0x1160 mm/slub.c:4351
__kmalloc_reserve net/core/skbuff.c:138 [inline]
__alloc_skb+0x2f5/0x9e0 net/core/skbuff.c:206
alloc_skb include/linux/skbuff.h:996 [inline]
netlink_alloc_large_skb net/netlink/af_netlink.c:1189 [inline]
netlink_sendmsg+0xb49/0x1290 net/netlink/af_netlink.c:1883
sock_sendmsg_nosec net/socket.c:621 [inline]
sock_sendmsg net/socket.c:631 [inline]
___sys_sendmsg+0xe70/0x1290 net/socket.c:2114
__sys_sendmsg net/socket.c:2152 [inline]
__do_sys_sendmsg net/socket.c:2161 [inline]
__se_sys_sendmsg+0x2a3/0x3d0 net/socket.c:2159
__x64_sys_sendmsg+0x4a/0x70 net/socket.c:2159
do_syscall_64+0xb8/0x100 arch/x86/entry/common.c:291
entry_SYSCALL_64_after_hwframe+0x63/0xe7
v2:
* Make error message more specific (David)
Fixes: 090096bf3d ("net: generic fdb support for drivers without ndo_fdb_<op>")
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Reported-and-tested-by: syzbot+3a288d5f5530b901310e@syzkaller.appspotmail.com
Reported-and-tested-by: syzbot+d53ab4e92a1db04110ff@syzkaller.appspotmail.com
Cc: Vlad Yasevich <vyasevich@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Reviewed-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
2018-11-10 07:42:59 -08:00 |
| .. |
|
datagram.c
|
net: udp: fix handling of CHECKSUM_COMPLETE packets
|
2018-11-10 07:42:58 -08:00 |
|
dev.c
|
net: ipv4: update fnhe_pmtu when first hop's MTU changes
|
2018-10-18 09:13:22 +02:00 |
|
dev_addr_lists.c
|
net: fix uninit-value in __hw_addr_add_ex()
|
2018-05-16 10:08:41 +02:00 |
|
dev_ioctl.c
|
net: Zero terminate ifr_name in dev_ifname().
|
2017-08-11 08:49:32 -07:00 |
|
devlink.c
|
devlink: add hardware messages tracing facility
|
2016-07-12 14:20:18 -07:00 |
|
drop_monitor.c
|
drop_monitor: consider inserted data in genlmsg_end
|
2017-01-15 13:42:54 +01:00 |
|
dst.c
|
Fix an intermittent pr_emerg warning about lo becoming free.
|
2017-07-05 14:40:14 +02:00 |
|
dst_cache.c
|
net: dst_cache_per_cpu_dst_set() can be static
|
2016-03-18 17:45:08 -04:00 |
|
ethtool.c
|
ethtool: fix a privilege escalation bug
|
2018-11-10 07:42:58 -08:00 |
|
fib_rules.c
|
fib_rules: Added NLM_F_EXCL support to fib_nl_newrule
|
2016-06-30 08:23:19 -04:00 |
|
filter.c
|
bpf: fix 32-bit divide by zero
|
2018-01-31 12:55:57 +01:00 |
|
flow.c
|
flowcache: Increase threshold for refusing new allocations
|
2016-11-23 06:37:09 +01:00 |
|
flow_dissector.c
|
flow_dissector: properly cap thoff field
|
2018-01-31 12:55:56 +01:00 |
|
gen_estimator.c
|
net: sched: do not acquire qdisc spinlock in qdisc/class stats dump
|
2016-06-07 16:37:14 -07:00 |
|
gen_stats.c
|
gen_stats: Fix netlink stats dumping in the presence of padding
|
2018-07-25 11:24:00 +02:00 |
|
hwbm.c
|
net: hwbm: Fix unbalanced spinlock in error case
|
2016-05-25 12:35:09 -07:00 |
|
link_watch.c
|
dev: introduce dev_get_iflink()
|
2015-04-02 14:04:59 -04:00 |
|
lwtunnel.c
|
lwtunnel: Fix oops on state free after encap module unload
|
2017-02-04 09:47:11 +01:00 |
|
Makefile
|
net: add a hardware buffer management helper API
|
2016-03-14 12:19:46 -04:00 |
|
neighbour.c
|
neighbour: confirm neigh entries when ARP packet is received
|
2018-09-29 03:07:33 -07:00 |
|
net-procfs.c
|
net: remove NETDEV_TX_LOCKED support
|
2016-04-26 15:53:05 -04:00 |
|
net-sysfs.c
|
net: introduce NETDEV_CHANGE_TX_QUEUE_LEN
|
2016-07-01 05:32:17 -04:00 |
|
net-sysfs.h
|
net: netdev_kobject_init: annotate with __init
|
2014-01-05 20:27:54 -05:00 |
|
net-traces.c
|
net: IPv6 fib lookup tracepoint
|
2015-11-22 11:54:10 -05:00 |
|
net_namespace.c
|
net: move somaxconn init from sysctl code
|
2018-04-13 19:48:06 +02:00 |
|
netclassid_cgroup.c
|
cgroup, net_cls: iterate the fds of only the tasks which are being migrated
|
2017-03-30 09:41:27 +02:00 |
|
netevent.c
|
netevent: remove automatic variable in register_netevent_notifier()
|
2015-05-31 00:03:21 -07:00 |
|
netpoll.c
|
netpoll: Check for skb->queue_mapping
|
2017-05-03 08:36:36 -07:00 |
|
netprio_cgroup.c
|
core: remove unneded headers for net cgroup controllers.
|
2016-02-17 15:31:27 -05:00 |
|
pktgen.c
|
net: pktgen: remove rcu locking in pktgen_change_name()
|
2016-10-17 10:52:59 -04:00 |
|
ptp_classifier.c
|
ptp: Change ptp_class to a proper bitmask
|
2015-11-03 11:08:22 -05:00 |
|
request_sock.c
|
tcp: restore fastopen operations
|
2015-10-05 03:19:06 -07:00 |
|
rtnetlink.c
|
rtnetlink: Disallow FDB configuration for non-Ethernet device
|
2018-11-10 07:42:59 -08:00 |
|
scm.c
|
unix: correctly track in-flight fds in sending process user_struct
|
2016-02-08 10:30:42 -05:00 |
|
secure_seq.c
|
net: remove a sparse error in secure_dccpv6_sequence_number()
|
2015-05-25 22:55:37 -04:00 |
|
skbuff.c
|
net: fix pskb_trim_rcsum_slow() with odd trim offset
|
2018-11-10 07:42:59 -08:00 |
|
sock.c
|
sock_diag: fix use-after-free read in __sk_free
|
2018-05-25 16:12:55 +02:00 |
|
sock_diag.c
|
net: core: fix module type in sock_diag_bind
|
2018-01-17 09:38:53 +01:00 |
|
sock_reuseport.c
|
soreuseport: fix mem leak in reuseport_add_sock()
|
2018-02-13 12:35:57 +01:00 |
|
stream.c
|
net: do not export sk_stream_write_space
|
2016-09-28 20:32:38 -04:00 |
|
sysctl_net_core.c
|
net: move somaxconn init from sysctl code
|
2018-04-13 19:48:06 +02:00 |
|
timestamping.c
|
net: skb_defer_rx_timestamp should check for phydev before setting up classify
|
2015-07-09 14:17:15 -07:00 |
|
tso.c
|
net: tso: add support for IPv6
|
2015-10-26 22:24:22 -07:00 |
|
utils.c
|
net: the space is required before the open parenthesis '('
|
2016-06-29 05:15:14 -04:00 |