diff --git a/libs/libc/obstack/lib_obstack_free.c b/libs/libc/obstack/lib_obstack_free.c index 751d471c75c..229bb3f1e96 100644 --- a/libs/libc/obstack/lib_obstack_free.c +++ b/libs/libc/obstack/lib_obstack_free.c @@ -53,9 +53,13 @@ void obstack_free(FAR struct obstack *h, FAR void *object) while (h->chunk) { - if (object >= - (FAR void *)((FAR char *)&h->chunk + sizeof(struct _obstack_chunk)) - && object < (FAR void *)h->chunk->limit) + /* Object has to be after chunk + chunk' header. We can use pointer + * arithmetic here as h->chunk + 1 is the same as + * (FAR char *)h->chunk + sizeof(struct _obstack_chunk) + */ + + if (object >= (FAR void *)(h->chunk + 1) + && object <= (FAR void *)h->chunk->limit) { /* The object is in this chunk so just move object base. * Note: this keeps the last chunk allocated. This is desirable