CVE-2024-26737

Source
https://nvd.nist.gov/vuln/detail/CVE-2024-26737
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2024-26737.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2024-26737
Downstream
Related
Published
2024-04-03T17:00:23Z
Modified
2025-10-15T09:20:51.378748Z
Severity
  • 5.5 (Medium) CVSS_V3 - CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H CVSS Calculator
Summary
bpf: Fix racing between bpf_timer_cancel_and_free and bpf_timer_cancel
Details

In the Linux kernel, the following vulnerability has been resolved:

bpf: Fix racing between bpftimercancelandfree and bpftimercancel

The following race is possible between bpftimercancelandfree and bpftimercancel. It will lead a UAF on the timer->timer.

bpftimercancel(); spinlock(); t = timer->time; spinunlock();

                bpf_timer_cancel_and_free();
                    spin_lock();
                    t = timer->timer;
                    timer->timer = NULL;
                    spin_unlock();
                    hrtimer_cancel(&t->timer);
                    kfree(t);

/* UAF on t */
hrtimer_cancel(&t->timer);

In bpftimercancelandfree, this patch frees the timer->timer after a rcu grace period. This requires a rcuhead addition to the "struct bpfhrtimer". Another kfree(t) happens in bpftimerinit, this does not need a kfreercu because it is still under the spinlock and timer->timer has not been visible by others yet.

In bpftimercancel, rcureadlock() is added because this helper can be used in a non rcu critical section context (e.g. from a sleepable bpf prog). Other timer->timer usages in helpers.c have been audited, bpftimercancel() is the only place where timer->timer is used outside of the spin_lock.

Another solution considered is to mark a t->flag in bpftimercancel and clear it after hrtimercancel() is done. In bpftimercanceland_free, it busy waits for the flag to be cleared before kfree(t). This patch goes with a straight forward solution and frees timer->timer after a rcu grace period.

References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
b00628b1c7d595ae5b544e059c27b1f5828314b4
Fixed
5268bb02107b9eedfdcd51db75b407d10043368c
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
b00628b1c7d595ae5b544e059c27b1f5828314b4
Fixed
addf5e297e6cbf5341f9c07720693ca9ba0057b5
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
b00628b1c7d595ae5b544e059c27b1f5828314b4
Fixed
8327ed12e8ebc5436bfaa1786c49988894f9c8a6
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
b00628b1c7d595ae5b544e059c27b1f5828314b4
Fixed
7d80a9e745fa5b47da3bca001f186c02485c7c33
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
b00628b1c7d595ae5b544e059c27b1f5828314b4
Fixed
0281b919e175bb9c3128bd3872ac2903e9436e3f

Affected versions

v5.*

