linux-kernel.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, Zumeng Chen <zumeng.chen@gmail.com>,
	Michael Chan <michael.chan@broadcom.com>,
	"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 4.16 30/55] tg3: Fix vunmap() BUG_ON() triggered from tg3_free_consistent().
Date: Fri, 18 May 2018 10:15:26 +0200	[thread overview]
Message-ID: <20180518081458.916839224@linuxfoundation.org> (raw)
In-Reply-To: <20180518081457.428920292@linuxfoundation.org>

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

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

From: Michael Chan <michael.chan@broadcom.com>

[ Upstream commit d89a2adb8bfe6f8949ff389acdb9fa298b6e8e12 ]

tg3_free_consistent() calls dma_free_coherent() to free tp->hw_stats
under spinlock and can trigger BUG_ON() in vunmap() because vunmap()
may sleep.  Fix it by removing the spinlock and relying on the
TG3_FLAG_INIT_COMPLETE flag to prevent race conditions between
tg3_get_stats64() and tg3_free_consistent().  TG3_FLAG_INIT_COMPLETE
is always cleared under tp->lock before tg3_free_consistent()
and therefore tg3_get_stats64() can safely access tp->hw_stats
under tp->lock if TG3_FLAG_INIT_COMPLETE is set.

Fixes: f5992b72ebe0 ("tg3: Fix race condition in tg3_get_stats64().")
Reported-by: Zumeng Chen <zumeng.chen@gmail.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/net/ethernet/broadcom/tg3.c |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -8733,14 +8733,15 @@ static void tg3_free_consistent(struct t
 	tg3_mem_rx_release(tp);
 	tg3_mem_tx_release(tp);
 
-	/* Protect tg3_get_stats64() from reading freed tp->hw_stats. */
-	tg3_full_lock(tp, 0);
+	/* tp->hw_stats can be referenced safely:
+	 *     1. under rtnl_lock
+	 *     2. or under tp->lock if TG3_FLAG_INIT_COMPLETE is set.
+	 */
 	if (tp->hw_stats) {
 		dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
 				  tp->hw_stats, tp->stats_mapping);
 		tp->hw_stats = NULL;
 	}
