From 55d146432fa8c962765e6dc272ef06cafb8d5414 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Tue, 10 Feb 2026 18:10:15 -0800 Subject: [PATCH] nvram: use flex array Clarifies that the struct needs to be over allocated. Signed-off-by: Rosen Penev Link: https://github.com/openwrt/openwrt/pull/22370 Signed-off-by: Jonas Jelonek --- package/utils/nvram/src/nvram.c | 5 ++--- package/utils/nvram/src/nvram.h | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package/utils/nvram/src/nvram.c b/package/utils/nvram/src/nvram.c index d5e12ee69a3..21f3e39fc87 100644 --- a/package/utils/nvram/src/nvram.c +++ b/package/utils/nvram/src/nvram.c @@ -77,7 +77,6 @@ static nvram_tuple_t * _nvram_realloc( nvram_handle_t *h, nvram_tuple_t *t, return NULL; /* Copy name */ - t->name = (char *) &t[1]; strcpy(t->name, name); t->value = NULL; @@ -242,9 +241,9 @@ nvram_tuple_t * nvram_getall(nvram_handle_t *h) for (i = 0; i < NVRAM_ARRAYSIZE(h->nvram_hash); i++) { for (t = h->nvram_hash[i]; t; t = t->next) { - if( (x = (nvram_tuple_t *) malloc(sizeof(nvram_tuple_t))) != NULL ) + if( (x = malloc(sizeof(*x) + strlen(t->name) + 1)) != NULL ) { - x->name = t->name; + strcpy(x->name, t->name); x->value = t->value; x->next = l; l = x; diff --git a/package/utils/nvram/src/nvram.h b/package/utils/nvram/src/nvram.h index 724f33b8114..d015725244a 100644 --- a/package/utils/nvram/src/nvram.h +++ b/package/utils/nvram/src/nvram.h @@ -38,9 +38,9 @@ struct nvram_header { } __attribute__((__packed__)); struct nvram_tuple { - char *name; char *value; struct nvram_tuple *next; + char name[]; }; struct nvram_handle {