Skip to content

Commit efc54fb

Browse files
orospanguy11
authored andcommitted
iavf: fix PTP use-after-free during reset
Commit 7c01dbf ("iavf: periodically cache PHC time") introduced a worker to cache PHC time, but failed to stop it during reset or disable. This creates a race condition where `iavf_reset_task()` or `iavf_disable_vf()` free adapter resources (AQ) while the worker is still running. If the worker triggers `iavf_queue_ptp_cmd()` during teardown, it accesses freed memory/locks, leading to a crash. Fix this by calling `iavf_ptp_release()` before tearing down the adapter. This ensures `ptp_clock_unregister()` synchronously cancels the worker and cleans up the chardev before the backing resources are destroyed. Fixes: 7c01dbf ("iavf: periodically cache PHC time") Signed-off-by: Petr Oros <poros@redhat.com> Reviewed-by: Ivan Vecera <ivecera@redhat.com> Acked-by: Jacob Keller <jacob.e.keller@intel.com> Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev> Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
1 parent bd98c62 commit efc54fb

1 file changed

Lines changed: 4 additions & 0 deletions

File tree

drivers/net/ethernet/intel/iavf/iavf_main.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3036,6 +3036,8 @@ static void iavf_disable_vf(struct iavf_adapter *adapter)
30363036

30373037
adapter->flags |= IAVF_FLAG_PF_COMMS_FAILED;
30383038

3039+
iavf_ptp_release(adapter);
3040+
30393041
/* We don't use netif_running() because it may be true prior to
30403042
* ndo_open() returning, so we can't assume it means all our open
30413043
* tasks have finished, since we're not holding the rtnl_lock here.
@@ -3211,6 +3213,8 @@ static void iavf_reset_task(struct work_struct *work)
32113213
iavf_change_state(adapter, __IAVF_RESETTING);
32123214
adapter->flags &= ~IAVF_FLAG_RESET_PENDING;
32133215

3216+
iavf_ptp_release(adapter);
3217+
32143218
/* free the Tx/Rx rings and descriptors, might be better to just
32153219
* re-use them sometime in the future
32163220
*/

0 commit comments

Comments
 (0)