Description
In the Linux kernel, the following vulnerability has been resolved: platform/x86: hp-bioscfg: fix heap OOB read on empty password write validate_password_input() computes length = strlen(buf) and then checks buf[length - 1] to strip a trailing newline, without checking that length is nonzero first. Writing an empty string (a bare '\n') to current_password or new_password gives length == 0, and buf[length - 1] reads buf[-1], one byte before the heap allocation holding the copied input. KASAN confirms this directly: BUG: KASAN: slab-out-of-bounds in store_password_instance.constprop.0+0x223/0x2a0 [hp_bioscfg] Read of size 1 at addr ffff88811bd8da9f by task sh/13740 ... store_password_instance.constprop.0+0x223/0x2a0 [hp_bioscfg] current_password_store+0x14/0x20 [hp_bioscfg] ... The buggy address is located 23 bytes to the right of allocated 8-byte region [ffff88811bd8da80, ffff88811bd8da88) Reproduced identically via new_password_store. Execution continues past the bad read (the garbage byte only affects whether "length" is decremented by one), so the write completes and returns success; this is a pure information read past the buffer, not a crash, but it is still an out-of-bounds access KASAN correctly flags. Fix by only checking buf[length - 1] when length is nonzero.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
8646a3b5ee3a5b384a22a721f37c24274d974045 to < 21243c15e1d31f0df1517435e3a7784747f19043affected8646a3b5ee3a5b384a22a721f37c24274d974045 to < cecb8154bd5fa6c8ddbd1a4e8216bbc0f0eb9828affected8646a3b5ee3a5b384a22a721f37c24274d974045 to < 0f9aad08424882dd5714b53d29ae044060890752affected8646a3b5ee3a5b384a22a721f37c24274d974045 to < b699e5c1f63a9e79946c35598c8a6f7af2c356b8affected8646a3b5ee3a5b384a22a721f37c24274d974045 to < 2b2ec354f905c14e3270e8ec3ab50f7d8ad73babaffected
Linux Linux
Default version status: affected
6.6affected0 to < 6.6unaffected6.6.157 to ≤ 6.6.*unaffected6.12.109 to ≤ 6.12.*unaffected6.18.50 to ≤ 6.18.*unaffected7.2.4 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/21243c15e1d31f0df1517435e3a7784747f19043 ↗
- https://git.kernel.org/stable/c/cecb8154bd5fa6c8ddbd1a4e8216bbc0f0eb9828 ↗
- https://git.kernel.org/stable/c/0f9aad08424882dd5714b53d29ae044060890752 ↗
- https://git.kernel.org/stable/c/b699e5c1f63a9e79946c35598c8a6f7af2c356b8 ↗
- https://git.kernel.org/stable/c/2b2ec354f905c14e3270e8ec3ab50f7d8ad73bab ↗