CVE-2021-47497

nvmem: Fix shift-out-of-bound (UBSAN) with byte size cells

HIGH
7.8
CVSS Score
Published: May 22, 2024 at 08:19 AM UTC
Updated: June 17, 2026 at 04:17 AM UTC
1 product affected across 1 vendorLinux Kernel

Using Linux by Linux?

Get instant alerts when new vulnerabilities affect Linux - before attackers find them.

Real-time alertsTrack your software stackFree plan available
Severity
HIGH7.8
Exploit prediction
EPSS 0.2%
SSVC
No known exploit

Description

In the Linux kernel, the following vulnerability has been resolved: nvmem: Fix shift-out-of-bound (UBSAN) with byte size cells If a cell has 'nbits' equal to a multiple of BITS_PER_BYTE the logic *p &= GENMASK((cell->nbits%BITS_PER_BYTE) - 1, 0); will become undefined behavior because nbits modulo BITS_PER_BYTE is 0, and we subtract one from that making a large number that is then shifted more than the number of bits that fit into an unsigned long. UBSAN reports this problem: UBSAN: shift-out-of-bounds in drivers/nvmem/core.c:1386:8 shift exponent 64 is too large for 64-bit type 'unsigned long' CPU: 6 PID: 7 Comm: kworker/u16:0 Not tainted 5.15.0-rc3+ #9 Hardware name: Google Lazor (rev3+) with KB Backlight (DT) Workqueue: events_unbound deferred_probe_work_func Call trace: dump_backtrace+0x0/0x170 show_stack+0x24/0x30 dump_stack_lvl+0x64/0x7c dump_stack+0x18/0x38 ubsan_epilogue+0x10/0x54 __ubsan_handle_shift_out_of_bounds+0x180/0x194 __nvmem_cell_read+0x1ec/0x21c nvmem_cell_read+0x58/0x94 nvmem_cell_read_variable_common+0x4c/0xb0 nvmem_cell_read_variable_le_u32+0x40/0x100 a6xx_gpu_init+0x170/0x2f4 adreno_bind+0x174/0x284 component_bind_all+0xf0/0x264 msm_drm_bind+0x1d8/0x7a0 try_to_bring_up_master+0x164/0x1ac __component_add+0xbc/0x13c component_add+0x20/0x2c dp_display_probe+0x340/0x384 platform_probe+0xc0/0x100 really_probe+0x110/0x304 __driver_probe_device+0xb8/0x120 driver_probe_device+0x4c/0xfc __device_attach_driver+0xb0/0x128 bus_for_each_drv+0x90/0xdc __device_attach+0xc8/0x174 device_initial_probe+0x20/0x2c bus_probe_device+0x40/0xa4 deferred_probe_work_func+0x7c/0xb8 process_one_work+0x128/0x21c process_scheduled_works+0x40/0x54 worker_thread+0x1ec/0x2a8 kthread+0x138/0x158 ret_from_fork+0x10/0x20 Fix it by making sure there are any bits to mask out.

Affected

Our own answer: ranges merged, affected separated from platform-only, with confidence and review flags.

4.10 ≤ v < 4.14.2524.15 ≤ v < 4.19.2134.20 ≤ v < 5.4.1554.3 ≤ v < 4.14.2524.3 ≤ v < 4.19.2134.3 ≤ v < 4.4.2904.3 ≤ v < 4.9.2884.3 ≤ v < 5.10.754.3 ≤ v < 5.14.144.3 ≤ v < 5.154.3 ≤ v < 5.4.1554.5 ≤ v < 4.9.2885.11 ≤ v < 5.14.145.5 ≤ v < 5.10.754.35.15 rc15.15 rc25.15 rc35.15 rc45.15 rc569aba7948cbe53f2f1827e84e9dd0ae470a5072e
Vendor states this is fixed in 0594f1d048d8dc338eb9a240021b1d00ae1eb082 (fixed)
Vendor states this is fixed in 0e822e5413da1af28cca350cb1cb42b6133bdcae (fixed)
Vendor states this is fixed in 2df6c023050205c4d04ffc121bc549f65cb8d1df (fixed)
Vendor states this is fixed in 57e48886401b14cd351423fabfec2cfd18df4f66 (fixed)
Vendor states this is fixed in 5d388fa01fa6eb310ac023a363a6cb216d9d8fe9 (fixed)
Vendor states this is fixed in 60df06bbdf497e37ed25ad40572c362e5b0998df (fixed)
Vendor states this is fixed in abcb8d33e4d2215ccde5ab5ccf9f730a59d79d97 (fixed)
Vendor states this is fixed in eb0fc8e7170e61eaf65d28dee4a8baf4e86b19ca (fixed)
Vendor states this is fixed in 4.14.252 (unaffected)
Vendor states this is fixed in 4.19.213 (unaffected)
Vendor states this is fixed in 4.3 (unaffected)
Vendor states this is fixed in 4.4.290 (unaffected)
Vendor states this is fixed in 4.9.288 (unaffected)
Vendor states this is fixed in 5.10.75 (unaffected)
Vendor states this is fixed in 5.14.14 (unaffected)
Vendor states this is fixed in 5.15 (unaffected)
Vendor states this is fixed in 5.4.155 (unaffected)

References (8)

Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/0594f1d048d8dc338eb9a240021b1d00ae1eb082
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/0e822e5413da1af28cca350cb1cb42b6133bdcae
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/2df6c023050205c4d04ffc121bc549f65cb8d1df
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/57e48886401b14cd351423fabfec2cfd18df4f66
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/5d388fa01fa6eb310ac023a363a6cb216d9d8fe9
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/60df06bbdf497e37ed25ad40572c362e5b0998df
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/abcb8d33e4d2215ccde5ab5ccf9f730a59d79d97
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/eb0fc8e7170e61eaf65d28dee4a8baf4e86b19ca

SSVC — Action Prioritization

SSVCNo known exploitNot automatablePartial impact

SSVC signals action urgency (what to patch first), separate from CVSS which measures severity.

CVSS

Attack Vector
LOCAL
Complexity
LOW
Privileges
LOW
User Interaction
NONE
Scope
UNCHANGED
Confidentiality
HIGH
Integrity
HIGH
Availability
HIGH
Vector?

Quick Info

StatusANALYZED
CWE
CWE-787

Get alerted

Stop reading CVE feeds looking for your own stack

Track the products you run and VulnTracker tells you when a new CVE affects them — with what is known about fixing it, and nothing about the rest.

Free plan, no card