linux-kernelorg-stable/net
Eric Biggers c210f7b411 KEYS: DNS: limit the length of option strings
Adding a dns_resolver key whose payload contains a very long option name
resulted in that string being printed in full.  This hit the WARN_ONCE()
in set_precision() during the printk(), because printk() only supports a
precision of up to 32767 bytes:

    precision 1000000 too large
    WARNING: CPU: 0 PID: 752 at lib/vsprintf.c:2189 vsnprintf+0x4bc/0x5b0

Fix it by limiting option strings (combined name + value) to a much more
reasonable 128 bytes.  The exact limit is arbitrary, but currently the
only recognized option is formatted as "dnserror=%lu" which fits well
within this limit.

Also ratelimit the printks.

Reproducer:

    perl -e 'print "#", "A" x 1000000, "\x00"' | keyctl padd dns_resolver desc @s

This bug was found using syzkaller.

Reported-by: Mark Rutland <mark.rutland@arm.com>
Fixes: 4a2d789267 ("DNS: If the DNS server returns an error, allow that to be cached [ver #2]")
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2018-04-17 13:42:58 -04:00
..
6lowpan
9p net/9p/client.c: fix potential refcnt problem of trans module 2018-04-05 21:36:23 -07:00
802
8021q
appletalk
atm
ax25
batman-adv
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
caif
can
ceph The big ticket items are: 2018-04-10 12:25:30 -07:00
core xdp: avoid leaking info stored in frame data on page reuse 2018-04-17 10:50:30 -04:00
dcb
dccp dccp: initialize ireq->ir_mark 2018-04-07 22:32:31 -04:00
decnet
dns_resolver KEYS: DNS: limit the length of option strings 2018-04-17 13:42:58 -04:00
dsa net: dsa: Discard frames from unused ports 2018-04-08 10:34:49 -04:00
ethernet
hsr
ieee802154 inet: frags: fix ip6frag_low_thresh boundary 2018-04-04 12:04:59 -04:00
ife
ipv4 tcp: implement mmap() for zero copy receive 2018-04-16 18:26:37 -04:00
ipv6 ipv6: Count interface receive statistics on the ingress netdev 2018-04-17 13:39:51 -04:00
iucv
kcm
key
l2tp l2tp: fix race in duplicate tunnel detection 2018-04-11 17:41:27 -04:00
l3mdev
lapb
llc
mac80211
mac802154
mpls
ncsi
netfilter ipv6: Count interface receive statistics on the ingress netdev 2018-04-17 13:39:51 -04:00
netlabel
netlink netlink: fix uninit-value in netlink_sendmsg 2018-04-07 22:32:31 -04:00
netrom
nfc
nsh
openvswitch
packet
phonet
psample
qrtr
rds rds: MP-RDS may use an invalid c_path 2018-04-11 10:24:01 -04:00
rfkill
rose
rxrpc
sched net_sched: fix a missing idr_remove() in u32_delete_key() 2018-04-07 12:36:45 -04:00
sctp Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-04-09 17:04:10 -07:00
smc
strparser
sunrpc Chuck Lever did a bunch of work on nfsd tracepoints, on RDMA, and on 2018-04-05 19:15:29 -07:00
switchdev
tipc tipc: use the right skb in tipc_sk_fill_sock_diag() 2018-04-08 12:34:29 -04:00
tls
unix af_unix: remove redundant lockdep class 2018-04-04 11:13:40 -04:00
vmw_vsock
wimax
wireless
x25
xfrm
Kconfig page_pool: refurbish version of page_pool code 2018-04-17 10:50:29 -04:00
Makefile
compat.c
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