On Fri, Mar 11, 2022 at 4:54 PM HAGIO KAZUHITO(萩尾 一仁) <[email protected]>
wrote:

> Hi Lianbo,
>
> -----Original Message-----
> > This reminds me, if parse_line() or dump_struct_member() fails, is there
> a potential risk of memory leaks
> > in the dump_struct_members()?
> >
> > file: sbitmap.c
> > 432 static void dump_struct_members(const char *s, ulong addr, unsigned
> radix)
> > 433 {
> > 434         int i, argc;
> > 435         char *p1, *p2;
> > 436         char *structname, *members;
> > 437         char *arglist[MAXARGS];
> > 438
> > 439         structname = GETBUF(strlen(s) + 1);
> > 440         members = GETBUF(strlen(s) + 1);
> > 441
> > 442         strcpy(structname, s);
> > 443         p1 = strstr(structname, ".") + 1;
> > 444
> > 445         p2 = strstr(s, ".") + 1;
> > 446         strcpy(members, p2);
> > 447         replace_string(members, ",", ' ');
> > 448         argc = parse_line(members, arglist);
> > 449
> > 450         for (i = 0; i < argc; i++) {
> > 451                 *p1 = NULLCHAR;
> > 452                 strcat(structname, arglist[i]);
> > 453                 dump_struct_member(structname, addr, radix);
> > 454         }
> > 455
> > 456         FREEBUF(structname);
> > 457         FREEBUF(members);
> > 458 }
> >
> >
> > I noticed that the parse_line() has a return value, but the
> dump_struct_member() has no return value, is
> > there a good way to avoid the potential risks? Or leave it there?
> >
> > BTW: I saw the similar issues in tools.c
>
> um, the fact is, all buffers that GETBUF() allocates will be freed
> automatically
> after the last command execution in free_all_bufs():
>
> main_loop
>   while (TRUE) {
>     process_command_line
>       restore_sanity
>         free_all_bufs <<--
>     exec_command
>   }
>
> so to free all buffers is better coding practice and has several pros if
> you can,
> but it's not necessary to work too hard for it.
>

OK, let's leave it there.  The other changes look good to me. Thanks.

For the patchset:
Acked-by: Lianbo Jiang <[email protected]>


> Thanks,
> Kazu
>
>
> >
> > Thanks.
> > Lianbo
> >
> >
> >       @@ -272,7 +272,7 @@ static void __sbitmap_for_each_set(const
> struct sbitmap_context *sc,
> >                               if (nr >= depth)
> >                                       break;
> >                               if (!fn((index << sc->shift) + nr, data))
> >       -                               return;
> >       +                               goto exit;
> >
> >                               nr++;
> >                       }
> >       @@ -282,6 +282,7 @@ next:
> >                               index = 0;
> >               }
> >
> >       +exit:
> >               FREEBUF(sbitmap_word_buf);
> >        }
> >
> >       --
> >       2.25.1
> >
>
>
--
Crash-utility mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/crash-utility
Contribution Guidelines: https://github.com/crash-utility/crash/wiki

Reply via email to