Revision a622b40035d16196bf19b2b33b854862595245fc authored by Eric Dumazet on 30 April 2019, 13:27:58 UTC, committed by David S. Miller on 30 April 2019, 15:35:48 UTC
Before taking a refcount on a rcu protected structure,
we need to make sure the refcount is not zero.

syzbot reported :

refcount_t: increment on 0; use-after-free.
WARNING: CPU: 1 PID: 23533 at lib/refcount.c:156 refcount_inc_checked lib/refcount.c:156 [inline]
WARNING: CPU: 1 PID: 23533 at lib/refcount.c:156 refcount_inc_checked+0x61/0x70 lib/refcount.c:154
Kernel panic - not syncing: panic_on_warn set ...
CPU: 1 PID: 23533 Comm: syz-executor.2 Not tainted 5.1.0-rc7+ #93
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+0x172/0x1f0 lib/dump_stack.c:113
 panic+0x2cb/0x65c kernel/panic.c:214
 __warn.cold+0x20/0x45 kernel/panic.c:571
 report_bug+0x263/0x2b0 lib/bug.c:186
 fixup_bug arch/x86/kernel/traps.c:179 [inline]
 fixup_bug arch/x86/kernel/traps.c:174 [inline]
 do_error_trap+0x11b/0x200 arch/x86/kernel/traps.c:272
 do_invalid_op+0x37/0x50 arch/x86/kernel/traps.c:291
 invalid_op+0x14/0x20 arch/x86/entry/entry_64.S:973
RIP: 0010:refcount_inc_checked lib/refcount.c:156 [inline]
RIP: 0010:refcount_inc_checked+0x61/0x70 lib/refcount.c:154
Code: 1d 98 2b 2a 06 31 ff 89 de e8 db 2c 40 fe 84 db 75 dd e8 92 2b 40 fe 48 c7 c7 20 7a a1 87 c6 05 78 2b 2a 06 01 e8 7d d9 12 fe <0f> 0b eb c1 90 90 90 90 90 90 90 90 90 90 90 55 48 89 e5 41 57 41
RSP: 0018:ffff888069f0fba8 EFLAGS: 00010286
RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
RDX: 000000000000f353 RSI: ffffffff815afcb6 RDI: ffffed100d3e1f67
RBP: ffff888069f0fbb8 R08: ffff88809b1845c0 R09: ffffed1015d23ef1
R10: ffffed1015d23ef0 R11: ffff8880ae91f787 R12: ffff8880a8f26968
R13: 0000000000000004 R14: dffffc0000000000 R15: ffff8880a49a6440
 l2tp_tunnel_inc_refcount net/l2tp/l2tp_core.h:240 [inline]
 l2tp_tunnel_get+0x250/0x580 net/l2tp/l2tp_core.c:173
 pppol2tp_connect+0xc00/0x1c70 net/l2tp/l2tp_ppp.c:702
 __sys_connect+0x266/0x330 net/socket.c:1808
 __do_sys_connect net/socket.c:1819 [inline]
 __se_sys_connect net/socket.c:1816 [inline]
 __x64_sys_connect+0x73/0xb0 net/socket.c:1816

