[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#45716: gnu: qemu: Fix ioclt(…, SIOCGIFCONF, …) for emulated 64 bit
From: |
Ludovic Courtès |
Subject: |
bug#45716: gnu: qemu: Fix ioclt(…, SIOCGIFCONF, …) for emulated 64 bit architectures. |
Date: |
Mon, 11 Jan 2021 14:28:21 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) |
Hi Stefan,
Stefan <stefan-guix@vodafonemail.de> skribis:
> * gnu/packages/virtualization.scm (qemu): Add a snippet to fix a bug in the
> do_ioctl_ifconf() function of qemu to make ioclt(…, SIOCGIFCONF, …) work for
> emulated 64 bit architectures.
>
> The sizeof(struct ifreq) is 40 for 64 bit and 32 for 32 bit architectures.
> This structure contains a union of other structures, of which struct ifmap
> is the biggest for 64 bit architectures. Calling ioclt(…, SIOCGIFCONF, …)
> fills a struct sockaddr of that union, and do_ioctl_ifconf() only considered
> that struct sockaddr for the size of the union, which has the same size as
> struct ifmap on 32 bit architectures. So do_ioctl_ifconf() assumed a wrong
> size of 32 for struct ifreq instead of the correct size of 40 on 64 bit
> architectures.
>
> The fix makes do_ioctl_ifconf() handle struct ifmap as the biggest part of
> the union, treating struct ifreq with the correct size.
>
> This fixes (@ (guix build syscalls) network-interface-names) when used in
> emulated 64 bit architectures.
Woow, good catch!
> + (modules '((guix build utils)))
> + (snippet
> + '(begin
> + (substitute* '("linux-user/syscall.c")
> + (("^([[:blank:]]*)const argtype ifreq_arg_type.*$" line
> indent)
> + (string-append line indent
> + "const argtype ifreq_max_type[] = {
> MK_STRUCT(STRUCT_ifmap_ifreq) };\n"))
> + (("^([[:blank:]]*)target_ifreq_size[[:blank:]]=.*$" _
> indent)
> + (string-append indent "target_ifreq_size =
> thunk_type_size(ifreq_max_type, 0);")))
> + #t))))
Could you move the explanation as a comment above the ‘substitute*’
form, and/or link to the upstream bug report/discussion/submission?
Thank you!
Ludo’.
- bug#45716: Bug in ‘network-interface-names’ when building guix for aarch64 on x86_64., Stefan, 2021/01/07
- bug#45716: Bug in ‘network-interface-names’ when building guix for aarch64 on x86_64., Stefan, 2021/01/07
- bug#45716: Bug in ‘network-interface-names’ when building guix for aarch64 on x86_64., Danny Milosavljevic, 2021/01/07
- bug#45716: Bug in ‘network-interface-names’ when building guix for aarch64 on x86_64., Stefan, 2021/01/08
- bug#45716: Bug in ‘network-interface-names’ when building guix for aarch64 on x86_64., Stefan, 2021/01/08
- bug#45716: Bug in ‘network-interface-names’ when building guix for aarch64 on x86_64., Stefan, 2021/01/08
- bug#45716: gnu: qemu: Fix ioclt(…, SIOCGIFCONF, …) for emulated 64 bit architectures., Stefan, 2021/01/09
- bug#45716: gnu: qemu: Fix ioclt(…, SIOCGIFCONF, …) for emulated 64 bit architectures.,
Ludovic Courtès <=
- bug#45716: [PATCH 1/1] gnu: qemu: Fix ioclt(…, SIOCGIFCONF, …) for emulated 64 bit architectures., Stefan, 2021/01/11
- bug#45716: [PATCH 1/1] gnu: qemu: Fix ioclt(…, SIOCGIFCONF, …) for emulated 64 bit architectures., Ludovic Courtès, 2021/01/14
- bug#45716: Bug in ‘network-interface-names’ when building guix for aarch64 on x86_64., Stefan, 2021/01/23
- bug#45716: Bug in ‘network-interface-names’ when building guix for aarch64 on x86_64., Leo Famulari, 2021/01/23
- bug#45716: Bug in ‘network-interface-names’ when building guix for aarch64 on x86_64., Ludovic Courtès, 2021/01/11