summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJosh Law <objecting@objecting.org>2026-03-18 18:59:17 +0300
committerMasami Hiramatsu (Google) <mhiramat@kernel.org>2026-03-19 02:44:46 +0300
commit0f2199904188abd5477a6517a9ce525bdc2dc01d (patch)
tree4d1268e68813a34da3f2bfc48722b1b4c4008d8e /lib
parent68f479de0e013d0c27432240f35bf2a3cc3260f6 (diff)
downloadlinux-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.c4
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;