]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
src: don't write to possible rodata location
authorFlorian Westphal <fw@strlen.de>
Mon, 4 May 2026 11:59:02 +0000 (13:59 +0200)
committerFlorian Westphal <fw@strlen.de>
Thu, 7 May 2026 22:07:04 +0000 (00:07 +0200)
seen with gcc-16.0.1:
src/libnftables.c: In function 'nft_ctx_add_var':
src/libnftables.c:153:27: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
153 |         char *separator = strchr(var, '=');

function arg says "const char *", write to this memory is not expected.

Signed-off-by: Florian Westphal <fw@strlen.de>
src/libnftables.c

index bc42c32de889a438f46315b59469ea322c8bf9a7..db9ee388adde506b6647d3da510e7019ede63013 100644 (file)
@@ -150,21 +150,27 @@ static void nft_exit(struct nft_ctx *ctx)
 EXPORT_SYMBOL(nft_ctx_add_var);
 int nft_ctx_add_var(struct nft_ctx *ctx, const char *var)
 {
-       char *separator = strchr(var, '=');
+       const char *separator = strchr(var, '=');
        int pcount = ctx->num_vars;
        struct nft_vars *tmp;
        const char *value;
+       size_t len;
+       char *key;
 
        if (!separator)
                return -1;
 
        tmp = xrealloc(ctx->vars, (pcount + 1) * sizeof(struct nft_vars));
 
-       *separator = '\0';
        value = separator + 1;
+       len = separator - var;
+
+       key = xmalloc(len + 1);
+       memcpy(key, var, len);
+       key[len] = '\0';
 
        ctx->vars = tmp;
-       ctx->vars[pcount].key = xstrdup(var);
+       ctx->vars[pcount].key = key;
        ctx->vars[pcount].value = xstrdup(value);
        ctx->num_vars++;