Commit cb0cc76a authored by Jacob Keller's avatar Jacob Keller Committed by Yue Haibing
Browse files

ice: Don't process extts if PTP is disabled

mainline inclusion
from mainline-v6.10-rc7
commit 996422e3230e41468f652d754fefd1bdbcd4604e
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IAGRON
CVE: CVE-2024-42107

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=996422e3230e41468f652d754fefd1bdbcd4604e



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

The ice_ptp_extts_event() function can race with ice_ptp_release() and
result in a NULL pointer dereference which leads to a kernel panic.

Panic occurs because the ice_ptp_extts_event() function calls
ptp_clock_event() with a NULL pointer. The ice driver has already
released the PTP clock by the time the interrupt for the next external
timestamp event occurs.

To fix this, modify the ice_ptp_extts_event() function to check the
PTP state and bail early if PTP is not ready.

Fixes: 172db5f9 ("ice: add support for auxiliary input/output pins")
Reviewed-by: default avatarPrzemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
Signed-off-by: default avatarKarol Kolacinski <karol.kolacinski@intel.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
Link: https://patch.msgid.link/20240702171459.2606611-3-anthony.l.nguyen@intel.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Conflicts:
	drivers/net/ethernet/intel/ice/ice_ptp.c
[commit 8293e4cb2ff5 ("ice: introduce PTP state machine") does not backported]
Signed-off-by: default avatarYue Haibing <yuehaibing@huawei.com>
parent 9e3d5ec1
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -1477,6 +1477,10 @@ void ice_ptp_extts_event(struct ice_pf *pf)
	u8 chan, tmr_idx;
	u32 hi, lo;

	/* Don't process timestamp events if PTP is not ready */
	if (!test_bit(ICE_FLAG_PTP, pf->flags))
		return;

	tmr_idx = hw->func_caps.ts_func_info.tmr_index_owned;
	/* Event time is captured by one of the two matched registers
	 *      GLTSYN_EVNT_L: 32 LSB of sampled time event