[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] linux-user: fix QEMU_STRACE=1 segfault
From: |
Alexander Graf |
Subject: |
Re: [Qemu-devel] [PATCH] linux-user: fix QEMU_STRACE=1 segfault |
Date: |
Sun, 20 Nov 2011 17:18:08 +0100 |
On 20.11.2011, at 16:31, Peter Maydell wrote:
> On 20 November 2011 12:06, Alexander Graf <address@hidden> wrote:
>> --- a/linux-user/syscall.c
>> +++ b/linux-user/syscall.c
>> @@ -711,6 +711,9 @@ static inline int host_to_target_errno(int err)
>>
>> static inline int target_to_host_errno(int err)
>> {
>> + if (err >= ERRNO_TABLE_SIZE) {
>> + return err;
>> + }
>> if (target_to_host_errno_table[err])
>> return target_to_host_errno_table[err];
>> return err;
>
> Really strace shouldn't be assuming all negative values
> are errnos: the code has a "print in one format for errnos,
> print in another if we're assuming it's an address", so we
> should have a way for the stracing code to be making the
> right "errno or not?" decision, so we can print these normal
> return values properly.
Yep. I don't want to have to trace segfaults when it goes wrong though :).
> Since target_to_host_errno() is only used by target_strerror()
> and target_strerror() is only used by the strace code we should
> just change its API to something easier for the strace code to
> use. How about having target_strerror() return NULL for "this
> doesn't look like an errno", and then the strace layer prints
> the plain address or "address (errno string)" accordingly?
I like that idea, yup.
> OTOH host_to_target_errno() could probably use a bounds check.
Maybe I'm too spoiled by JITed programming languages, but I really like it when
array accessor functions check for sanity. I don't mind if we assert() it
though, so the bug is easier to spot next time around.
Alex