https://github.com/torvalds/linux
Revision 3fb07daff8e99243366a081e5129560734de4ada authored by Eric Dumazet on 25 May 2017, 21:27:35 UTC, committed by David S. Miller on 26 May 2017, 18:57:07 UTC
Andrey Konovalov reported crashes in ipv4_mtu() I could reproduce the issue with KASAN kernels, between 10.246.7.151 and 10.246.7.152 : 1) 20 concurrent netperf -t TCP_RR -H 10.246.7.152 -l 1000 & 2) At the same time run following loop : while : do ip ro add 10.246.7.152 dev eth0 src 10.246.7.151 mtu 1500 ip ro del 10.246.7.152 dev eth0 src 10.246.7.151 mtu 1500 done Cong Wang attempted to add back rt->fi in commit 82486aa6f1b9 ("ipv4: restore rt->fi for reference counting") but this proved to add some issues that were complex to solve. Instead, I suggested to add a refcount to the metrics themselves, being a standalone object (in particular, no reference to other objects) I tried to make this patch as small as possible to ease its backport, instead of being super clean. Note that we believe that only ipv4 dst need to take care of the metric refcount. But if this is wrong, this patch adds the basic infrastructure to extend this to other families. Many thanks to Julian Anastasov for reviewing this patch, and Cong Wang for his efforts on this problem. Fixes: 2860583fe840 ("ipv4: Kill rt->fi") Signed-off-by: Eric Dumazet <edumazet@google.com> Reported-by: Andrey Konovalov <andreyknvl@google.com> Reviewed-by: Julian Anastasov <ja@ssi.bg> Acked-by: Cong Wang <xiyou.wangcong@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 82533ad
Tip revision: 3fb07daff8e99243366a081e5129560734de4ada authored by Eric Dumazet on 25 May 2017, 21:27:35 UTC
ipv4: add reference counting to metrics
ipv4: add reference counting to metrics
Tip revision: 3fb07da
File | Mode | Size |
---|---|---|
basic | ||
coccinelle | ||
dtc | ||
gcc-plugins | ||
gdb | ||
genksyms | ||
kconfig | ||
ksymoops | ||
mod | ||
package | ||
selinux | ||
tracing | ||
.gitignore | -rw-r--r-- | 170 bytes |
Kbuild.include | -rw-r--r-- | 15.1 KB |
Lindent | -rwxr-xr-x | 467 bytes |
Makefile | -rw-r--r-- | 1.8 KB |
Makefile.asm-generic | -rw-r--r-- | 1.1 KB |
Makefile.build | -rw-r--r-- | 18.9 KB |
Makefile.clean | -rw-r--r-- | 2.9 KB |
Makefile.dtbinst | -rw-r--r-- | 1.1 KB |
Makefile.extrawarn | -rw-r--r-- | 2.5 KB |
Makefile.fwinst | -rw-r--r-- | 2.0 KB |
Makefile.gcc-plugins | -rw-r--r-- | 3.2 KB |
Makefile.headersinst | -rw-r--r-- | 4.6 KB |
Makefile.help | -rw-r--r-- | 68 bytes |
Makefile.host | -rw-r--r-- | 6.8 KB |
Makefile.kasan | -rw-r--r-- | 1005 bytes |
Makefile.lib | -rw-r--r-- | 15.6 KB |
Makefile.modbuiltin | -rw-r--r-- | 1.8 KB |
Makefile.modinst | -rw-r--r-- | 1.2 KB |
Makefile.modpost | -rw-r--r-- | 5.5 KB |
Makefile.modsign | -rw-r--r-- | 1005 bytes |
Makefile.ubsan | -rw-r--r-- | 1.0 KB |
adjust_autoksyms.sh | -rwxr-xr-x | 2.8 KB |
asn1_compiler.c | -rw-r--r-- | 35.5 KB |
bloat-o-meter | -rwxr-xr-x | 2.2 KB |
bootgraph.pl | -rwxr-xr-x | 6.3 KB |
check-lc_ctype.c | -rw-r--r-- | 201 bytes |
check_00index.sh | -rwxr-xr-x | 1.3 KB |
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 | 185.8 KB |
checkstack.pl | -rwxr-xr-x | 5.4 KB |
checksyscalls.sh | -rwxr-xr-x | 5.6 KB |
checkversion.pl | -rwxr-xr-x | 1.9 KB |
cleanfile | -rwxr-xr-x | 3.4 KB |
cleanpatch | -rwxr-xr-x | 5.0 KB |
coccicheck | -rwxr-xr-x | 7.1 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.7 KB |
decodecode | -rwxr-xr-x | 2.1 KB |
depmod.sh | -rwxr-xr-x | 1.7 KB |
diffconfig | -rwxr-xr-x | 3.7 KB |
docproc.c | -rw-r--r-- | 15.5 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.6 KB |
extract-sys-certs.pl | -rwxr-xr-x | 3.7 KB |
extract-vmlinux | -rwxr-xr-x | 1.6 KB |
extract_xc3028.pl | -rwxr-xr-x | 44.6 KB |
faddr2line | -rwxr-xr-x | 5.1 KB |
gcc-goto.sh | -rwxr-xr-x | 495 bytes |
gcc-ld | -rwxr-xr-x | 676 bytes |
gcc-plugin.sh | -rwxr-xr-x | 1.0 KB |
gcc-version.sh | -rwxr-xr-x | 822 bytes |
gcc-x86_32-has-stack-protector.sh | -rwxr-xr-x | 184 bytes |
gcc-x86_64-has-stack-protector.sh | -rwxr-xr-x | 209 bytes |
gen_initramfs_list.sh | -rwxr-xr-x | 7.9 KB |
get_dvb_firmware | -rwxr-xr-x | 25.2 KB |
get_maintainer.pl | -rwxr-xr-x | 59.1 KB |
gfp-translate | -rwxr-xr-x | 1.7 KB |
headerdep.pl | -rwxr-xr-x | 3.5 KB |
headers.sh | -rwxr-xr-x | 477 bytes |
headers_check.pl | -rwxr-xr-x | 3.7 KB |
headers_install.sh | -rwxr-xr-x | 1.3 KB |
insert-sys-cert.c | -rw-r--r-- | 8.9 KB |
kallsyms.c | -rw-r--r-- | 18.7 KB |
kernel-doc | -rwxr-xr-x | 91.6 KB |
kernel-doc-xml-ref | -rwxr-xr-x | 4.2 KB |
ld-version.sh | -rwxr-xr-x | 234 bytes |
link-vmlinux.sh | -rwxr-xr-x | 7.0 KB |
makelst | -rwxr-xr-x | 773 bytes |
markup_oops.pl | -rwxr-xr-x | 8.1 KB |
mkcompile_h | -rwxr-xr-x | 2.5 KB |
mkmakefile | -rwxr-xr-x | 1.2 KB |
mksysmap | -rwxr-xr-x | 1.3 KB |
mkuboot.sh | -rwxr-xr-x | 379 bytes |
mkversion | -rw-r--r-- | 74 bytes |
module-common.lds | -rw-r--r-- | 901 bytes |
namespace.pl | -rwxr-xr-x | 13.1 KB |
objdiff | -rwxr-xr-x | 2.8 KB |
patch-kernel | -rwxr-xr-x | 9.9 KB |
pnmtologo.c | -rw-r--r-- | 11.9 KB |
profile2linkerlist.pl | -rwxr-xr-x | 375 bytes |
prune-kernel | -rwxr-xr-x | 673 bytes |
recordmcount.c | -rw-r--r-- | 17.2 KB |
recordmcount.h | -rw-r--r-- | 16.4 KB |
recordmcount.pl | -rwxr-xr-x | 18.0 KB |
setlocalversion | -rwxr-xr-x | 3.9 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 |
spelling.txt | -rw-r--r-- | 23.6 KB |
stackdelta | -rwxr-xr-x | 1.8 KB |
stackusage | -rwxr-xr-x | 759 bytes |
tags.sh | -rwxr-xr-x | 9.5 KB |
unifdef.c | -rw-r--r-- | 34.8 KB |
ver_linux | -rwxr-xr-x | 2.9 KB |
xen-hypercalls.sh | -rw-r--r-- | 351 bytes |
xz_wrap.sh | -rwxr-xr-x | 562 bytes |
Computing file changes ...