qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 4/4] linux-user: Fix error handling in target_to


From: Riku Voipio
Subject: Re: [Qemu-devel] [PATCH 4/4] linux-user: Fix error handling in target_to_host_semarray()
Date: Tue, 18 Feb 2014 17:10:07 +0200
User-agent: Mutt/1.5.20 (2009-06-14)

On Mon, Feb 17, 2014 at 06:55:34PM +0000, Peter Maydell wrote:
> Fix two issues in error handling in target_to_host_semarray():
>  * don't leak the host_array buffer if lock_user fails
>  * return an error if malloc() fails

With this patch I get on ubuntu raring x86_64 (gcc 4.7):

In function ‘target_to_host_semarray’,
    inlined from ‘do_semctl’ at 
/home/voipio/linaro/qemu/linux-user/syscall.c:2502:17,
    inlined from ‘do_syscall’ at 
/home/voipio/linaro/qemu/linux-user/syscall.c:6917:13:
/home/voipio/linaro/qemu/linux-user/syscall.c:2439:13: error: attempt to free a 
non-heap object ‘array’ [-Werror=free-nonheap-object]
cc1: all warnings being treated as errors

Other patches in the set seem fine so far (still testing)

> Signed-off-by: Peter Maydell <address@hidden>
> ---
>  linux-user/syscall.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index bb3e4b1..c92f026 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -2429,10 +2429,15 @@ static inline abi_long target_to_host_semarray(int 
> semid, unsigned short **host_
>      nsems = semid_ds.sem_nsems;
>  
>      *host_array = malloc(nsems*sizeof(unsigned short));
> +    if (!*host_array) {
> +        return -TARGET_ENOMEM;
> +    }
>      array = lock_user(VERIFY_READ, target_addr,
>                        nsems*sizeof(unsigned short), 1);
> -    if (!array)
> +    if (!array) {
> +        free(host_array);
>          return -TARGET_EFAULT;
> +    }
>  
>      for(i=0; i<nsems; i++) {
>          __get_user((*host_array)[i], &array[i]);
> -- 
> 1.8.5
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]