stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Jon Maxwell <jmaxwell37@gmail.com>,
	Xin Long <lucien.xin@gmail.com>, David Ahern <dsahern@gmail.com>,
	"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 5.0 16/43] route: set the deleted fnhe fnhe_daddr to 0 in ip_del_fnhe to fix a race
Date: Mon, 18 Mar 2019 10:24:08 +0100	[thread overview]
Message-ID: <20190318083716.348107136@linuxfoundation.org> (raw)
In-Reply-To: <20190318083715.877441740@linuxfoundation.org>

5.0-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Xin Long <lucien.xin@gmail.com>

[ Upstream commit ee60ad219f5c7c4fb2f047f88037770063ef785f ]

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: deed49df7390 ("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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 net/ipv4/route.c |    4 ++++
 1 file changed, 4 insertions(+)

--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -1303,6 +1303,10 @@ static void ip_del_fnhe(struct fib_nh *n
 		if (fnhe->fnhe_daddr == daddr) {
 			rcu_assign_pointer(*fnhe_p, rcu_dereference_protected(
 				fnhe->fnhe_next, lockdep_is_held(&fnhe_lock)));
+			/* set fnhe_daddr to 0 to ensure it won't bind with
+			 * new dsts in rt_bind_exception().
+			 */
+			fnhe->fnhe_daddr = 0;
 			fnhe_flush_routes(fnhe);
 			kfree_rcu(fnhe, rcu);
 			break;



  parent reply	other threads:[~2019-03-18  9:49 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-18  9:23 [PATCH 5.0 00/43] 5.0.3-stable review Greg Kroah-Hartman
2019-03-18  9:23 ` [PATCH 5.0 01/43] connector: fix unsafe usage of ->real_parent Greg Kroah-Hartman
2019-03-18  9:23 ` [PATCH 5.0 02/43] fou, fou6: avoid uninit-value in gue_err() and gue6_err() Greg Kroah-Hartman
2019-03-18  9:23 ` [PATCH 5.0 03/43] gro_cells: make sure device is up in gro_cells_receive() Greg Kroah-Hartman
2019-03-18  9:23 ` [PATCH 5.0 04/43] ipv4/route: fail early when inet dev is missing Greg Kroah-Hartman
2019-03-18  9:23 ` [PATCH 5.0 05/43] l2tp: fix infoleak in l2tp_ip6_recvmsg() Greg Kroah-Hartman
2019-03-18  9:23 ` [PATCH 5.0 06/43] lan743x: Fix RX Kernel Panic Greg Kroah-Hartman
2019-03-18  9:23 ` [PATCH 5.0 07/43] lan743x: Fix TX Stall Issue Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 08/43] net: hns3: add dma_rmb() for rx description Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 09/43] net: hsr: fix memory leak in hsr_dev_finalize() Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 10/43] net/hsr: fix possible crash in add_timer() Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 11/43] net: sit: fix UBSAN Undefined behaviour in check_6rd Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 12/43] net/x25: fix use-after-free in x25_device_event() Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 13/43] net/x25: reset state in x25_connect() Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 14/43] pptp: dst_release sk_dst_cache in pptp_sock_destruct Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 15/43] ravb: Decrease TxFIFO depth of Q3 and Q2 to one Greg Kroah-Hartman
2019-03-18  9:24 ` Greg Kroah-Hartman [this message]
2019-03-18  9:24 ` [PATCH 5.0 17/43] rxrpc: Fix client call queueing, waiting for channel Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 18/43] sctp: remove sched init from sctp_stream_init Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 19/43] tcp: do not report TCP_CM_INQ of 0 for closed connections Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 20/43] tcp: Dont access TCP_SKB_CB before initializing it Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 21/43] tcp: handle inet_csk_reqsk_queue_add() failures Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 22/43] vxlan: Fix GRO cells race condition between receive and link delete Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 23/43] vxlan: test dev->flags & IFF_UP before calling gro_cells_receive() Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 24/43] net/mlx4_core: Fix reset flow when in command polling mode Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 25/43] net/mlx4_core: Fix locking in SRIOV mode when switching between events and polling Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 26/43] net/mlx4_core: Fix qp mtt size calculation Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 27/43] net: dsa: mv88e6xxx: Set correct interface mode for CPU/DSA ports Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 28/43] net: hns3: fix to stop multiple HNS reset due to the AER changes Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 29/43] vsock/virtio: fix kernel panic from virtio_transport_reset_no_sock Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 30/43] net: sched: flower: insert new filter to idr after setting its mask Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 31/43] f2fs: wait on atomic writes to count F2FS_CP_WB_DATA Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 32/43] perf/x86: Fixup typo in stub functions Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 33/43] ALSA: bebob: use more identical mod_alias for Saffire Pro 10 I/O against Liquid Saffire 56 Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 34/43] ALSA: firewire-motu: fix construction of PCM frame for capture direction Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 35/43] ALSA: hda: Extend i915 component bind timeout Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 36/43] ALSA: hda - add more quirks for HP Z2 G4 and HP Z240 Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 37/43] ALSA: hda/realtek: Enable audio jacks of ASUS UX362FA with ALC294 Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 38/43] ALSA: hda/realtek - Reduce click noise on Dell Precision 5820 headphone Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 39/43] ALSA: hda/realtek: Enable headset MIC of Acer TravelMate X514-51T with ALC255 Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 40/43] perf/x86/intel: Fix memory corruption Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 41/43] perf/x86/intel: Make dev_attr_allow_tsx_force_abort static Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 42/43] Its wrong to add len to sector_nr in raid10 reshape twice Greg Kroah-Hartman
2019-03-18  9:24 ` [PATCH 5.0 43/43] drm: Block fb changes for async plane updates Greg Kroah-Hartman
2019-03-19  2:26 ` [PATCH 5.0 00/43] 5.0.3-stable review Guenter Roeck
2019-03-19 12:19   ` Greg Kroah-Hartman
2019-03-19  2:54 ` Naresh Kamboju
2019-03-19 12:20   ` Greg Kroah-Hartman
2019-03-19 10:34 ` Jon Hunter
2019-03-19 12:17   ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190318083716.348107136@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=davem@davemloft.net \
    --cc=dsahern@gmail.com \
    --cc=jmaxwell37@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lucien.xin@gmail.com \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).