-	tg3_full_unlock(tp);
 }
 
 /*
@@ -14178,7 +14179,7 @@ static void tg3_get_stats64(struct net_d
 	struct tg3 *tp = netdev_priv(dev);
 
 	spin_lock_bh(&tp->lock);
-	if (!tp->hw_stats) {
+	if (!tp->hw_stats || !tg3_flag(tp, INIT_COMPLETE)) {
 		*stats = tp->net_stats_prev;
 		spin_unlock_bh(&tp->lock);
 		return;

  parent reply	other threads:[~2018-05-18  8:15 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-18  8:14 [PATCH 4.16 00/55] 4.16.10-stable review Greg Kroah-Hartman
2018-05-18  8:14 ` [PATCH 4.16 01/55] 8139too: Use disable_irq_nosync() in rtl8139_poll_controller() Greg Kroah-Hartman
2018-05-18  8:14 ` [PATCH 4.16 02/55] bridge: check iface upper dev when setting master via ioctl Greg Kroah-Hartman
2018-05-18  8:14 ` [PATCH 4.16 03/55] dccp: fix tasklet usage Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 04/55] ipv4: fix fnhe usage by non-cached routes Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 05/55] ipv4: fix memory leaks in udp_sendmsg, ping_v4_sendmsg Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 06/55] llc: better deal with too small mtu Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 07/55] net: ethernet: sun: niu set correct packet size in skb Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 08/55] net: ethernet: ti: cpsw: fix packet leaking in dual_mac mode Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 09/55] net/mlx4_en: Fix an error handling path in mlx4_en_init_netdev() Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 10/55] net/mlx4_en: Verify coalescing parameters are in range Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 11/55] net/mlx5e: Err if asked to offload TC match on frag being first Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 12/55] net/mlx5: E-Switch, Include VF RDMA stats in vport statistics Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 13/55] net sched actions: fix refcnt leak in skbmod Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 14/55] net_sched: fq: take care of throttled flows before reuse Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 15/55] net/smc: restrict non-blocking connect finish Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 16/55] net: support compat 64-bit time in {s,g}etsockopt Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 17/55] net/tls: Dont recursively call push_record during tls_write_space callbacks Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 18/55] net/tls: Fix connection stall on partial tls record Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 19/55] openvswitch: Dont swap table in nlattr_set() after OVS_ATTR_NESTED is found Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 20/55] qmi_wwan: do not steal interfaces from class drivers Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 21/55] r8169: fix powering up RTL8168h Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 22/55] rds: do not leak kernel memory to user land Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 23/55] sctp: delay the authentication for the duplicated cookie-echo chunk Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 24/55] sctp: fix the issue that the cookie-ack with auth cant get processed Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 25/55] sctp: handle two v4 addrs comparison in sctp_inet6_cmp_addr Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 26/55] sctp: remove sctp_chunk_put from fail_mark err path in sctp_ulpevent_make_rcvmsg Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 27/55] sctp: use the old asoc when making the cookie-ack chunk in dupcook_d Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 28/55] tcp_bbr: fix to zero idle_restart only upon S/ACKed data Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 29/55] tcp: ignore Fast Open on repair mode Greg Kroah-Hartman
2018-05-18  8:15 ` Greg Kroah-Hartman [this message]
2018-05-18  8:15 ` [PATCH 4.16 31/55] bonding: do not allow rlb updates to invalid mac Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 32/55] bonding: send learning packets for vlans on slave Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 33/55] net: sched: fix error path in tcf_proto_create() when modules are not configured Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 34/55] net/mlx5e: TX, Use correct counter in dma_map error flow Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 35/55] net/mlx5: Avoid cleaning flow steering table twice during " Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 36/55] hv_netvsc: set master device Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 37/55] ipv6: fix uninit-value in ip6_multipath_l3_keys() Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 38/55] net/mlx5e: Allow offloading ipv4 header re-write for icmp Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 39/55] nsh: fix infinite loop Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 40/55] udp: fix SO_BINDTODEVICE Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 41/55] mlxsw: spectrum_switchdev: Do not remove mrouter port from MDBs ports list Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 42/55] net/mlx5e: DCBNL fix min inline header size for dscp Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 43/55] net: systemport: Correclty disambiguate driver instances Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 44/55] nfp: flower: set tunnel ttl value to net default Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 45/55] sctp: clear the new asocs stream outcnt in sctp_stream_update Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 46/55] tcp: restore autocorking Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 47/55] tipc: fix one byte leak in tipc_sk_set_orig_addr() Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 48/55] hv_netvsc: Fix net device attach on older Windows hosts Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 49/55] ipv4: reset fnhe_mtu_locked after cache route flushed Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 50/55] mlxsw: core: Fix an error handling path in mlxsw_core_bus_device_register() Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 51/55] net/mlx5: Fix mlx5_get_vector_affinity function Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 52/55] net: phy: sfp: fix the BR,min computation Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 53/55] net/smc: keep clcsock reference in smc_tcp_listen_work() Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 54/55] scsi: aacraid: Correct hba_send to include iu_type Greg Kroah-Hartman
2018-05-18  8:15 ` [PATCH 4.16 55/55] proc: do not access cmdline nor environ from file-backed areas Greg Kroah-Hartman
2018-05-18 12:05 ` [PATCH 4.16 00/55] 4.16.10-stable review kernelci.org bot
2018-05-18 13:29 ` Guenter Roeck
2018-05-18 13:56   ` Greg Kroah-Hartman
2018-05-18 19:25 ` Naresh Kamboju
2018-05-19  7:43   ` Greg Kroah-Hartman
2018-05-18 20:45 ` Shuah Khan
2018-05-19  7:42   ` 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=20180518081458.916839224@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michael.chan@broadcom.com \
    --cc=stable@vger.kernel.org \
    --cc=zumeng.chen@gmail.com \
    /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).