Re: [PATCH] rpcdebug: Add proper free() to avoid memory leak

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



En, I also agree about that : )

Thanks,
- Chunyu

On Fri, Jul 28, 2017 at 12:54 AM, Steve Dickson <SteveD@xxxxxxxxxx> wrote:
>
>
> On 07/27/2017 12:06 PM, ChunYu Wang wrote:
>> Maybe we can not trust valgrind? Or I have just misunderstood what did
>> the valgrind report.
>>
>> As I have just added enough free(cdename) statements before exit,
>> valgrind will not report "still reachable" any more.
>>
>> Since I am not sure of whether this kind of report by valgrind should
>> be treated as potential leaks, please help me to judge!
> I thinking its a false positive... since all resources are released
> when a process exits. But by no means am I an expert at
> reading valgrind reports.
>
> Plus the mount of code churn would be horrible for something
> that is just not needed.
>
> steved.
>
>>
>> Thanks,
>> - Chunyu
>>
>> On Thu, Jul 27, 2017 at 10:48 PM, Steve Dickson <SteveD@xxxxxxxxxx> wrote:
>>>
>>>
>>> On 07/27/2017 03:59 AM, ChunYu Wang wrote:
>>>> rpcdebug.c use char* cdename to store program name:
>>>>
>>>>     cdename = malloc(strlen(basename(argv[0])));
>>>>     strcpy(cdename, basename(argv[0]));
>>>>
>>>> It is better to free before exit to avoid potential leaks.
>>> I guess I don't understand how memory can be leaked
>>> when a process is exiting... What am I missing?
>>>
>>> steved.
>>>>
>>>> Signed-off-by: ChunYu Wang <chunyu.wang.1995@xxxxxxxxx>
>>>> ---
>>>>  tools/rpcdebug/rpcdebug.c | 9 +++++++++
>>>>  1 file changed, 9 insertions(+)
>>>>
>>>> diff --git a/tools/rpcdebug/rpcdebug.c b/tools/rpcdebug/rpcdebug.c
>>>> index 68206cc..722ab4d 100644
>>>> --- a/tools/rpcdebug/rpcdebug.c
>>>> +++ b/tools/rpcdebug/rpcdebug.c
>>>> @@ -131,6 +131,7 @@ main(int argc, char **argv)
>>>>               print_flags(stdout, module, ~(unsigned int) 0, 1);
>>>>       }
>>>>
>>>> +     free(cdename);
>>>>       return 0;
>>>>  }
>>>>
>>>> @@ -221,6 +222,7 @@ find_flag(char **module, char *name)
>>>>                               "please specify the module name using\n"
>>>>                               "the -m option.\n",
>>>>                               cdename, name);
>>>> +                     free(cdename);
>>>>                       exit(1);
>>>>               }
>>>>               value = flagmap[i].value;
>>>> @@ -238,6 +240,7 @@ find_flag(char **module, char *name)
>>>>                       fprintf(stderr,
>>>>                               "%s: unknown flag %s\n",
>>>>                               cdename, name);
>>>> +             free(cdename);
>>>>               exit(1);
>>>>       }
>>>>
>>>> @@ -255,10 +258,12 @@ get_flags(char *module)
>>>>
>>>>       if ((sysfd = open(filename, O_RDONLY)) < 0) {
>>>>               perror(filename);
>>>> +             free(cdename);
>>>>               exit(1);
>>>>       }
>>>>       if ((len = read(sysfd, buffer, sizeof(buffer))) < 0) {
>>>>               perror("read");
>>>> +             free(cdename);
>>>>               exit(1);
>>>>       }
>>>>       close(sysfd);
>>>> @@ -278,14 +283,17 @@ set_flags(char *module, unsigned int value)
>>>>       len = sprintf(buffer, "%d", value);
>>>>       if ((sysfd = open(filename, O_WRONLY)) < 0) {
>>>>               perror(filename);
>>>> +             free(cdename);
>>>>               exit(1);
>>>>       }
>>>>       if ((ret = write(sysfd, buffer, len)) < 0) {
>>>>               perror("write");
>>>> +             free(cdename);
>>>>               exit(1);
>>>>       }
>>>>       if (ret < len) {
>>>>               fprintf(stderr, "error: short write in set_flags!\n");
>>>> +             free(cdename);
>>>>               exit(1);
>>>>       }
>>>>       close(sysfd);
>>>> @@ -359,6 +367,7 @@ usage(int excode, char *module)
>>>>         else
>>>>           fprintf(stderr, "       (use %s -vh to get a list of modules and valid flags)\n", cdename);
>>>>       }
>>>> +     free(cdename);
>>>>       exit (excode);
>>>>  }
>>>>
>>>>
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux