CVE-2024-39474

Source
https://nvd.nist.gov/vuln/detail/CVE-2024-39474
Import Source
https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2024-39474.json
JSON Data
https://api.test.osv.dev/v1/vulns/CVE-2024-39474
Downstream
Related
Published
2024-07-05T06:55:05Z
Modified
2025-10-17T08:36:02.919050Z
Summary
mm/vmalloc: fix vmalloc which may return null if called with __GFP_NOFAIL
Details

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

mm/vmalloc: fix vmalloc which may return null if called with _GFPNOFAIL

commit a421ef303008 ("mm: allow !GFPKERNEL allocations for kvmalloc") includes support for _GFP_NOFAIL, but it presents a conflict with commit dd544141b9eb ("vmalloc: back off when the current task is OOM-killed"). A possible scenario is as follows:

process-a _vmallocnoderange(GFPKERNEL | _GFPNOFAIL) _vmallocareanode() vmareaallocpages() --> oom-killer send SIGKILL to process-a if (fatalsignalpending(current)) break; --> return NULL;

To fix this, do not check fatalsignalpending() in vmareaallocpages() if _GFP_NOFAIL set.

This issue occurred during OPLUS KASAN TEST. Below is part of the log -> oom-killer sends signal to process [65731.222840] [ T1308] oom-kill:constraint=CONSTRAINTNONE,nodemask=(null),cpuset=/,memsallowed=0,globaloom,taskmemcg=/apps/uid_10198,task=gs.intelligence,pid=32454,uid=10198

[65731.259685] [T32454] Call trace: [65731.259698] [T32454] dumpbacktrace+0xf4/0x118 [65731.259734] [T32454] showstack+0x18/0x24 [65731.259756] [T32454] dumpstacklvl+0x60/0x7c [65731.259781] [T32454] dumpstack+0x18/0x38 [65731.259800] [T32454] mrdumpcommondie+0x250/0x39c [mrdump] [65731.259936] [T32454] ipanicdie+0x20/0x34 [mrdump] [65731.260019] [T32454] atomicnotifiercallchain+0xb4/0xfc [65731.260047] [T32454] notifydie+0x114/0x198 [65731.260073] [T32454] die+0xf4/0x5b4 [65731.260098] [T32454] diekernelfault+0x80/0x98 [65731.260124] [T32454] _dokernelfault+0x160/0x2a8 [65731.260146] [T32454] dobadarea+0x68/0x148 [65731.260174] [T32454] domemabort+0x151c/0x1b34 [65731.260204] [T32454] el1abort+0x3c/0x5c [65731.260227] [T32454] el1h64synchandler+0x54/0x90 [65731.260248] [T32454] el1h64_sync+0x68/0x6c

[65731.260269] [T32454] zerofsdecompressqueue+0x7f0/0x2258 --> be->decompressedpages = kvcalloc(be->nrpages, sizeof(struct page *), GFPKERNEL | _GFPNOFAIL); kernel panic by NULL pointer dereference. erofs assume kvmalloc with _GFPNOFAIL never return NULL. [65731.260293] [T32454] zerofsrunqueue+0xf30/0x104c [65731.260314] [T32454] zerofsreadahead+0x4f0/0x968 [65731.260339] [T32454] readpages+0x170/0xadc [65731.260364] [T32454] pagecacheraunbounded+0x874/0xf30 [65731.260388] [T32454] pagecacheraorder+0x24c/0x714 [65731.260411] [T32454] filemapfault+0xbf0/0x1a74 [65731.260437] [T32454] _dofault+0xd0/0x33c [65731.260462] [T32454] handlemmfault+0xf74/0x3fe0 [65731.260486] [T32454] domemabort+0x54c/0x1b34 [65731.260509] [T32454] el0da+0x44/0x94 [65731.260531] [T32454] el0t64synchandler+0x98/0xb4 [65731.260553] [T32454] el0t64sync+0x198/0x19c

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
9376130c390a76fac2788a5d6e1a149017b4ab50
Fixed
198a80833e3421d4c9820a4ae907120adf598c91
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
9376130c390a76fac2788a5d6e1a149017b4ab50
Fixed
c55d3564ad25ce87ab7cc6af251f9574faebd8da
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
9376130c390a76fac2788a5d6e1a149017b4ab50
Fixed
758678b65164b2158fc1de411092191cb3c394d4
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
9376130c390a76fac2788a5d6e1a149017b4ab50
Fixed
8e0545c83d672750632f46e3f9ad95c48c91a0fc

Affected versions

v5.*

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.80
v6.1.81
v6.1.82
v6.1.83
v6.1.84
v6.1.85
v6.1.86
v6.1.87
v6.1.88
v6.1.89
v6.1.9
v6.1.90
v6.1.91
v6.1.92
v6.1.93
v6.1.94
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.19
v6.6.2
v6.6.20
v6.6.21
v6.6.22
v6.6.23
v6.6.24
v6.6.25
v6.6.26
v6.6.27
v6.6.28
v6.6.29
v6.6.3
v6.6.30
v6.6.31
v6.6.32
v6.6.33
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.8
v6.8-rc1
v6.8-rc2
v6.8-rc3
v6.8-rc4
v6.8-rc5
v6.8-rc6
v6.8-rc7
v6.9
v6.9-rc1
v6.9-rc2
v6.9-rc3
v6.9-rc4
v6.9-rc5
v6.9-rc6
v6.9-rc7
v6.9.1
v6.9.2
v6.9.3
v6.9.4

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
5.17.0
Fixed
6.1.95
Type
ECOSYSTEM
Events
Introduced
6.2.0
Fixed
6.6.34
Type
ECOSYSTEM
Events
Introduced
6.7.0
Fixed
6.9.5