CVE-2024-26921
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
18/04/2024
Last modified:
03/11/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
inet: inet_defrag: prevent sk release while still in use<br />
<br />
ip_local_out() and other functions can pass skb->sk as function argument.<br />
<br />
If the skb is a fragment and reassembly happens before such function call<br />
returns, the sk must not be released.<br />
<br />
This affects skb fragments reassembled via netfilter or similar<br />
modules, e.g. openvswitch or ct_act.c, when run as part of tx pipeline.<br />
<br />
Eric Dumazet made an initial analysis of this bug. Quoting Eric:<br />
Calling ip_defrag() in output path is also implying skb_orphan(),<br />
which is buggy because output path relies on sk not disappearing.<br />
<br />
A relevant old patch about the issue was :<br />
8282f27449bf ("inet: frag: Always orphan skbs inside ip_defrag()")<br />
<br />
[..]<br />
<br />
net/ipv4/ip_output.c depends on skb->sk being set, and probably to an<br />
inet socket, not an arbitrary one.<br />
<br />
If we orphan the packet in ipvlan, then downstream things like FQ<br />
packet scheduler will not work properly.<br />
<br />
We need to change ip_defrag() to only use skb_orphan() when really<br />
needed, ie whenever frag_list is going to be used.<br />
<br />
Eric suggested to stash sk in fragment queue and made an initial patch.<br />
However there is a problem with this:<br />
<br />
If skb is refragmented again right after, ip_do_fragment() will copy<br />
head->sk to the new fragments, and sets up destructor to sock_wfree.<br />
IOW, we have no choice but to fix up sk_wmem accouting to reflect the<br />
fully reassembled skb, else wmem will underflow.<br />
<br />
This change moves the orphan down into the core, to last possible moment.<br />
As ip_defrag_offset is aliased with sk_buff->sk member, we must move the<br />
offset into the FRAG_CB, else skb->sk gets clobbered.<br />
<br />
This allows to delay the orphaning long enough to learn if the skb has<br />
to be queued or if the skb is completing the reasm queue.<br />
<br />
In the former case, things work as before, skb is orphaned. This is<br />
safe because skb gets queued/stolen and won&#39;t continue past reasm engine.<br />
<br />
In the latter case, we will steal the skb->sk reference, reattach it to<br />
the head skb, and fix up wmem accouting when inet_frag inflates truesize.
Impact
Base Score 3.x
5.50
Severity 3.x
MEDIUM
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.1 (including) | 5.4.285 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.5 (including) | 5.10.227 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (including) | 5.15.168 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (including) | 6.1.85 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (including) | 6.6.26 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (including) | 6.8.5 (excluding) |
| cpe:2.3:o:linux:linux_kernel:6.9:rc1:*:*:*:*:*:* |
To consult the complete list of CPE names with products and versions, see this page
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/18685451fc4e546fc0e718580d32df3c0e5c8272
- https://git.kernel.org/stable/c/1b6de5e6575b56502665c65cf93b0ae6aa0f51ab
- https://git.kernel.org/stable/c/4318608dc28ef184158b4045896740716bea23f0
- https://git.kernel.org/stable/c/7d0567842b78390dd9b60f00f1d8f838d540e325
- https://git.kernel.org/stable/c/9705f447bf9a6cd088300ad2c407b5e1c6591091
- https://git.kernel.org/stable/c/e09cbe017311508c21e0739e97198a8388b98981
- https://git.kernel.org/stable/c/f4877225313d474659ee53150ccc3d553a978727
- https://git.kernel.org/stable/c/18685451fc4e546fc0e718580d32df3c0e5c8272
- https://git.kernel.org/stable/c/7d0567842b78390dd9b60f00f1d8f838d540e325
- https://git.kernel.org/stable/c/e09cbe017311508c21e0739e97198a8388b98981
- https://git.kernel.org/stable/c/f4877225313d474659ee53150ccc3d553a978727
- https://lists.debian.org/debian-lts-announce/2025/03/msg00002.html



