[PATCH] linux-user/elfload.c: keep GNU0_MAGIC in host byte order

Michael Tokarev posted 1 patch 1 month, 3 weeks ago
linux-user/elfload.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] linux-user/elfload.c: keep GNU0_MAGIC in host byte order
Posted by Michael Tokarev 1 month, 3 weeks ago
Other places of this file operate in host byte order.  Only
this constant is defined as little-endian.  This does not
work, for example, on s390x host when running an arm64 binary:

 qemu-arm64: /usr/bin/busybox: Invalid note in PT_GNU_PROPERTY

This change is tested on all combinations of host/guest for
which debian provides release architectures, namely:

  amd64 arm64 armel armhf i386 mips64el ppc64el riscv64 s390x

Fixes: v5.1.0-2580-g83f990eb5adb "linux-user/elfload: Parse NT_GNU_PROPERTY_TYPE_0 notes"
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2596
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
---
 linux-user/elfload.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 0678c9d506..1c54c556fc 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -3028,7 +3028,7 @@ void probe_guest_base(const char *image_name, abi_ulong guest_loaddr,
 
 enum {
     /* The string "GNU\0" as a magic number. */
-    GNU0_MAGIC = const_le32('G' | 'N' << 8 | 'U' << 16),
+    GNU0_MAGIC = 'G' | 'N' << 8 | 'U' << 16,
     NOTE_DATA_SZ = 1 * KiB,
     NOTE_NAME_SZ = 4,
     ELF_GNU_PROPERTY_ALIGN = ELF_CLASS == ELFCLASS32 ? 4 : 8,
-- 
2.39.5
Re: [PATCH] linux-user/elfload.c: keep GNU0_MAGIC in host byte order
Posted by Laurent Vivier 1 month, 3 weeks ago
Le 02/10/2024 à 11:11, Michael Tokarev a écrit :
> Other places of this file operate in host byte order.  Only
> this constant is defined as little-endian.  This does not
> work, for example, on s390x host when running an arm64 binary:
> 
>   qemu-arm64: /usr/bin/busybox: Invalid note in PT_GNU_PROPERTY
> 
> This change is tested on all combinations of host/guest for
> which debian provides release architectures, namely:
> 
>    amd64 arm64 armel armhf i386 mips64el ppc64el riscv64 s390x
> 
> Fixes: v5.1.0-2580-g83f990eb5adb "linux-user/elfload: Parse NT_GNU_PROPERTY_TYPE_0 notes"
> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2596
> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
> ---
>   linux-user/elfload.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/linux-user/elfload.c b/linux-user/elfload.c
> index 0678c9d506..1c54c556fc 100644
> --- a/linux-user/elfload.c
> +++ b/linux-user/elfload.c
> @@ -3028,7 +3028,7 @@ void probe_guest_base(const char *image_name, abi_ulong guest_loaddr,
>   
>   enum {
>       /* The string "GNU\0" as a magic number. */
> -    GNU0_MAGIC = const_le32('G' | 'N' << 8 | 'U' << 16),
> +    GNU0_MAGIC = 'G' | 'N' << 8 | 'U' << 16,
>       NOTE_DATA_SZ = 1 * KiB,
>       NOTE_NAME_SZ = 4,
>       ELF_GNU_PROPERTY_ALIGN = ELF_CLASS == ELFCLASS32 ? 4 : 8,

Reviewed-by: Laurent Vivier <laurent@vivier.eu>

Thanks,
Laurent

Re: [PATCH] linux-user/elfload.c: keep GNU0_MAGIC in host byte order
Posted by Michael Tokarev 1 month, 3 weeks ago
02.10.2024 16:51, Laurent Vivier wrote:
> Le 02/10/2024 à 11:11, Michael Tokarev a écrit :
>> Other places of this file operate in host byte order.  Only
>> this constant is defined as little-endian.  This does not
>> work, for example, on s390x host when running an arm64 binary:
>>
>>   qemu-arm64: /usr/bin/busybox: Invalid note in PT_GNU_PROPERTY
>>
>> This change is tested on all combinations of host/guest for
>> which debian provides release architectures, namely:
>>
>>    amd64 arm64 armel armhf i386 mips64el ppc64el riscv64 s390x

Actually this is wrong.  The only architecture on debian where this
.note.gnu.property field is actually used is aarch64.  On all other
architectures, this code path is not tested.  But for aarch64 binary
I actually tested on all (host) architectures listed above.  I should
update the commit comment.

Thanks,

/mjt