From: Muhammad Bilal <meatuni001@gmail.com>
To: jorge.lopez2@hp.com, hansg@kernel.org,
ilpo.jarvinen@linux.intel.com, linux@weissschuh.net
Cc: platform-driver-x86@vger.kernel.org,
linux-kernel@vger.kernel.org, stable@vger.kernel.org,
Muhammad Bilal <meatuni001@gmail.com>
Subject: [PATCH 1/2] platform/x86: hp-bioscfg: fix OOB read in hp_get_integer_from_buffer() on unaligned input
Date: Tue, 25 Aug 2026 03:56:09 +0500 [thread overview]
Message-ID: <20260824225610.18471-2-meatuni001@gmail.com> (raw)
In-Reply-To: <20260824225610.18471-1-meatuni001@gmail.com>
hp_get_integer_from_buffer() aligns the read pointer before dereferencing
it:
int *ptr = PTR_ALIGN((int *)*buffer, sizeof(int));
When *buffer is not 4-byte aligned, PTR_ALIGN() advances ptr forward by
1-3 bytes to reach the next aligned address. The bounds check that
follows does not account for that advance:
if (*buffer_size < sizeof(int))
return -EINVAL;
This only confirms 4 bytes remain from the original *buffer, not from
the aligned ptr. If *buffer is unaligned and *buffer_size is between 4
and (pad + 3) bytes, *(ptr++) reads up to 3 bytes past the end of the
buffer.
*buffer_size is also under-decremented on every call, aligned or not:
*buffer_size -= sizeof(int);
*buffer is advanced to the aligned, post-read position, but
*buffer_size only accounts for the 4 bytes of the integer itself, not
the alignment padding skipped to reach it. Each unaligned read leaves
*buffer_size overstating the true remaining space by the pad amount,
an error that compounds across repeated calls against the same buffer
(hp_get_common_data_from_buffer() calls this in a sequence), making
later bounds checks against *buffer_size progressively less reliable.
Compute the padding explicitly, check for it, and account for it when
advancing *buffer_size, so the pointer and the remaining-length count
stay consistent with each other.
Fixes: a34fc329b189 ("platform/x86: hp-bioscfg: bioscfg")
Cc: stable@vger.kernel.org
Signed-off-by: Muhammad Bilal <meatuni001@gmail.com>
---
drivers/platform/x86/hp/hp-bioscfg/bioscfg.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c b/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c
index 0edc6e7cfa9a..32b99a862082 100644
--- a/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c
+++ b/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c
@@ -39,14 +39,18 @@ struct kobj_attribute common_display_langcode =
int hp_get_integer_from_buffer(u8 **buffer, u32 *buffer_size, u32 *integer)
{
int *ptr = PTR_ALIGN((int *)*buffer, sizeof(int));
+ u32 pad = (u8 *)ptr - *buffer;
- /* Ensure there is enough space remaining to read the integer */
- if (*buffer_size < sizeof(int))
+ /*
+ * Ensure there is enough space remaining to read the integer,
+ * including any padding PTR_ALIGN() introduced to reach it.
+ */
+ if (*buffer_size < pad + sizeof(int))
return -EINVAL;
*integer = *(ptr++);
*buffer = (u8 *)ptr;
- *buffer_size -= sizeof(int);
+ *buffer_size -= pad + sizeof(int);
return 0;
}
--
2.55.0
next prev parent reply other threads:[~2026-08-24 22:56 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-24 22:56 [PATCH 0/2] platform/x86: hp-bioscfg: fix OOB reads and buffer desynchronization in buffer parsers Muhammad Bilal
2026-08-24 22:56 ` Muhammad Bilal [this message]
2026-09-18 13:54 ` [PATCH 1/2] platform/x86: hp-bioscfg: fix OOB read in hp_get_integer_from_buffer() on unaligned input Ilpo Järvinen
2026-08-24 22:56 ` [PATCH 2/2] platform/x86: hp-bioscfg: fix heap OOB read and buffer desync in hp_get_string_from_buffer() Muhammad Bilal
2026-09-18 14:17 ` Ilpo Järvinen
2026-09-19 5:56 ` Muhammad Bilal
2026-09-21 14:29 ` Ilpo Järvinen
2026-09-22 11:09 ` Muhammad Bilal
2026-09-22 11:51 ` Ilpo Järvinen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260824225610.18471-2-meatuni001@gmail.com \
--to=meatuni001@gmail.com \
--cc=hansg@kernel.org \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=jorge.lopez2@hp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@weissschuh.net \
--cc=platform-driver-x86@vger.kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.