Re: [LTP] [PATCH]: Fix memory leak by freeing buf

Alexey Kodanev
2015-06-19T12:06:33Z

Hi!
On 06/19/2015 02:25 PM, Manjeet Pawar wrote:
> From: Manjeet Pawar <manjeet.p@samsung.com>
> Date: Fri, 19 Jun 2015 16:45:54 +0530
> Subject: [PATCH] testcases/open_posix_testsuite/functional/semaphores: Fix memory leak by freeing buf
>
> This patch fix memory leak by freeing memory leak before function return
>
> Signed-off-by: Manjeet Pawar <manjeet.p@samsung.com>
> Signed-off-by: Akhilesh Kumar <akhilesh.k@samsung.com>
> ---
> .../functional/semaphores/sem_conpro.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/testcases/open_posix_testsuite/functional/semaphores/sem_conpro.c b/testcases/open_posix_testsuite/functional/semaphores/sem_conpro.c
> index f5f1abf..f3a4cfb 100644
> --- a/testcases/open_posix_testsuite/functional/semaphores/sem_conpro.c
> +++ b/testcases/open_posix_testsuite/functional/semaphores/sem_conpro.c
> @@ -106,19 +106,23 @@ int main(int argc, char *argv[])
>
> #ifndef _POSIX_SEMAPHORES
> printf("_POSIX_SEMAPHORES is not defined \n");
> + free(buf);
> return PTS_UNRESOLVED;
> #endif
> if (-1 == sem_init(&(buf->occupied), shared, occupied_value)) {
> perror("sem_init didn't return success \n");
> printf("hello \n");
> + free(buf);
> return PTS_UNRESOLVED;
> }
> if (-1 == sem_init(&buf->empty, shared, empty_value)) {
> perror("sem_init didn't return success \n");
> + free(buf);
> return PTS_UNRESOLVED;
> }
> if (-1 == sem_init(&buf->lock, shared, lock_value)) {
> perror("sem_init didn't return success \n");
> + free(buf);
> return PTS_UNRESOLVED;
> }
> in = out = 0;
> @@ -129,5 +133,6 @@ int main(int argc, char *argv[])
> pthread_join(pro, NULL);
> sem_destroy(&buf->occupied);
> sem_destroy(&buf->empty);
> + free(buf);
> return PTS_PASS;
> }

The program terminating after free() so it will be freed in any case, I
don't see memory leak here.

I think the better change would be to check the return value from
malloc() (e.g. using SAFE_MALLOC) or allocate 'buf' on the stack.

Thanks,
Alexey