From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Jacob Keller <jacob.e.keller@intel.com>,
Gurucharan G <gurucharanx.g@intel.com>,
Tony Nguyen <anthony.l.nguyen@intel.com>,
Sasha Levin <sashal@kernel.org>,
jesse.brandeburg@intel.com, davem@davemloft.net,
edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
richardcochran@gmail.com, intel-wired-lan@lists.osuosl.org,
netdev@vger.kernel.org
Subject: [PATCH AUTOSEL 6.1 82/85] ice: synchronize the misc IRQ when tearing down Tx tracker
Date: Sun, 18 Dec 2022 11:01:39 -0500 [thread overview]
Message-ID: <20221218160142.925394-82-sashal@kernel.org> (raw)
In-Reply-To: <20221218160142.925394-1-sashal@kernel.org>
From: Jacob Keller <jacob.e.keller@intel.com>
[ Upstream commit f0ae124019faaa03f8b4c3fbe52ae35ab3a8dbda ]
Since commit 1229b33973c7 ("ice: Add low latency Tx timestamp read") the
ice driver has used a threaded IRQ for handling Tx timestamps. This change
did not add a call to synchronize_irq during ice_ptp_release_tx_tracker.
Thus it is possible that an interrupt could occur just as the tracker is
being removed. This could lead to a use-after-free of the Tx tracker
structure data.
Fix this by calling sychronize_irq in ice_ptp_release_tx_tracker after
we've cleared the init flag. In addition, make sure that we re-check the
init flag at the end of ice_ptp_tx_tstamp before we exit ensuring that we
will stop polling for new timestamps once the tracker de-initialization has
begun.
Refactor the ts_handled variable into "more_timestamps" so that we can
simply directly assign this boolean instead of relying on an initialized
value of true. This makes the new combined check easier to read.
With this change, the ice_ptp_release_tx_tracker function will now wait for
the threaded interrupt to complete if it was executing while the init flag
was cleared.
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Gurucharan G <gurucharanx.g@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/intel/ice/ice_ptp.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
index 0f668468d141..53fec5bbe6e0 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp.c
+++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
@@ -639,7 +639,7 @@ static u64 ice_ptp_extend_40b_ts(struct ice_pf *pf, u64 in_tstamp)
static bool ice_ptp_tx_tstamp(struct ice_ptp_tx *tx)
{
struct ice_ptp_port *ptp_port;
- bool ts_handled = true;
+ bool more_timestamps;
struct ice_pf *pf;
u8 idx;
@@ -701,11 +701,10 @@ static bool ice_ptp_tx_tstamp(struct ice_ptp_tx *tx)
* poll for remaining timestamps.
*/
spin_lock(&tx->lock);
- if (!bitmap_empty(tx->in_use, tx->len))
- ts_handled = false;
+ more_timestamps = tx->init && !bitmap_empty(tx->in_use, tx->len);
spin_unlock(&tx->lock);
- return ts_handled;
+ return !more_timestamps;
}
/**
@@ -776,6 +775,9 @@ ice_ptp_release_tx_tracker(struct ice_pf *pf, struct ice_ptp_tx *tx)
{
tx->init = 0;
+ /* wait for potentially outstanding interrupt to complete */
+ synchronize_irq(pf->msix_entries[pf->oicr_idx].vector);
+
ice_ptp_flush_tx_tracker(pf, tx);
kfree(tx->tstamps);
--
2.35.1
next prev parent reply other threads:[~2022-12-18 16:18 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20221218160142.925394-1-sashal@kernel.org>
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 03/85] brcmfmac: return error when getting invalid max_flowrings from dongle Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 04/85] wifi: ath9k: verify the expected usb_endpoints are present Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 05/85] wifi: ar5523: Fix use-after-free on ar5523_cmd() timed out Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 09/85] wifi: ath10k: Delay the unmapping of the buffer Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 10/85] openvswitch: Use kmalloc_size_roundup() to match ksize() usage Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 11/85] bnx2: " Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 20/85] wifi: ath11k: Fix qmi_msg_handler data structure initialization Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 21/85] qed (gcc13): use u16 for fid to be big enough Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 23/85] bpf: make sure skb->len != 0 when redirecting to a tunneling device Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 24/85] net: ethernet: ti: Fix return type of netcp_ndo_start_xmit() Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 25/85] hamradio: baycom_epp: Fix return type of baycom_send_packet() Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 26/85] wifi: brcmfmac: Fix potential shift-out-of-bounds in brcmf_fw_alloc_request() Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 27/85] wifi: brcmfmac: Fix potential NULL pointer dereference in 'brcmf_c_preinit_dcmds()' Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 30/85] igb: Do not free q_vector unless new one was allocated Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 33/85] s390/ctcm: Fix return type of ctc{mp,}m_tx() Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 34/85] s390/netiucv: Fix return type of netiucv_tx() Sasha Levin
2022-12-18 16:00 ` [PATCH AUTOSEL 6.1 35/85] s390/lcs: Fix return type of lcs_start_xmit() Sasha Levin
2022-12-18 16:01 ` [PATCH AUTOSEL 6.1 48/85] net: add atomic_long_t to net_device_stats fields Sasha Levin
2022-12-18 16:01 ` [PATCH AUTOSEL 6.1 49/85] ipv6/sit: use DEV_STATS_INC() to avoid data-races Sasha Levin
2022-12-18 16:01 ` [PATCH AUTOSEL 6.1 50/85] mrp: introduce active flags to prevent UAF when applicant uninit Sasha Levin
2022-12-18 16:01 ` [PATCH AUTOSEL 6.1 51/85] net: ethernet: mtk_eth_soc: drop packets to WDMA if the ring is full Sasha Levin
2022-12-18 16:01 ` [PATCH AUTOSEL 6.1 53/85] ppp: associate skb with a device at tx Sasha Levin
2022-12-18 16:01 ` [PATCH AUTOSEL 6.1 57/85] ethtool: avoiding integer overflow in ethtool_phys_id() Sasha Levin
2022-12-18 16:01 ` [PATCH AUTOSEL 6.1 70/85] net: dpaa2: publish MAC stringset to ethtool -S even if MAC is missing Sasha Levin
2022-12-18 16:01 ` [PATCH AUTOSEL 6.1 71/85] wifi: mt76: do not run mt76u_status_worker if the device is not running Sasha Levin
2022-12-18 16:01 ` Sasha Levin [this message]
2022-12-18 16:01 ` [PATCH AUTOSEL 6.1 84/85] Bluetooth: Add quirk to disable extended scanning Sasha Levin
2022-12-18 16:01 ` [PATCH AUTOSEL 6.1 85/85] Bluetooth: Add quirk to disable MWS Transport Configuration Sasha Levin
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=20221218160142.925394-82-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=anthony.l.nguyen@intel.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=gurucharanx.g@intel.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=jacob.e.keller@intel.com \
--cc=jesse.brandeburg@intel.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=richardcochran@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).