[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH for-1.4] linux-user: Restore cast to target type
From: |
Peter Maydell |
Subject: |
Re: [Qemu-devel] [PATCH for-1.4] linux-user: Restore cast to target type in get_user() |
Date: |
Tue, 5 Feb 2013 20:18:46 +0000 |
Ping as a for-1.4 patch with reviews.
patchwork url: http://patchwork.ozlabs.org/patch/217186/
Blue, Anthony: could one of you apply this, please?
thanks
-- PMM
On 31 January 2013 12:50, Peter Maydell <address@hidden> wrote:
> Commit 658f2dc97 accidentally dropped the cast to the target type of
> the value loaded by get_user(). The most visible effect of this would
> be that the sequence "uint64_t v; get_user_u32(v, addr)" would sign
> extend the 32 bit loaded value into v rather than zero extending as
> would be expected for a _u32 accessor. Put the cast back again to
> restore the old behaviour.
>
> Signed-off-by: Peter Maydell <address@hidden>
> ---
> linux-user/qemu.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/linux-user/qemu.h b/linux-user/qemu.h
> index 31a220a..b10e957 100644
> --- a/linux-user/qemu.h
> +++ b/linux-user/qemu.h
> @@ -306,12 +306,12 @@ static inline int access_ok(int type, abi_ulong addr,
> abi_ulong size)
> ((hptr), (x)), 0)
>
> #define __get_user_e(x, hptr, e) \
> - ((x) = \
> + ((x) = (typeof(*hptr))( \
> __builtin_choose_expr(sizeof(*(hptr)) == 1, ldub_p, \
> __builtin_choose_expr(sizeof(*(hptr)) == 2, lduw_##e##_p, \
> __builtin_choose_expr(sizeof(*(hptr)) == 4, ldl_##e##_p, \
> __builtin_choose_expr(sizeof(*(hptr)) == 8, ldq_##e##_p, abort)))) \
> - (hptr), 0)
> + (hptr)), 0)
>
> #ifdef TARGET_WORDS_BIGENDIAN
> # define __put_user(x, hptr) __put_user_e(x, hptr, be)
> --
> 1.7.9.5
- Re: [Qemu-devel] [PATCH for-1.4] linux-user: Restore cast to target type in get_user(),
Peter Maydell <=