From: Pengpeng Hou <pengpeng@iscas.ac.cn>
To: Arend van Spriel <arend.vanspriel@broadcom.com>
Cc: Pengpeng Hou <pengpeng@iscas.ac.cn>,
linux-wireless@vger.kernel.org, brcm80211@lists.linux.dev,
brcm80211-dev-list.pdl@broadcom.com,
linux-kernel@vger.kernel.org
Subject: [PATCH] wifi: brcmfmac: bound NVRAM comment parsing
Date: Sun, 30 Aug 2026 21:53:28 +0800 [thread overview]
Message-ID: <20260830135328.12321-1-pengpeng@iscas.ac.cn> (raw)
The NVRAM parser tracks a length-bounded firmware blob but its comment
handler uses unbounded strchr() calls. A comment without a newline or NUL
inside the remaining blob can make the search read beyond the current
input.
Store the bounded input length and use memchr() for comment terminators.
Fixes: 3e99b08ab53c ("brcmfmac: enhance nvram processing")
Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
---
.../net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
index 22ff326f1924a..c68dee6d7b344 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
@@ -37,6 +37,7 @@ enum nvram_parser_state {
*
* @state: current parser state.
* @data: input buffer being parsed.
+ * @data_len: size of the input buffer.
* @nvram: output buffer with parse result.
* @nvram_len: length of parse result.
* @line: current line.
@@ -51,6 +52,7 @@ enum nvram_parser_state {
struct nvram_parser {
enum nvram_parser_state state;
const u8 *data;
+ u32 data_len;
u8 *nvram;
u32 nvram_len;
u32 line;
@@ -171,12 +173,15 @@ brcmf_nvram_handle_value(struct nvram_parser *nvp)
static enum nvram_parser_state
brcmf_nvram_handle_comment(struct nvram_parser *nvp)
{
- char *eoc, *sol;
+ char *eoc;
+ char *sol;
+ size_t remaining;
sol = (char *)&nvp->data[nvp->pos];
- eoc = strchr(sol, '\n');
+ remaining = nvp->data_len - nvp->pos;
+ eoc = memchr(sol, '\n', remaining);
if (!eoc) {
- eoc = strchr(sol, '\0');
+ eoc = memchr(sol, '\0', remaining);
if (!eoc)
return END;
}
@@ -215,6 +220,7 @@ static int brcmf_init_nvram_parser(struct nvram_parser *nvp,
size = BRCMF_FW_MAX_NVRAM_SIZE;
else
size = data_len;
+ nvp->data_len = size;
/* Add space for properties we may add */
size += strlen(BRCMF_FW_DEFAULT_BOARDREV) + 1;
size += BRCMF_FW_MACADDR_LEN + 1;
@@ -408,7 +414,7 @@ static void *brcmf_fw_nvram_strip(const u8 *data, size_t data_len,
if (eth_platform_get_mac_address(dev, mac) == 0)
nvp.strip_mac = true;
- while (nvp.pos < data_len) {
+ while (nvp.pos < nvp.data_len) {
nvp.state = nv_parser_states[nvp.state](&nvp);
if (nvp.state == END)
break;
base-commit: 08dbfad3f5040f5bdb6c529da20d6d4e81fefd72
--
2.50.1
reply other threads:[~2026-08-30 13:53 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20260830135328.12321-1-pengpeng@iscas.ac.cn \
--to=pengpeng@iscas.ac.cn \
--cc=arend.vanspriel@broadcom.com \
--cc=brcm80211-dev-list.pdl@broadcom.com \
--cc=brcm80211@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-wireless@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox