diff options
| author | Josh Law <objecting@objecting.org> | 2026-03-18 18:59:17 +0300 |
|---|---|---|
| committer | Masami Hiramatsu (Google) <mhiramat@kernel.org> | 2026-03-19 02:44:46 +0300 |
| commit | 0f2199904188abd5477a6517a9ce525bdc2dc01d (patch) | |
| tree | 4d1268e68813a34da3f2bfc48722b1b4c4008d8e /lib | |
| parent | 68f479de0e013d0c27432240f35bf2a3cc3260f6 (diff) | |
| download | linux-0f2199904188abd5477a6517a9ce525bdc2dc01d.tar.xz | |
lib/bootconfig: use signed type for offset in xbc_init_node()
lib/bootconfig.c:415:32: warning: conversion to 'long unsigned int'
from 'long int' may change the sign of the result [-Wsign-conversion]
Pointer subtraction yields ptrdiff_t (signed), which was stored in
unsigned long. The original unsigned type implicitly caught a negative
offset (data < xbc_data) because the wrapped value would exceed
XBC_DATA_MAX. Make this intent explicit by using a signed long and
adding an offset < 0 check to the WARN_ON condition.
Link: https://lore.kernel.org/all/20260318155919.78168-12-objecting@objecting.org/
Signed-off-by: Josh Law <objecting@objecting.org>
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/bootconfig.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/bootconfig.c b/lib/bootconfig.c index 9f059bb68e41..1f84748607b4 100644 --- a/lib/bootconfig.c +++ b/lib/bootconfig.c @@ -412,9 +412,9 @@ const char * __init xbc_node_find_next_key_value(struct xbc_node *root, static int __init xbc_init_node(struct xbc_node *node, char *data, uint16_t flag) { - unsigned long offset = data - xbc_data; + long offset = data - xbc_data; - if (WARN_ON(offset >= XBC_DATA_MAX)) + if (WARN_ON(offset < 0 || offset >= XBC_DATA_MAX)) return -EINVAL; node->data = (uint16_t)offset | flag; |
