From: Josh Law <objecting@objecting.org>
To: Masami Hiramatsu <mhiramat@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>
Cc: linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org,
Josh Law <objecting@objecting.org>
Subject: [PATCH v3 00/17] bootconfig: fixes, cleanups, and modernization
Date: Sat, 14 Mar 2026 22:34:08 +0000 [thread overview]
Message-ID: <20260314223425.142966-1-objecting@objecting.org> (raw)
This series addresses a collection of issues found during a review of
lib/bootconfig.c, include/linux/bootconfig.h, and tools/bootconfig,
ranging from off-by-one errors and unchecked return values to coding
style and API modernization.
Changes since v2:
- Added "validate child node index in xbc_verify_tree()" —
xbc_verify_tree() validated next-node indices but not child indices;
an out-of-bounds child would cause xbc_node_get_child() to access
memory beyond the xbc_nodes array (patch 15).
- Added "check xbc_init_node() return in override path" — the ':='
override path in xbc_parse_kv() ignored xbc_init_node()'s return
value, silently continuing with stale node data on failure
(patch 16).
- Added "fix fd leak in load_xbc_file() on fstat failure" — if
fstat() failed after open() succeeded, the file descriptor was
leaked (patch 17).
Changes since v1:
- Dropped "return empty string instead of NULL from
xbc_node_get_data()" — returning "" causes false matches in
xbc_node_match_prefix() because strncmp(..., "", 0) always
returns 0.
Bug fixes:
- Fix off-by-one in xbc_verify_tree() where a next-node index equal
to xbc_node_num passes the bounds check despite being out of range
(patch 8).
- Move xbc_node_num increment to after xbc_init_node() validation
so a failed init does not leave a partially initialized node
counted in the array (patch 9).
- Validate child node indices in xbc_verify_tree() alongside the
existing next-node check (patch 15).
- Check xbc_init_node() return value in the ':=' override path
to avoid silently continuing with stale data (patch 16).
- Fix file descriptor leak in tools/bootconfig load_xbc_file()
when fstat() fails (patch 17).
Correctness:
- Add missing __init annotations to skip_comment() and
skip_spaces_until_newline() so their memory can be reclaimed
after init (patch 1).
- Narrow the flag parameter in node creation helpers from uint32_t
to uint16_t to match the xbc_node.data field width (patch 6).
- Constify the xbc_calc_checksum() data parameter since it only
reads the buffer (patch 12).
Cleanups:
- Fix comment typos (patches 2-3), missing blank line before
kerneldoc (patch 4), inconsistent if/else bracing (patches 5, 7).
- Drop redundant memset after memblock_alloc which already returns
zeroed memory; switch the userspace path from malloc to calloc
to match (patch 10).
Modernization:
- Replace open-coded __attribute__((__packed__)) with the __packed
macro, adding the definition to the tools/bootconfig shim header
(patches 11, 14).
- Replace the catch-all linux/kernel.h include with the specific
headers needed: linux/cache.h, linux/compiler.h, and
linux/sprintf.h (patch 13).
Build-tested with both the in-kernel build (lib/bootconfig.o,
init/main.o) and the userspace tools/bootconfig build. All 70
tools/bootconfig test cases pass.
Josh Law (17):
lib/bootconfig: add missing __init annotations to static helpers
lib/bootconfig: fix typo "initiized" in xbc_root_node() kerneldoc
lib/bootconfig: fix typo "uder" in xbc_node_find_next_leaf()
lib/bootconfig: add blank line before xbc_get_info() kerneldoc
lib/bootconfig: fix inconsistent if/else bracing
lib/bootconfig: narrow flag parameter type from uint32_t to uint16_t
lib/bootconfig: fix inconsistent if/else bracing in __xbc_add_key()
lib/bootconfig: fix off-by-one in xbc_verify_tree() next node check
lib/bootconfig: increment xbc_node_num after node init succeeds
lib/bootconfig: drop redundant memset of xbc_nodes
bootconfig: use __packed macro for struct xbc_node
bootconfig: constify xbc_calc_checksum() data parameter
lib/bootconfig: replace linux/kernel.h with specific includes
bootconfig: add __packed definition to tools/bootconfig shim header
lib/bootconfig: validate child node index in xbc_verify_tree()
lib/bootconfig: check xbc_init_node() return in override path
tools/bootconfig: fix fd leak in load_xbc_file() on fstat failure
include/linux/bootconfig.h | 6 +--
lib/bootconfig.c | 54 ++++++++++++---------
tools/bootconfig/include/linux/bootconfig.h | 1 +
tools/bootconfig/main.c | 4 +-
4 files changed, 39 insertions(+), 26 deletions(-)
--
2.34.1
next reply other threads:[~2026-03-14 22:34 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-14 22:34 Josh Law [this message]
2026-03-14 22:34 ` [PATCH v3 01/17] lib/bootconfig: add missing __init annotations to static helpers Josh Law
2026-03-14 22:34 ` [PATCH v3 02/17] lib/bootconfig: fix typo "initiized" in xbc_root_node() kerneldoc Josh Law
2026-03-14 22:34 ` [PATCH v3 03/17] lib/bootconfig: fix typo "uder" in xbc_node_find_next_leaf() Josh Law
2026-03-14 22:34 ` [PATCH v3 04/17] lib/bootconfig: add blank line before xbc_get_info() kerneldoc Josh Law
2026-03-14 22:34 ` [PATCH v3 05/17] lib/bootconfig: fix inconsistent if/else bracing Josh Law
2026-03-14 22:34 ` [PATCH v3 06/17] lib/bootconfig: narrow flag parameter type from uint32_t to uint16_t Josh Law
2026-03-14 22:34 ` [PATCH v3 07/17] lib/bootconfig: fix inconsistent if/else bracing in __xbc_add_key() Josh Law
2026-03-14 22:34 ` [PATCH v3 08/17] lib/bootconfig: fix off-by-one in xbc_verify_tree() next node check Josh Law
2026-03-14 22:34 ` [PATCH v3 09/17] lib/bootconfig: increment xbc_node_num after node init succeeds Josh Law
2026-03-14 22:34 ` [PATCH v3 10/17] lib/bootconfig: drop redundant memset of xbc_nodes Josh Law
2026-03-14 22:34 ` [PATCH v3 11/17] bootconfig: use __packed macro for struct xbc_node Josh Law
2026-03-14 22:34 ` [PATCH v3 12/17] bootconfig: constify xbc_calc_checksum() data parameter Josh Law
2026-03-14 22:34 ` [PATCH v3 13/17] lib/bootconfig: replace linux/kernel.h with specific includes Josh Law
2026-03-14 22:34 ` [PATCH v3 14/17] bootconfig: add __packed definition to tools/bootconfig shim header Josh Law
2026-03-14 22:34 ` [PATCH v3 15/17] lib/bootconfig: validate child node index in xbc_verify_tree() Josh Law
2026-03-14 22:34 ` [PATCH v3 16/17] lib/bootconfig: check xbc_init_node() return in override path Josh Law
2026-03-14 22:34 ` [PATCH v3 17/17] tools/bootconfig: fix fd leak in load_xbc_file() on fstat failure Josh Law
2026-03-16 12:15 ` Markus Elfring
2026-03-16 15:14 ` Josh Law
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=20260314223425.142966-1-objecting@objecting.org \
--to=objecting@objecting.org \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mhiramat@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.