qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH V2] linux-user: fix QEMU_STRACE=1 segfault


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH V2] linux-user: fix QEMU_STRACE=1 segfault
Date: Mon, 21 Nov 2011 10:47:03 +0000

On 21 November 2011 10:40, Alexander Graf <address@hidden> wrote:
> diff --git a/linux-user/strace.c b/linux-user/strace.c
> index 90027a1..e30b005 100644
> --- a/linux-user/strace.c
> +++ b/linux-user/strace.c
> @@ -1515,14 +1515,19 @@ void
>  print_syscall_ret(int num, abi_long ret)
>  {
>     int i;
> +    char *errstr = NULL;
>
>     for(i=0;i<nsyscalls;i++)
>         if( scnames[i].nr == num ) {
>             if( scnames[i].result != NULL ) {
>                 scnames[i].result(&scnames[i],ret);
>             } else {
> -                if( ret < 0 ) {
> -                    gemu_log(" = -1 errno=" TARGET_ABI_FMT_ld " (%s)\n", 
> -ret, target_strerror(-ret));
> +                if (ret < 0) {
> +                    errstr = target_strerror(-ret);
> +                }
> +                if (errstr) {
> +                    gemu_log(" = -1 errno=" TARGET_ABI_FMT_ld " (%s)\n",
> +                             -ret, errstr);

Should this really be printing -1 all the time when ret isn't -1 ?

>                 } else {
>                     gemu_log(" = " TARGET_ABI_FMT_ld "\n", ret);
>                 }

print_syscall_ret_addr() also needs to handle NULL
returns from target_strerror().

> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index f227097..c59d00e 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -731,6 +731,9 @@ static inline int is_error(abi_long ret)
>
>  char *target_strerror(int err)
>  {
> +    if ((err >= ERRNO_TABLE_SIZE) && (err >= 0)) {
> +        return NULL;
> +    }
>     return strerror(target_to_host_errno(err));

shouldn't that be ((err >= ERRNO_TABLE_SIZE) || (err < 0)) ?

-- PMM



reply via email to

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