[PATCH] netifd: fix const-correctness for glibc 2.43 strchr/strstr
Dustin Lundquist
dustin at null-ptr.net
Tue Jun 2 12:39:43 PDT 2026
glibc 2.43 enables _ISOC23_SOURCE via _GNU_SOURCE, activating
type-generic macros for strchr/strstr that return const char *
when given a const char * input, surfacing const violations as
hard compile errors.
handler.c: attrs[i].name is typed const char * by libubox's struct,
but points into a locally malloc'd buffer. Use an explicit cast to
char * so the separator can be overwritten in place.
iprule.c: iprule_parse_mark() declared its parameter const but
overwrites the '/' separator in place via the strchr result. The
caller passes blobmsg_data() which is a mutable buffer, so drop
the const qualifier from the parameter.
system-linux.c: the local variable receiving strstr() in
system_add_devtype() is only read after assignment; change it from
char * to const char * to match the const char * input.
Signed-off-by: Dustin Lundquist <dustin at null-ptr.net>
---
handler.c | 2 +-
iprule.c | 2 +-
system-linux.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/handler.c b/handler.c
index 78fc9a0..ba12172 100644
--- a/handler.c
+++ b/handler.c
@@ -312,7 +312,7 @@ netifd_handler_parse_config(struct uci_blob_param_list *config, json_object *obj
attrs[i].name = str_cur;
str_cur += sprintf(str_cur, "%s", name) + 1;
- delim = strchr(attrs[i].name, ':');
+ delim = (char *)strchr(attrs[i].name, ':');
if (delim) {
*delim = '\0';
validate[i] = ++delim;
diff --git a/iprule.c b/iprule.c
index 1fedac6..4a040d1 100644
--- a/iprule.c
+++ b/iprule.c
@@ -91,7 +91,7 @@ rule_ready(struct iprule *rule)
}
static bool
-iprule_parse_mark(const char *mark, struct iprule *rule)
+iprule_parse_mark(char *mark, struct iprule *rule)
{
char *s, *e;
unsigned int n;
diff --git a/system-linux.c b/system-linux.c
index 8ff44a3..1dc18b5 100644
--- a/system-linux.c
+++ b/system-linux.c
@@ -3162,7 +3162,7 @@ system_add_devtype(struct blob_buf *b, const char *ifname)
const char *line = strtok_r(buf, "\r\n", &context);
while (line != NULL) {
- char *index = strstr(line, info);
+ const char *index = strstr(line, info);
if (index != NULL) {
blobmsg_add_string(b, "devtype", index + strlen(info));
More information about the openwrt-devel
mailing list