Linux vulnerability

In the Linux kernel, the following vulnerability has been resolved: net: Drop the lock in skb_may_tx_timestamp() skb_may_tx_timestamp() may acquire sock::sk_callback_lock. The lock must not be taken in IRQ context, only softirq is okay. A few drivers receive the timestamp via a dedicated interrupt and complete the TX timestamp from that handler. This will lead to a deadlock if the lock is already write-locked on the same CPU. Taking the lock can be avoided. The socket (pointed by the skb) will remain valid until the skb is released. The ->sk_socket and ->file member will be set to NULL once the user closes the socket which may happen before the timestamp arrives. If we happen to observe the pointer while the socket is closing but before the pointer is set to NULL then we may use it because both pointer (and the file's cred member) are RCU freed. Drop the lock. Use READ_ONCE() to obtain the individual pointer. Add a matching WRITE_ONCE() where the pointer are cleared.

Published 6 May 2026Updated 8 Sep 20269 sources
CVSS 5.5

What happened

In the Linux kernel, the following vulnerability has been resolved: net: Drop the lock in skb_may_tx_timestamp() skb_may_tx_timestamp() may acquire sock::sk_callback_lock. The lock must not be taken in IRQ context, only softirq is okay. A few drivers receive the timestamp via a dedicated interrupt and complete the TX timestamp from that handler. This will lead to a deadlock if the lock is already write-locked on the same CPU. Taking the lock can be avoided. The socket (pointed by the skb) will remain valid until the skb is released. The ->sk_socket and ->file member will be set to NULL once the user closes the socket which may happen before the timestamp arrives. If we happen to observe the pointer while the socket is closing but before the pointer is set to NULL then we may use it because both pointer (and the file's cred member) are RCU freed. Drop the lock. Use READ_ONCE() to obtain the individual pointer. Add a matching WRITE_ONCE() where the pointer are cleared.

Affected versions

Linux: b245be1f4db1a0394e4b6eb66059814b46670ac3 through before 4839cbda8f13e99ce2bb3b593f5cc3288415684b (git); b245be1f4db1a0394e4b6eb66059814b46670ac3 through before 3709d73ace37e9aaebb688f5a5cf706d74350b64 (git); b245be1f4db1a0394e4b6eb66059814b46670ac3 through before cf7599116c4c0082fd25cb1bf0254631da0ed06e (git); b245be1f4db1a0394e4b6eb66059814b46670ac3 through before cd2463ec60f0d6e460078037c86f9d0947ee1ff6 (git); b245be1f4db1a0394e4b6eb66059814b46670ac3 through before c770217044d9cbe16a1f7c385cf080ed06a2fc04 (git); b245be1f4db1a0394e4b6eb66059814b46670ac3 through before f3e4cceafad27c9363c33622732f86722846ec6f (git); b245be1f4db1a0394e4b6eb66059814b46670ac3 through before e4c6efb3b70ff87f1df99efce2f8893717695718 (git); b245be1f4db1a0394e4b6eb66059814b46670ac3 through before 983512f3a87fd8dc4c94dfa6b596b6e57df5aad7 (git); 4.0; V3.1.6 through before * (custom) Fixed: See vendor advisory.

Why it matters

Review the vendor advisory and exposure of the affected product to determine operational impact.

Detection & mitigation

  • Apply vendor-provided updates or mitigations.
  • Review affected product exposure and access logs.

Public PoC references

No public PoC reference has passed the current publication threshold.