Julian Anastasov
52f9675790
ipvs: fix buffer overflow with sync daemon and service
syzkaller reports for buffer overflow for interface name
when starting sync daemons [1]
What we do is that we copy user structure into larger stack
buffer but later we search NUL past the stack buffer.
The same happens for sched_name when adding/editing virtual server.
We are restricted by IP_VS_SCHEDNAME_MAXLEN and IP_VS_IFNAME_MAXLEN
being used as size in include/uapi/linux/ip_vs.h, so they
include the space for NUL.
As using strlcpy is wrong for unsafe source, replace it with
strscpy and add checks to return EINVAL if source string is not
NUL-terminated. The incomplete strlcpy fix comes from 2.6.13.
For the netlink interface reduce the len parameter for
IPVS_DAEMON_ATTR_MCAST_IFN and IPVS_SVC_ATTR_SCHED_NAME,
so that we get proper EINVAL.
[1]
kernel BUG at lib/string.c:1052!
invalid opcode: 0000 [#1] SMP KASAN
Dumping ftrace buffer:
(ftrace buffer empty)
Modules linked in:
CPU: 1 PID: 373 Comm: syz-executor936 Not tainted 4.17.0-rc4+ #45
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
Google 01/01/2011
RIP: 0010:fortify_panic+0x13/0x20 lib/string.c:1051
RSP: 0018:ffff8801c976f800 EFLAGS: 00010282
RAX: 0000000000000022 RBX: 0000000000000040 RCX: 0000000000000000
RDX: 0000000000000022 RSI: ffffffff8160f6f1 RDI: ffffed00392edef6
RBP: ffff8801c976f800 R08: ffff8801cf4c62c0 R09: ffffed003b5e4fb0
R10: ffffed003b5e4fb0 R11: ffff8801daf27d87 R12: ffff8801c976fa20
R13: ffff8801c976fae4 R14: ffff8801c976fae0 R15: 000000000000048b
FS: 00007fd99f75e700(0000) GS:ffff8801daf00000(0000)
knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00000000200001c0 CR3: 00000001d6843000 CR4: 00000000001406e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
strlen include/linux/string.h:270 [inline]
strlcpy include/linux/string.h:293 [inline]
do_ip_vs_set_ctl+0x31c/0x1d00 net/netfilter/ipvs/ip_vs_ctl.c:2388
nf_sockopt net/netfilter/nf_sockopt.c:106 [inline]
nf_setsockopt+0x7d/0xd0 net/netfilter/nf_sockopt.c:115
ip_setsockopt+0xd8/0xf0 net/ipv4/ip_sockglue.c:1253
udp_setsockopt+0x62/0xa0 net/ipv4/udp.c:2487
ipv6_setsockopt+0x149/0x170 net/ipv6/ipv6_sockglue.c:917
tcp_setsockopt+0x93/0xe0 net/ipv4/tcp.c:3057
sock_common_setsockopt+0x9a/0xe0 net/core/sock.c:3046
__sys_setsockopt+0x1bd/0x390 net/socket.c:1903
__do_sys_setsockopt net/socket.c:1914 [inline]
__se_sys_setsockopt net/socket.c:1911 [inline]
__x64_sys_setsockopt+0xbe/0x150 net/socket.c:1911
do_syscall_64+0x1b1/0x800 arch/x86/entry/common.c:287
entry_SYSCALL_64_after_hwframe+0x49/0xbe
RIP: 0033:0x447369
RSP: 002b:00007fd99f75dda8 EFLAGS: 00000246 ORIG_RAX: 0000000000000036
RAX: ffffffffffffffda RBX: 00000000006e39e4 RCX: 0000000000447369
RDX: 000000000000048b RSI: 0000000000000000 RDI: 0000000000000003
RBP: 0000000000000000 R08: 0000000000000018 R09: 0000000000000000
R10: 00000000200001c0 R11: 0000000000000246 R12: 00000000006e39e0
R13: 75a1ff93f0896195 R14: 6f745f3168746576 R15: 0000000000000001
Code: 08 5b 41 5c 41 5d 41 5e 41 5f 5d c3 0f 0b 48 89 df e8 d2 8f 48 fa eb
de 55 48 89 fe 48 c7 c7 60 65 64 88 48 89 e5 e8 91 dd f3 f9 <0f> 0b 90 90
90 90 90 90 90 90 90 90 90 55 48 89 e5 41 57 41 56
RIP: fortify_panic+0x13/0x20 lib/string.c:1051 RSP: ffff8801c976f800
Reported-and-tested-by: syzbot+aac887f77319868646df@syzkaller.appspotmail.com
Fixes: e4ff675130 ("ipvs: add sync_maxlen parameter for the sync daemon")
Fixes: 4da62fc70d ("[IPVS]: Fix for overflows")
Signed-off-by: Julian Anastasov <ja@ssi.bg>
Acked-by: Simon Horman <horms+renesas@verge.net.au>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
2018-05-23 11:24:11 +02:00 |
| .. |
|
6lowpan
|
|
|
|
9p
|
net/9p: fix spelling mistake: "suspsend" -> "suspend"
|
2018-05-10 15:23:50 -04:00 |
|
802
|
|
|
|
8021q
|
vlan: also check phy_driver ts_info for vlan's real device
|
2018-04-01 20:53:50 -04:00 |
|
appletalk
|
net: Use octal not symbolic permissions
|
2018-03-26 12:07:48 -04:00 |
|
atm
|
net: atm: Fix potential Spectre v1
|
2018-05-04 12:52:47 -04:00 |
|
ax25
|
net: Use octal not symbolic permissions
|
2018-03-26 12:07:48 -04:00 |
|
batman-adv
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
|
2018-04-01 19:49:34 -04:00 |
|
bluetooth
|
Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth
|
2018-04-08 17:19:15 -04:00 |
|
bpf
|
|
|
|
bridge
|
netfilter: ebtables: handle string from userspace with care
|
2018-05-17 13:48:48 +02:00 |
|
caif
|
net: caif: fix spelling mistake "UKNOWN" -> "UNKNOWN"
|
2018-04-19 13:37:10 -04:00 |
|
can
|
net: Drop pernet_operations::async
|
2018-03-27 13:18:09 -04:00 |
|
ceph
|
libceph: add osd_req_op_extent_osd_data_bvecs()
|
2018-05-10 10:15:05 +02:00 |
|
core
|
ethtool: fix a potential missing-check bug
|
2018-05-01 14:18:47 -04:00 |
|
dcb
|
|
|
|
dccp
|
dccp: fix tasklet usage
|
2018-05-03 15:14:57 -04:00 |
|
decnet
|
net: Use octal not symbolic permissions
|
2018-03-26 12:07:48 -04:00 |
|
dns_resolver
|
KEYS: DNS: limit the length of option strings
|
2018-04-17 15:17:41 -04:00 |
|
dsa
|
net: dsa: Discard frames from unused ports
|
2018-04-08 10:34:49 -04:00 |
|
ethernet
|
|
|
|
hsr
|
|
|
|
ieee802154
|
net: ieee802154: 6lowpan: fix frag reassembly
|
2018-04-23 20:56:24 +02:00 |
|
ife
|
net: sched: ife: check on metadata length
|
2018-04-22 21:12:00 -04:00 |
|
ipv4
|
tcp: purge write queue in tcp_connect_init()
|
2018-05-16 12:18:00 -04:00 |
|
ipv6
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf
|
2018-05-13 20:28:47 -04:00 |
|
iucv
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
|
2018-03-23 11:31:58 -04:00 |
|
kcm
|
net: Drop pernet_operations::async
|
2018-03-27 13:18:09 -04:00 |
|
key
|
af_key: Always verify length of provided sadb_key
|
2018-04-09 07:06:38 +02:00 |
|
l2tp
|
l2tp: check sockaddr length in pppol2tp_connect()
|
2018-04-23 21:10:43 -04:00 |
|
l3mdev
|
|
|
|
lapb
|
|
|
|
llc
|
llc: better deal with too small mtu
|
2018-05-08 00:11:40 -04:00 |
|
mac80211
|
mac80211: use timeout from the AddBA response instead of the request
|
2018-05-07 20:35:15 +02:00 |
|
mac802154
|
net/mac802154: disambiguate mac80215 vs mac802154 trace events
|
2018-03-28 22:55:18 +02:00 |
|
mpls
|
net: Drop pernet_operations::async
|
2018-03-27 13:18:09 -04:00 |
|
ncsi
|
net/ncsi: check for null return from call to nla_nest_start
|
2018-03-27 10:38:26 -04:00 |
|
netfilter
|
ipvs: fix buffer overflow with sync daemon and service
|
2018-05-23 11:24:11 +02:00 |
|
netlabel
|
|
|
|
netlink
|
net/netlink: make sure the headers line up actual value output
|
2018-05-04 13:00:57 -04:00 |
|
netrom
|
net: Use octal not symbolic permissions
|
2018-03-26 12:07:48 -04:00 |
|
nfc
|
|
|
|
nsh
|
nsh: fix infinite loop
|
2018-05-04 12:54:38 -04:00 |
|
openvswitch
|
openvswitch: Don't swap table in nlattr_set() after OVS_ATTR_NESTED is found
|
2018-05-04 12:51:02 -04:00 |
|
packet
|
packet: in packet_snd start writing at link layer allocation
|
2018-05-13 20:19:27 -04:00 |
|
phonet
|
net: Drop pernet_operations::async
|
2018-03-27 13:18:09 -04:00 |
|
psample
|
|
|
|
qrtr
|
net: qrtr: add MODULE_ALIAS_NETPROTO macro
|
2018-04-17 09:58:00 -04:00 |
|
rds
|
rds: do not leak kernel memory to user land
|
2018-05-03 11:26:14 -04:00 |
|
rfkill
|
rfkill: gpio: fix memory leak in probe error path
|
2018-05-07 15:01:40 +02:00 |
|
rose
|
net: Use octal not symbolic permissions
|
2018-03-26 12:07:48 -04:00 |
|
rxrpc
|
rxrpc: Trace UDP transmission failure
|
2018-05-10 23:26:01 +01:00 |
|
sched
|
net/sched: fix refcnt leak in the error path of tcf_vlan_init()
|
2018-05-16 14:41:44 -04:00 |
|
sctp
|
sctp: remove sctp_chunk_put from fail_mark err path in sctp_ulpevent_make_rcvmsg
|
2018-05-10 17:48:36 -04:00 |
|
smc
|
net/smc: check for missing nlattrs in SMC_PNETID messages
|
2018-05-14 16:40:45 -04:00 |
|
strparser
|
strparser: Do not call mod_delayed_work with a timeout of LONG_MAX
|
2018-04-22 21:09:16 -04:00 |
|
sunrpc
|
NFS client fixes for Linux 4.17-rc4
|
2018-05-11 13:56:43 -07:00 |
|
switchdev
|
|
|
|
tipc
|
tipc: fix one byte leak in tipc_sk_set_orig_addr()
|
2018-05-10 17:28:39 -04:00 |
|
tls
|
net/tls: Fix connection stall on partial tls record
|
2018-05-07 23:47:58 -04:00 |
|
unix
|
af_unix: remove redundant lockdep class
|
2018-04-04 11:13:40 -04:00 |
|
vmw_vsock
|
VSOCK: make af_vsock.ko removable again
|
2018-04-17 09:44:30 -04:00 |
|
wimax
|
|
|
|
wireless
|
nl80211: Free connkeys on external authentication failure
|
2018-04-20 09:58:03 +02:00 |
|
x25
|
net: Use octal not symbolic permissions
|
2018-03-26 12:07:48 -04:00 |
|
xfrm
|
xfrm: Fix warning in xfrm6_tunnel_net_exit.
|
2018-04-16 07:50:09 +02:00 |
|
compat.c
|
net: support compat 64-bit time in {s,g}etsockopt
|
2018-04-27 19:46:06 -04:00 |
|
Kconfig
|
|
|
|
Makefile
|
|
|
|
socket.c
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
|
2018-04-05 11:56:35 -07:00 |
|
sysctl_net.c
|
net: Drop pernet_operations::async
|
2018-03-27 13:18:09 -04:00 |