v5.14
v5.14-rc1
v5.14-rc2
v5.14-rc3
v5.14-rc4
v5.14-rc5
v5.14-rc6
v5.14-rc7
v5.15
v5.15-rc1
v5.15-rc2
v5.15-rc3
v5.15-rc4
v5.15-rc5
v5.15-rc6
v5.15-rc7
v5.15.1
v5.15.10
v5.15.100
v5.15.101
v5.15.102
v5.15.103
v5.15.104
v5.15.105
v5.15.106
v5.15.107
v5.15.108
v5.15.109
v5.15.11
v5.15.110
v5.15.111
v5.15.112
v5.15.113
v5.15.114
v5.15.115
v5.15.116
v5.15.117
v5.15.118
v5.15.119
v5.15.12
v5.15.120
v5.15.121
v5.15.122
v5.15.123
v5.15.124
v5.15.125
v5.15.126
v5.15.127
v5.15.128
v5.15.129
v5.15.13
v5.15.130
v5.15.131
v5.15.132
v5.15.133
v5.15.134
v5.15.135
v5.15.136
v5.15.137
v5.15.138
v5.15.139
v5.15.14
v5.15.140
v5.15.141
v5.15.142
v5.15.143
v5.15.144
v5.15.145
v5.15.146
v5.15.147
v5.15.148
v5.15.149
v5.15.15
v5.15.16
v5.15.17
v5.15.18
v5.15.19
v5.15.2
v5.15.20
v5.15.21
v5.15.22
v5.15.23
v5.15.24
v5.15.25
v5.15.26
v5.15.27
v5.15.28
v5.15.29
v5.15.3
v5.15.30
v5.15.31
v5.15.32
v5.15.33
v5.15.34
v5.15.35
v5.15.36
v5.15.37
v5.15.38
v5.15.39
v5.15.4
v5.15.40
v5.15.41
v5.15.42
v5.15.43
v5.15.44
v5.15.45
v5.15.46
v5.15.47
v5.15.48
v5.15.49
v5.15.5
v5.15.50
v5.15.51
v5.15.52
v5.15.53
v5.15.54
v5.15.55
v5.15.56
v5.15.57
v5.15.58
v5.15.59
v5.15.6
v5.15.60
v5.15.61
v5.15.62
v5.15.63
v5.15.64
v5.15.65
v5.15.66
v5.15.67
v5.15.68
v5.15.69
v5.15.7
v5.15.70
v5.15.71
v5.15.72
v5.15.73
v5.15.74
v5.15.75
v5.15.76
v5.15.77
v5.15.78
v5.15.79
v5.15.8
v5.15.80
v5.15.81
v5.15.82
v5.15.83
v5.15.84
v5.15.85
v5.15.86
v5.15.87
v5.15.88
v5.15.89
v5.15.9
v5.15.90
v5.15.91
v5.15.92
v5.15.93
v5.15.94
v5.15.95
v5.15.96
v5.15.97
v5.15.98
v5.15.99
v5.16
v5.16-rc1
v5.16-rc2
v5.16-rc3
v5.16-rc4
v5.16-rc5
v5.16-rc6
v5.16-rc7
v5.16-rc8
v5.17
v5.17-rc1
v5.17-rc2
v5.17-rc3
v5.17-rc4
v5.17-rc5
v5.17-rc6
v5.17-rc7
v5.17-rc8
v5.18
v5.18-rc1
v5.18-rc2
v5.18-rc3
v5.18-rc4
v5.18-rc5
v5.18-rc6
v5.18-rc7
v5.19
v5.19-rc1
v5.19-rc2
v5.19-rc3
v5.19-rc4
v5.19-rc5
v5.19-rc6
v5.19-rc7
v5.19-rc8

v6.*

v6.0
v6.0-rc1
v6.0-rc2
v6.0-rc3
v6.0-rc4
v6.0-rc5
v6.0-rc6
v6.0-rc7
v6.1
v6.1-rc1
v6.1-rc2
v6.1-rc3
v6.1-rc4
v6.1-rc5
v6.1-rc6
v6.1-rc7
v6.1-rc8
v6.1.1
v6.1.10
v6.1.11
v6.1.12
v6.1.13
v6.1.14
v6.1.15
v6.1.16
v6.1.17
v6.1.18
v6.1.19
v6.1.2
v6.1.20
v6.1.21
v6.1.22
v6.1.23
v6.1.24
v6.1.25
v6.1.26
v6.1.27
v6.1.28
v6.1.29
v6.1.3
v6.1.30
v6.1.31
v6.1.32
v6.1.33
v6.1.34
v6.1.35
v6.1.36
v6.1.37
v6.1.38
v6.1.39
v6.1.4
v6.1.40
v6.1.41
v6.1.42
v6.1.43
v6.1.44
v6.1.45
v6.1.46
v6.1.47
v6.1.48
v6.1.49
v6.1.5
v6.1.50
v6.1.51
v6.1.52
v6.1.53
v6.1.54
v6.1.55
v6.1.56
v6.1.57
v6.1.58
v6.1.59
v6.1.6
v6.1.60
v6.1.61
v6.1.62
v6.1.63
v6.1.64
v6.1.65
v6.1.66
v6.1.67
v6.1.68
v6.1.69
v6.1.7
v6.1.70
v6.1.71
v6.1.72
v6.1.73
v6.1.74
v6.1.75
v6.1.76
v6.1.77
v6.1.78
v6.1.79
v6.1.8
v6.1.9
v6.2
v6.2-rc1
v6.2-rc2
v6.2-rc3
v6.2-rc4
v6.2-rc5
v6.2-rc6
v6.2-rc7
v6.2-rc8
v6.3
v6.3-rc1
v6.3-rc2
v6.3-rc3
v6.3-rc4
v6.3-rc5
v6.3-rc6
v6.3-rc7
v6.4
v6.4-rc1
v6.4-rc2
v6.4-rc3
v6.4-rc4
v6.4-rc5
v6.4-rc6
v6.4-rc7
v6.5
v6.5-rc1
v6.5-rc2
v6.5-rc3
v6.5-rc4
v6.5-rc5
v6.5-rc6
v6.5-rc7
v6.6
v6.6-rc1
v6.6-rc2
v6.6-rc3
v6.6-rc4
v6.6-rc5
v6.6-rc6
v6.6-rc7
v6.6.1
v6.6.10
v6.6.11
v6.6.12
v6.6.13
v6.6.14
v6.6.15
v6.6.16
v6.6.17
v6.6.18
v6.6.2
v6.6.3
v6.6.4
v6.6.5
v6.6.6
v6.6.7
v6.6.8
v6.6.9
v6.7
v6.7-rc1
v6.7-rc2
v6.7-rc3
v6.7-rc4
v6.7-rc5
v6.7-rc6
v6.7-rc7
v6.7-rc8
v6.7.1
v6.7.2
v6.7.3
v6.7.4
v6.7.5
v6.7.6
v6.8-rc1

