Go to file
Xin Long ee60ad219f route: set the deleted fnhe fnhe_daddr to 0 in ip_del_fnhe to fix a race
The race occurs in __mkroute_output() when 2 threads lookup a dst:

  CPU A                 CPU B
  find_exception()
                        find_exception() [fnhe expires]
                        ip_del_fnhe() [fnhe is deleted]
  rt_bind_exception()

In rt_bind_exception() it will bind a deleted fnhe with the new dst, and
this dst will get no chance to be freed. It causes a dev defcnt leak and
consecutive dmesg warnings:

  unregister_netdevice: waiting for ethX to become free. Usage count = 1

Especially thanks Jon to identify the issue.

This patch fixes it by setting fnhe_daddr to 0 in ip_del_fnhe() to stop
binding the deleted fnhe with a new dst when checking fnhe's fnhe_daddr
and daddr in rt_bind_exception().

It works as both ip_del_fnhe() and rt_bind_exception() are protected by
fnhe_lock and the fhne is freed by kfree_rcu().

Fixes: deed49df73 ("route: check and remove route cache when we get route")
Signed-off-by: Jon Maxwell <jmaxwell37@gmail.com>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Reviewed-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-03-08 10:50:34 -08:00
arch Here's the main MIPS pull request for v5.1: 2019-03-05 11:28:25 -08:00
block
certs
crypto Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2019-03-05 09:09:55 -08:00
Documentation Here's the main MIPS pull request for v5.1: 2019-03-05 11:28:25 -08:00
drivers nfp: fix simple vNIC mailbox length 2019-03-07 11:00:21 -08:00
firmware
fs a.out: remove core dumping support 2019-03-05 10:00:35 -08:00
include appletalk: Fix compile regression 2019-03-06 10:46:29 -08:00
init
ipc
kernel s390 updates for the 5.1 merge window 2019-03-05 11:13:10 -08:00
lib Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2019-03-04 13:26:15 -08:00
LICENSES
mm Merge branch 'akpm' (patches from Andrew) 2019-03-01 09:04:59 -08:00
net route: set the deleted fnhe fnhe_daddr to 0 in ip_del_fnhe to fix a race 2019-03-08 10:50:34 -08:00
samples Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2019-03-05 08:26:13 -08:00
scripts kasan: turn off asan-stack for clang-8 and earlier 2019-03-01 09:02:33 -08:00
security get rid of legacy 'get_ds()' function 2019-03-04 10:50:14 -08:00
sound
tools selftest/net: Remove duplicate header 2019-03-04 11:35:51 -08:00
usr
virt kvm: properly check debugfs dentry before using it 2019-02-28 08:57:32 -08:00
.clang-format
.cocciconfig
.get_maintainer.ignore
.gitattributes
.gitignore
.mailmap
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS appletalk: Add atalk.h header files to MAINTAINERS file 2019-03-06 10:46:43 -08:00
Makefile Linux 5.0 2019-03-03 15:21:29 -08:00
README

Linux kernel
============

There are several guides for kernel developers and users. These guides can
be rendered in a number of formats, like HTML and PDF. Please read
Documentation/admin-guide/README.rst first.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.  The formatted documentation can also be read online at:

    https://www.kernel.org/doc/html/latest/

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.

Please read the Documentation/process/changes.rst file, as it contains the
requirements for building and running the kernel, and information about
the problems which may result by upgrading your kernel.