Fixes: 54652eb12c1b ("l2tp: hold tunnel while looking up sessions in l2tp_netlink")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Cc: Guillaume Nault <g.nault@alphalink.fr>
Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent c93ad13
History
File Mode Size
atomic
basic
coccinelle
dtc
gcc-plugins
gdb
genksyms
kconfig
ksymoops
mod
package
selinux
tracing
.gitignore -rw-r--r-- 145 bytes
Kbuild.include -rw-r--r-- 13.0 KB
Kconfig.include -rw-r--r-- 852 bytes
Lindent -rwxr-xr-x 502 bytes
Makefile -rw-r--r-- 1.6 KB
Makefile.asm-generic -rw-r--r-- 1.8 KB
Makefile.build -rw-r--r-- 17.0 KB
Makefile.clean -rw-r--r-- 2.8 KB
Makefile.dtbinst -rw-r--r-- 1.1 KB
Makefile.extrawarn -rw-r--r-- 2.7 KB
Makefile.gcc-plugins -rw-r--r-- 2.4 KB
Makefile.headersinst -rw-r--r-- 3.8 KB
Makefile.host -rw-r--r-- 6.3 KB
Makefile.kasan -rw-r--r-- 1.4 KB
Makefile.kcov -rw-r--r-- 319 bytes
Makefile.lib -rw-r--r-- 15.0 KB
Makefile.modbuiltin -rw-r--r-- 1.7 KB
Makefile.modinst -rw-r--r-- 1.1 KB
Makefile.modpost -rw-r--r-- 5.3 KB
Makefile.modsign -rw-r--r-- 897 bytes
Makefile.ubsan -rw-r--r-- 926 bytes
adjust_autoksyms.sh -rwxr-xr-x 2.8 KB
asn1_compiler.c -rw-r--r-- 35.5 KB
bin2c.c -rw-r--r-- 743 bytes
bloat-o-meter -rwxr-xr-x 3.3 KB
bootgraph.pl -rwxr-xr-x 6.3 KB
bpf_helpers_doc.py -rwxr-xr-x 15.5 KB
cc-can-link.sh -rwxr-xr-x 166 bytes
check_extable.sh -rwxr-xr-x 4.9 KB
checkincludes.pl -rwxr-xr-x 1.9 KB
checkkconfigsymbols.py -rwxr-xr-x 15.5 KB
checkpatch.pl -rwxr-xr-x 196.9 KB
checkstack.pl -rwxr-xr-x 5.3 KB
checksyscalls.sh -rwxr-xr-x 7.3 KB
checkversion.pl -rwxr-xr-x 1.9 KB
clang-version.sh -rwxr-xr-x 527 bytes
cleanfile -rwxr-xr-x 3.5 KB
cleanpatch -rwxr-xr-x 5.1 KB
coccicheck -rwxr-xr-x 7.2 KB
config -rwxr-xr-x 4.5 KB
conmakehash.c -rw-r--r-- 6.0 KB
const_structs.checkpatch -rw-r--r-- 964 bytes
decode_stacktrace.sh -rwxr-xr-x 3.9 KB
decodecode -rwxr-xr-x 2.6 KB
depmod.sh -rwxr-xr-x 1.3 KB
diffconfig -rwxr-xr-x 3.7 KB
documentation-file-ref-check -rwxr-xr-x 3.7 KB
export_report.pl -rwxr-xr-x 4.5 KB
extract-cert.c -rw-r--r-- 3.5 KB
extract-ikconfig -rwxr-xr-x 1.7 KB
extract-module-sig.pl -rwxr-xr-x 3.7 KB
extract-sys-certs.pl -rwxr-xr-x 3.7 KB
extract-vmlinux -rwxr-xr-x 1.7 KB
extract_xc3028.pl -rwxr-xr-x 44.6 KB
faddr2line -rwxr-xr-x 6.2 KB
file-size.sh -rwxr-xr-x 86 bytes
find-unused-docs.sh -rwxr-xr-x 1.3 KB
gcc-goto.sh -rwxr-xr-x 511 bytes
gcc-ld -rwxr-xr-x 711 bytes
gcc-plugin.sh -rwxr-xr-x 1.1 KB
gcc-version.sh -rwxr-xr-x 588 bytes
gcc-x86_32-has-stack-protector.sh -rwxr-xr-x 173 bytes
gcc-x86_64-has-stack-protector.sh -rwxr-xr-x 198 bytes
gen_compile_commands.py -rwxr-xr-x 5.6 KB
gen_ksymdeps.sh -rwxr-xr-x 399 bytes
get_dvb_firmware -rwxr-xr-x 25.2 KB
get_maintainer.pl -rwxr-xr-x 65.8 KB
gfp-translate -rwxr-xr-x 1.7 KB
headerdep.pl -rwxr-xr-x 3.5 KB
headers.sh -rwxr-xr-x 512 bytes
headers_check.pl -rwxr-xr-x 3.7 KB
headers_install.sh -rwxr-xr-x 1.4 KB
insert-sys-cert.c -rw-r--r-- 8.9 KB
kallsyms.c -rw-r--r-- 17.9 KB
kernel-doc -rwxr-xr-x 60.7 KB
ld-version.sh -rwxr-xr-x 269 bytes
leaking_addresses.pl -rwxr-xr-x 12.8 KB
link-vmlinux.sh -rwxr-xr-x 6.1 KB
makelst -rwxr-xr-x 808 bytes
markup_oops.pl -rwxr-xr-x 8.1 KB
mkcompile_h -rwxr-xr-x 2.5 KB
mkmakefile -rwxr-xr-x 866 bytes
mksysmap -rwxr-xr-x 1.3 KB
mkuboot.sh -rwxr-xr-x 414 bytes
module-common.lds -rw-r--r-- 901 bytes
namespace.pl -rwxr-xr-x 13.0 KB
objdiff -rwxr-xr-x 2.8 KB
parse-maintainers.pl -rw-r--r-- 3.7 KB
patch-kernel -rwxr-xr-x 9.9 KB
pnmtologo.c -rw-r--r-- 11.9 KB
profile2linkerlist.pl -rwxr-xr-x 414 bytes
prune-kernel -rwxr-xr-x 708 bytes
recordmcount.c -rw-r--r-- 16.7 KB
recordmcount.h -rw-r--r-- 16.4 KB
recordmcount.pl -rwxr-xr-x 18.7 KB
setlocalversion -rwxr-xr-x 4.3 KB
show_delta -rwxr-xr-x 3.0 KB
sign-file.c -rw-r--r-- 9.8 KB
sortextable.c -rw-r--r-- 8.4 KB
sortextable.h -rw-r--r-- 5.5 KB
spdxcheck-test.sh -rw-r--r-- 323 bytes
spdxcheck.py -rwxr-xr-x 9.8 KB
spelling.txt -rw-r--r-- 28.1 KB
sphinx-pre-install -rwxr-xr-x 14.0 KB
split-man.pl -rwxr-xr-x 600 bytes
stackdelta -rwxr-xr-x 1.8 KB
stackusage -rwxr-xr-x 794 bytes
subarch.include -rw-r--r-- 641 bytes
tags.sh -rwxr-xr-x 10.0 KB
unifdef.c -rw-r--r-- 34.8 KB
ver_linux -rwxr-xr-x 2.7 KB
xen-hypercalls.sh -rw-r--r-- 386 bytes
xz_wrap.sh -rwxr-xr-x 562 bytes

back to top