Database specific

{
    "vanir_signatures": [
        {
            "id": "CVE-2024-26737-03382f51",
            "signature_type": "Function",
            "target": {
                "file": "kernel/bpf/helpers.c",
                "function": "BPF_CALL_1"
            },
            "signature_version": "v1",
            "digest": {
                "length": 400.0,
                "function_hash": "238598264745936296370193862989973024653"
            },
            "deprecated": false,
            "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@0281b919e175bb9c3128bd3872ac2903e9436e3f"
        },
        {
            "id": "CVE-2024-26737-09bdb0a5",
            "signature_type": "Function",
            "target": {
                "file": "kernel/bpf/helpers.c",
                "function": "BPF_CALL_1"
            },
            "signature_version": "v1",
            "digest": {
                "length": 400.0,
                "function_hash": "238598264745936296370193862989973024653"
            },
            "deprecated": false,
            "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@5268bb02107b9eedfdcd51db75b407d10043368c"
        },
        {
            "id": "CVE-2024-26737-0cc83c22",
            "signature_type": "Function",
            "target": {
                "file": "kernel/bpf/helpers.c",
                "function": "bpf_timer_cancel_and_free"
            },
            "signature_version": "v1",
            "digest": {
                "length": 385.0,
                "function_hash": "279790273413285307361163931996564113722"
            },
            "deprecated": false,
            "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@7d80a9e745fa5b47da3bca001f186c02485c7c33"
        },
        {
            "id": "CVE-2024-26737-10df3c10",
            "signature_type": "Function",
            "target": {
                "file": "kernel/bpf/helpers.c",
                "function": "bpf_timer_cancel_and_free"
            },
            "signature_version": "v1",
            "digest": {
                "length": 385.0,
                "function_hash": "279790273413285307361163931996564113722"
            },
            "deprecated": false,
            "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@addf5e297e6cbf5341f9c07720693ca9ba0057b5"
        },
        {
            "id": "CVE-2024-26737-1babf4c5",
            "signature_type": "Line",
            "target": {
                "file": "kernel/bpf/helpers.c"
            },
            "signature_version": "v1",
            "digest": {
                "line_hashes": [
                    "138461655890669710373815060390858788755",
                    "7097597485216899987323467684187622917",
                    "248291822126793367701810632853762933111",
                    "289585970792630292651418038625990815601",
                    "95004044934670641723732824068619176997",
                    "102919242523873717854153279374758254539",
                    "310242520630030139894809665314294094498",
                    "157731722464649137114765182188930518571",
                    "249547385452878111138668661443923482515",
                    "226501091830974304948118132295409685419",
                    "79684956514605334236694291327752681350",
                    "284098970420251430019563469080979299615",
                    "64026458641123611174860309368707026147",
                    "177159336172652089292486604480016700418",
                    "268299227815758475990156158663484206997",
                    "216086117564603303544296917216648394861"
                ],
                "threshold": 0.9
            },
            "deprecated": false,
            "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@addf5e297e6cbf5341f9c07720693ca9ba0057b5"
        },
        {
            "id": "CVE-2024-26737-20aaf321",
            "signature_type": "Function",
            "target": {
                "file": "kernel/bpf/helpers.c",
                "function": "BPF_CALL_1"
            },
            "signature_version": "v1",
            "digest": {
                "length": 400.0,
                "function_hash": "238598264745936296370193862989973024653"
            },
            "deprecated": false,
            "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@addf5e297e6cbf5341f9c07720693ca9ba0057b5"
        },
        {
            "id": "CVE-2024-26737-5568482a",
            "signature_type": "Function",
            "target": {
                "file": "kernel/bpf/helpers.c",
                "function": "bpf_timer_cancel_and_free"
            },
            "signature_version": "v1",
            "digest": {
                "length": 385.0,
                "function_hash": "279790273413285307361163931996564113722"
            },
            "deprecated": false,
            "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@8327ed12e8ebc5436bfaa1786c49988894f9c8a6"
        },
        {
            "id": "CVE-2024-26737-58cf666b",
            "signature_type": "Function",
            "target": {
                "file": "kernel/bpf/helpers.c",
                "function": "bpf_timer_cancel_and_free"
            },
            "signature_version": "v1",
            "digest": {
                "length": 385.0,
                "function_hash": "279790273413285307361163931996564113722"
            },
            "deprecated": false,
            "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@5268bb02107b9eedfdcd51db75b407d10043368c"
        },
        {
            "id": "CVE-2024-26737-5bc32cb4",
            "signature_type": "Line",
            "target": {
                "file": "kernel/bpf/helpers.c"
            },
            "signature_version": "v1",
            "digest": {
                "line_hashes": [
                    "138461655890669710373815060390858788755",
                    "7097597485216899987323467684187622917",
                    "248291822126793367701810632853762933111",
                    "289585970792630292651418038625990815601",
                    "95004044934670641723732824068619176997",
                    "102919242523873717854153279374758254539",
                    "310242520630030139894809665314294094498",
                    "157731722464649137114765182188930518571",
                    "249547385452878111138668661443923482515",
                    "226501091830974304948118132295409685419",
                    "79684956514605334236694291327752681350",
                    "284098970420251430019563469080979299615",
                    "64026458641123611174860309368707026147",
                    "177159336172652089292486604480016700418",
                    "268299227815758475990156158663484206997",
                    "216086117564603303544296917216648394861"
                ],
                "threshold": 0.9
            },
            "deprecated": false,
            "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@0281b919e175bb9c3128bd3872ac2903e9436e3f"
        },
        {
            "id": "CVE-2024-26737-5db01659",
            "signature_type": "Function",
            "target": {
                "file": "kernel/bpf/helpers.c",
                "function": "BPF_CALL_1"
            },
            "signature_version": "v1",
            "digest": {
                "length": 400.0,
                "function_hash": "238598264745936296370193862989973024653"
            },
            "deprecated": false,
            "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@7d80a9e745fa5b47da3bca001f186c02485c7c33"
        },
        {
            "id": "CVE-2024-26737-78d0710e",
            "signature_type": "Function",
            "target": {
                "file": "kernel/bpf/helpers.c",
                "function": "BPF_CALL_1"
            },
            "signature_version": "v1",
            "digest": {
                "length": 400.0,
                "function_hash": "238598264745936296370193862989973024653"
            },
            "deprecated": false,
            "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@8327ed12e8ebc5436bfaa1786c49988894f9c8a6"
        },
        {
            "id": "CVE-2024-26737-8b9cc166",
            "signature_type": "Function",
            "target": {
                "file": "kernel/bpf/helpers.c",
                "function": "bpf_timer_cancel_and_free"
            },
            "signature_version": "v1",
            "digest": {
                "length": 385.0,
                "function_hash": "279790273413285307361163931996564113722"
            },
            "deprecated": false,
            "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@0281b919e175bb9c3128bd3872ac2903e9436e3f"
        },
        {
            "id": "CVE-2024-26737-8df99e3d",
            "signature_type": "Line",
            "target": {
                "file": "kernel/bpf/helpers.c"
            },
            "signature_version": "v1",
            "digest": {
                "line_hashes": [
                    "138461655890669710373815060390858788755",
                    "7097597485216899987323467684187622917",
                    "248291822126793367701810632853762933111",
                    "289585970792630292651418038625990815601",
                    "95004044934670641723732824068619176997",
                    "102919242523873717854153279374758254539",
                    "310242520630030139894809665314294094498",
                    "157731722464649137114765182188930518571",
                    "249547385452878111138668661443923482515",
                    "226501091830974304948118132295409685419",
                    "79684956514605334236694291327752681350",
                    "284098970420251430019563469080979299615",
                    "64026458641123611174860309368707026147",
                    "177159336172652089292486604480016700418",
                    "8818216259447168601555137438210919033",
                    "22527797822950139026335694195094606824"
                ],
                "threshold": 0.9
            },
            "deprecated": false,
            "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@5268bb02107b9eedfdcd51db75b407d10043368c"
        },
        {
            "id": "CVE-2024-26737-e0e70180",
            "signature_type": "Line",
            "target": {
                "file": "kernel/bpf/helpers.c"
            },
            "signature_version": "v1",
            "digest": {
                "line_hashes": [
                    "138461655890669710373815060390858788755",
                    "7097597485216899987323467684187622917",
                    "248291822126793367701810632853762933111",
                    "289585970792630292651418038625990815601",
                    "95004044934670641723732824068619176997",
                    "102919242523873717854153279374758254539",
                    "310242520630030139894809665314294094498",
                    "157731722464649137114765182188930518571",
                    "249547385452878111138668661443923482515",
                    "226501091830974304948118132295409685419",
                    "79684956514605334236694291327752681350",
                    "284098970420251430019563469080979299615",
                    "64026458641123611174860309368707026147",
                    "177159336172652089292486604480016700418",
                    "268299227815758475990156158663484206997",
                    "216086117564603303544296917216648394861"
                ],
                "threshold": 0.9
            },
            "deprecated": false,
            "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@8327ed12e8ebc5436bfaa1786c49988894f9c8a6"
        },
        {
            "id": "CVE-2024-26737-f8caf441",
            "signature_type": "Line",
            "target": {
                "file": "kernel/bpf/helpers.c"
            },
            "signature_version": "v1",
            "digest": {
                "line_hashes": [
                    "138461655890669710373815060390858788755",
                    "7097597485216899987323467684187622917",
                    "248291822126793367701810632853762933111",
                    "289585970792630292651418038625990815601",
                    "95004044934670641723732824068619176997",
                    "102919242523873717854153279374758254539",
                    "310242520630030139894809665314294094498",
                    "157731722464649137114765182188930518571",
                    "249547385452878111138668661443923482515",
                    "226501091830974304948118132295409685419",
                    "79684956514605334236694291327752681350",
                    "284098970420251430019563469080979299615",
                    "64026458641123611174860309368707026147",
                    "177159336172652089292486604480016700418",
                    "268299227815758475990156158663484206997",
                    "216086117564603303544296917216648394861"
                ],
                "threshold": 0.9
            },
            "deprecated": false,
            "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@7d80a9e745fa5b47da3bca001f186c02485c7c33"
        }
    ]
}

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
5.15.0
Fixed
5.15.150
Type
ECOSYSTEM
Events
Introduced
5.16.0
Fixed
6.1.80
Type
ECOSYSTEM
Events
Introduced
6.2.0
Fixed
6.6.19
Type
ECOSYSTEM
Events
Introduced
6.7.0
Fixed
6.7.7