сб, 25 апр. 2026 г. в 12:48, [email protected] <[email protected]
>:

> On Sat, Apr 25, 2026 at 12:37:42PM +0200, Илья Шипицин wrote:
> > Subject: Re: [PATCH] BUG/MINOR: ssl_ckch: fix memory leak on realloc
> failure
> > сб, 25 апр. 2026 г. в 10:40, Willy Tarreau <[email protected]>:
> >
> > > On Sat, Apr 25, 2026 at 07:14:47AM +0000, Egor Shestakov wrote:
> > > > Hi Bianca!
> > > >
> > > > On Fri, Apr 24, 2026 at 11:04:03PM +0000, Bianca Dogareci wrote:
> > > > > Please find attached a patch fixing a memory leak when realloc()
> fails
> > > > > in ssl_ckch.c.
> > > >
> > > > > Fix three instances of the classic realloc() bug in ckchs_dup() and
> > > > > ckch_conf_parse() where overwriting the original pointer with NULL
> > > > > on allocation failure loses reference to the original memory block.
> > > > >
> > > > > Use temporary pointers to check realloc() result before updating
> > > > > the original pointer. This prevents memory leaks when realloc()
> > > > > fails.
> > > >
> > > > You're right about this, thanks!
> > > >
> > > > HAProxy has a my_realloc2() function that does the same thing but
> also
> > > > frees the original pointer on failure, to make the handling of
> failures
> > > of
> > > > realloc() simpler.
> > > >
> > > > Could please adjust your patch for my_realloc2?
> > >
> > > Indeed. There's a Coccinelle test to find them:
> > >
> > >     dev/coccinelle/realloc_leak.cocci
> > >
> >
> >
> > coccinelle looks a bit broken
> >
> >
> > $ spatch --sp-file dev/coccinelle/realloc_leak.cocci  src/hlua.c
> > init_defs_builtins: /usr/lib64/coccinelle/standard.h
> > HANDLING: src/hlua.c
> > SPECIAL NAMES: adding DECLARE_STATIC_TYPED_POOL as a declarer
> > SPECIAL NAMES: adding list_for_each_entry_from as a iterator
> > SPECIAL NAMES: adding list_for_each_entry as a iterator
> > SPECIAL NAMES: adding list_for_each_entry_safe as a iterator
> > diff =
> > --- src/hlua.c
> > +++ /tmp/cocci-output-1646809-b4de51-hlua.c
> > @@ -13509,7 +13509,6 @@ static int hlua_load_per_thread(char **a
> >         for (len = 0; per_thread_load[len] != NULL; len++)
> >                 ;
> >
> > -       per_thread_load = realloc(per_thread_load, (len + 2) *
> > sizeof(*per_thread_load));
> >         if (per_thread_load == NULL) {
> >                 memprintf(err, "out of memory error");
> >                 return -1;
> > @@ -14155,7 +14154,6 @@ static void *hlua_alloc(void *ud, void *
> >                 if (!nsize)
> >                         ha_free(&ptr);
> >                 else
> > -                       ptr = realloc(ptr, nsize);
> >                 return ptr;
> >         }
> >
> > @@ -14174,7 +14172,6 @@ static void *hlua_alloc(void *ud, void *
> >         if (!nsize)
> >                 ha_free(&ptr);
> >         else
> > -               ptr = realloc(ptr, nsize);
> >
> >         if (unlikely(!ptr && nsize)) // failed
> >                 _HA_ATOMIC_SUB(&zone->allocated, nsize - osize);
> >
> > $
> >
> >
> >
> > it recommends just to remove all "realloc" occurences :)
> > it looks like "realloc" is not welcome. maybe it is done in purpose, not
> > sure.
> > taking into account that strict behaviour, maybe we should get rid of
> > realloc completely.
> >
>
> It's not broken, the cocci file was made to find locations where the
> return value is assigned to the same variable as the one in parameter.
> This one
> was not made to patch the issue by itself.
>

some of realloc usages are ok, some are not.
if that script purpose is to find realloc, ok.


>
>
> --
> William Lallemand
>

Reply via email to