[PULL 00/14] Linux user for 5.2 patches

Laurent Vivier posted 14 patches 3 years, 8 months ago
Test docker-quick@centos7 passed
Test docker-mingw@fedora passed
Test checkpatch passed
Test FreeBSD passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20200813064923.263565-1-laurent@vivier.eu
Maintainers: Laurent Vivier <laurent@vivier.eu>
There is a newer version of this series
configure                  |   9 ++
linux-user/ioctls.h        | 124 ++++++++++++++++++++++++
linux-user/mmap.c          | 110 ++++++++++++++-------
linux-user/strace.c        |   8 +-
linux-user/syscall.c       | 193 +++++++++++++++++++++++++++++++------
linux-user/syscall_defs.h  |  42 ++++++++
linux-user/syscall_types.h | 140 +++++++++++++++++++++++++++
7 files changed, 563 insertions(+), 63 deletions(-)
[PULL 00/14] Linux user for 5.2 patches
Posted by Laurent Vivier 3 years, 8 months ago
The following changes since commit d0ed6a69d399ae193959225cdeaa9382746c91cc:

  Update version for v5.1.0 release (2020-08-11 17:07:03 +0100)

are available in the Git repository at:

  git://github.com/vivier/qemu.git tags/linux-user-for-5.2-pull-request

for you to fetch changes up to 04275cad60c8f99e0dd7f56aecda68ceac926da8:

  linux-user: Fix 'utimensat()' implementation (2020-08-12 10:09:58 +0200)

----------------------------------------------------------------
Add btrfs ioctls
Add clock_getres_time64, timer_gettime64, timer_settime64,
    timerfd_gettime64, timerfd_settime64
Some fixes (page protection, print_fdset, timerspec, itimerspec)

----------------------------------------------------------------

Filip Bozuta (12):
  linux-user: Fix "print_fdset()" in "strace.c" to not print ", " after
    last value
  linux-user: Modify 'target_to_host/host_to_target_itimerspec()'
  linux-user: Add support for a group of 2038 safe syscalls
  linux-user: Add support for a group of btrfs ioctls used for
    subvolumes
  linux-user: Add support for a group of btrfs ioctls used for snapshots
  linux-user: Add support for btrfs ioctls used to manipulate with
    devices
  linux-user: Add support for btrfs ioctls used to get/set features
  linux-user: Add support for a group of btrfs inode ioctls
  linux-user: Add support for two btrfs ioctls used for subvolume
  linux-user: Add support for btrfs ioctls used to manage quota
  linux-user: Add support for btrfs ioctls used to scrub a filesystem
  linux-user: Fix 'utimensat()' implementation

Richard Henderson (2):
  linux-user: Validate mmap/mprotect prot value
  linux-user: Adjust guest page protection for the host

 configure                  |   9 ++
 linux-user/ioctls.h        | 124 ++++++++++++++++++++++++
 linux-user/mmap.c          | 110 ++++++++++++++-------
 linux-user/strace.c        |   8 +-
 linux-user/syscall.c       | 193 +++++++++++++++++++++++++++++++------
 linux-user/syscall_defs.h  |  42 ++++++++
 linux-user/syscall_types.h | 140 +++++++++++++++++++++++++++
 7 files changed, 563 insertions(+), 63 deletions(-)

-- 
2.26.2


Re: [PULL 00/14] Linux user for 5.2 patches
Posted by Peter Maydell 3 years, 8 months ago
On Thu, 13 Aug 2020 at 07:51, Laurent Vivier <laurent@vivier.eu> wrote:
>
> The following changes since commit d0ed6a69d399ae193959225cdeaa9382746c91cc:
>
>   Update version for v5.1.0 release (2020-08-11 17:07:03 +0100)
>
> are available in the Git repository at:
>
>   git://github.com/vivier/qemu.git tags/linux-user-for-5.2-pull-request
>
> for you to fetch changes up to 04275cad60c8f99e0dd7f56aecda68ceac926da8:
>
>   linux-user: Fix 'utimensat()' implementation (2020-08-12 10:09:58 +0200)
>
> ----------------------------------------------------------------
> Add btrfs ioctls
> Add clock_getres_time64, timer_gettime64, timer_settime64,
>     timerfd_gettime64, timerfd_settime64
> Some fixes (page protection, print_fdset, timerspec, itimerspec)
>
> ----------------------------------------------------------------

Fails to compile:

../../linux-user/syscall_types.h:407:28: error:
‘BTRFS_INO_LOOKUP_USER_PATH_MAX’ undeclared here (not in a function);
did you mean ‘BTRFS_INO_LOOKUP_PATH_MAX’?
        MK_ARRAY(TYPE_CHAR, BTRFS_INO_LOOKUP_USER_PATH_MAX)) /* path */
                            ^

../../linux-user/syscall_types.h:451:17: error:
‘BTRFS_MAX_ROOTREF_BUFFER_NUM’ undeclared here (not in a function)
                 BTRFS_MAX_ROOTREF_BUFFER_NUM), /* rootref */
                 ^

On PPC, even more errors, relating to not having
BTRFS_PATH_NAME_MAX, PTRFS_VOL_NAME_MAX, etc.

Not sure if this was a semantic conflict with the meson
conversion, or just an assumption of a newer btrfs.h
than some systems have.

thanks
-- PMM

Re: [PULL 00/14] Linux user for 5.2 patches
Posted by Laurent Vivier 3 years, 8 months ago
Filip,

could you have a look to see what's going wrong?

Thanks,
LAurent

Le 21/08/2020 à 18:23, Peter Maydell a écrit :
> On Thu, 13 Aug 2020 at 07:51, Laurent Vivier <laurent@vivier.eu> wrote:
>>
>> The following changes since commit d0ed6a69d399ae193959225cdeaa9382746c91cc:
>>
>>   Update version for v5.1.0 release (2020-08-11 17:07:03 +0100)
>>
>> are available in the Git repository at:
>>
>>   git://github.com/vivier/qemu.git tags/linux-user-for-5.2-pull-request
>>
>> for you to fetch changes up to 04275cad60c8f99e0dd7f56aecda68ceac926da8:
>>
>>   linux-user: Fix 'utimensat()' implementation (2020-08-12 10:09:58 +0200)
>>
>> ----------------------------------------------------------------
>> Add btrfs ioctls
>> Add clock_getres_time64, timer_gettime64, timer_settime64,
>>     timerfd_gettime64, timerfd_settime64
>> Some fixes (page protection, print_fdset, timerspec, itimerspec)
>>
>> ----------------------------------------------------------------
> 
> Fails to compile:
> 
> ../../linux-user/syscall_types.h:407:28: error:
> ‘BTRFS_INO_LOOKUP_USER_PATH_MAX’ undeclared here (not in a function);
> did you mean ‘BTRFS_INO_LOOKUP_PATH_MAX’?
>         MK_ARRAY(TYPE_CHAR, BTRFS_INO_LOOKUP_USER_PATH_MAX)) /* path */
>                             ^
> 
> ../../linux-user/syscall_types.h:451:17: error:
> ‘BTRFS_MAX_ROOTREF_BUFFER_NUM’ undeclared here (not in a function)
>                  BTRFS_MAX_ROOTREF_BUFFER_NUM), /* rootref */
>                  ^
> 
> On PPC, even more errors, relating to not having
> BTRFS_PATH_NAME_MAX, PTRFS_VOL_NAME_MAX, etc.
> 
> Not sure if this was a semantic conflict with the meson
> conversion, or just an assumption of a newer btrfs.h
> than some systems have.
> 
> thanks
> -- PMM
> 


Re: [PULL 00/14] Linux user for 5.2 patches
Posted by Filip Bozuta 3 years, 8 months ago
Hello,

On 21.8.20. 20:45, Laurent Vivier wrote:
> Filip,
>
> could you have a look to see what's going wrong?
>
> Thanks,
> LAurent
>
> Le 21/08/2020 à 18:23, Peter Maydell a écrit :
>> On Thu, 13 Aug 2020 at 07:51, Laurent Vivier <laurent@vivier.eu> wrote:
>>> The following changes since commit d0ed6a69d399ae193959225cdeaa9382746c91cc:
>>>
>>>    Update version for v5.1.0 release (2020-08-11 17:07:03 +0100)
>>>
>>> are available in the Git repository at:
>>>
>>>    git://github.com/vivier/qemu.git tags/linux-user-for-5.2-pull-request
>>>
>>> for you to fetch changes up to 04275cad60c8f99e0dd7f56aecda68ceac926da8:
>>>
>>>    linux-user: Fix 'utimensat()' implementation (2020-08-12 10:09:58 +0200)
>>>
>>> ----------------------------------------------------------------
>>> Add btrfs ioctls
>>> Add clock_getres_time64, timer_gettime64, timer_settime64,
>>>      timerfd_gettime64, timerfd_settime64
>>> Some fixes (page protection, print_fdset, timerspec, itimerspec)
>>>
>>> ----------------------------------------------------------------
>> Fails to compile:
>>
>> ../../linux-user/syscall_types.h:407:28: error:
>> ‘BTRFS_INO_LOOKUP_USER_PATH_MAX’ undeclared here (not in a function);
>> did you mean ‘BTRFS_INO_LOOKUP_PATH_MAX’?
>>          MK_ARRAY(TYPE_CHAR, BTRFS_INO_LOOKUP_USER_PATH_MAX)) /* path */
>>                              ^
>>
>> ../../linux-user/syscall_types.h:451:17: error:
>> ‘BTRFS_MAX_ROOTREF_BUFFER_NUM’ undeclared here (not in a function)
>>                   BTRFS_MAX_ROOTREF_BUFFER_NUM), /* rootref */
>>                   ^
>>
>> On PPC, even more errors, relating to not having
>> BTRFS_PATH_NAME_MAX, PTRFS_VOL_NAME_MAX, etc.
>>
>> Not sure if this was a semantic conflict with the meson
>> conversion, or just an assumption of a newer btrfs.h
>> than some systems have.

Yes, this is because of asumption that a newer btrfs.h file is present 
than some systems have. There have been significant changes in btrfs.h 
from kernel version 3.9 (since it was introduced). For example, 
BTRFS_INO_LOOKPU_USER_PATH_MAX is used by BTRRS_IOC_INO_LOOKUP_USER 
which was introduced a little later which is why this error ocurres. I 
am guessing that this should be fixed by putting an #ifdef around thunk 
structure definitions in 'syscall_types.h' to check whether the values 
that are used by these structures are present (or if ioctls that use 
this structures are defined). I am sorry that I didn't notice this at 
first. I will try to send a fix as soon as possible.

Best regards,

Filip

>>
>> thanks
>> -- PMM
>>

Re: [PULL 00/14] Linux user for 5.2 patches
Posted by Laurent Vivier 3 years, 8 months ago
Le 21/08/2020 à 18:23, Peter Maydell a écrit :
> On Thu, 13 Aug 2020 at 07:51, Laurent Vivier <laurent@vivier.eu> wrote:
>>
>> The following changes since commit d0ed6a69d399ae193959225cdeaa9382746c91cc:
>>
>>   Update version for v5.1.0 release (2020-08-11 17:07:03 +0100)
>>
>> are available in the Git repository at:
>>
>>   git://github.com/vivier/qemu.git tags/linux-user-for-5.2-pull-request
>>
>> for you to fetch changes up to 04275cad60c8f99e0dd7f56aecda68ceac926da8:
>>
>>   linux-user: Fix 'utimensat()' implementation (2020-08-12 10:09:58 +0200)
>>
>> ----------------------------------------------------------------
>> Add btrfs ioctls
>> Add clock_getres_time64, timer_gettime64, timer_settime64,
>>     timerfd_gettime64, timerfd_settime64
>> Some fixes (page protection, print_fdset, timerspec, itimerspec)
>>
>> ----------------------------------------------------------------
> 
> Fails to compile:
> 
> ../../linux-user/syscall_types.h:407:28: error:
> ‘BTRFS_INO_LOOKUP_USER_PATH_MAX’ undeclared here (not in a function);
> did you mean ‘BTRFS_INO_LOOKUP_PATH_MAX’?
>         MK_ARRAY(TYPE_CHAR, BTRFS_INO_LOOKUP_USER_PATH_MAX)) /* path */
>                             ^
> 
> ../../linux-user/syscall_types.h:451:17: error:
> ‘BTRFS_MAX_ROOTREF_BUFFER_NUM’ undeclared here (not in a function)
>                  BTRFS_MAX_ROOTREF_BUFFER_NUM), /* rootref */
>                  ^
> 
> On PPC, even more errors, relating to not having
> BTRFS_PATH_NAME_MAX, PTRFS_VOL_NAME_MAX, etc.
> 
> Not sure if this was a semantic conflict with the meson
> conversion, or just an assumption of a newer btrfs.h
> than some systems have.

Well, for me master is also broken (F32, linux-user only, static):

Compiling C object libqemuutil.a.p/util_compatfd.c.o
../../../Projects/qemu/util/compatfd.c: In function 'qemu_signalfd':
../../../Projects/qemu/util/compatfd.c:103:19: error: 'SYS_signalfd'
undeclared (first use in this function); did you mean 'SYS_signalfd4'?
  103 |     ret = syscall(SYS_signalfd, -1, mask, _NSIG / 8);
      |                   ^~~~~~~~~~~~
      |                   SYS_signalfd4
../../../Projects/qemu/util/compatfd.c:103:19: note: each undeclared
identifier is reported only once for each function it appears in

Thanks,
Laurent


Re: [PULL 00/14] Linux user for 5.2 patches
Posted by Laurent Vivier 3 years, 8 months ago
Le 21/08/2020 à 21:08, Laurent Vivier a écrit :
> Le 21/08/2020 à 18:23, Peter Maydell a écrit :
>> On Thu, 13 Aug 2020 at 07:51, Laurent Vivier <laurent@vivier.eu> wrote:
>>>
>>> The following changes since commit d0ed6a69d399ae193959225cdeaa9382746c91cc:
>>>
>>>   Update version for v5.1.0 release (2020-08-11 17:07:03 +0100)
>>>
>>> are available in the Git repository at:
>>>
>>>   git://github.com/vivier/qemu.git tags/linux-user-for-5.2-pull-request
>>>
>>> for you to fetch changes up to 04275cad60c8f99e0dd7f56aecda68ceac926da8:
>>>
>>>   linux-user: Fix 'utimensat()' implementation (2020-08-12 10:09:58 +0200)
>>>
>>> ----------------------------------------------------------------
>>> Add btrfs ioctls
>>> Add clock_getres_time64, timer_gettime64, timer_settime64,
>>>     timerfd_gettime64, timerfd_settime64
>>> Some fixes (page protection, print_fdset, timerspec, itimerspec)
>>>
>>> ----------------------------------------------------------------
>>
>> Fails to compile:
>>
>> ../../linux-user/syscall_types.h:407:28: error:
>> ‘BTRFS_INO_LOOKUP_USER_PATH_MAX’ undeclared here (not in a function);
>> did you mean ‘BTRFS_INO_LOOKUP_PATH_MAX’?
>>         MK_ARRAY(TYPE_CHAR, BTRFS_INO_LOOKUP_USER_PATH_MAX)) /* path */
>>                             ^
>>
>> ../../linux-user/syscall_types.h:451:17: error:
>> ‘BTRFS_MAX_ROOTREF_BUFFER_NUM’ undeclared here (not in a function)
>>                  BTRFS_MAX_ROOTREF_BUFFER_NUM), /* rootref */
>>                  ^
>>
>> On PPC, even more errors, relating to not having
>> BTRFS_PATH_NAME_MAX, PTRFS_VOL_NAME_MAX, etc.
>>
>> Not sure if this was a semantic conflict with the meson
>> conversion, or just an assumption of a newer btrfs.h
>> than some systems have.
> 
> Well, for me master is also broken (F32, linux-user only, static):
> 
> Compiling C object libqemuutil.a.p/util_compatfd.c.o
> ../../../Projects/qemu/util/compatfd.c: In function 'qemu_signalfd':
> ../../../Projects/qemu/util/compatfd.c:103:19: error: 'SYS_signalfd'
> undeclared (first use in this function); did you mean 'SYS_signalfd4'?
>   103 |     ret = syscall(SYS_signalfd, -1, mask, _NSIG / 8);
>       |                   ^~~~~~~~~~~~
>       |                   SYS_signalfd4
> ../../../Projects/qemu/util/compatfd.c:103:19: note: each undeclared
> identifier is reported only once for each function it appears in

"--static" seems broken too:

$ '.../configure' '--disable-system' '--enable-linux-user'
'--disable-tools' '--static' '--disable-slirp' '--enable-capstone=git'
C++ compiler c++ does not work with C compiler cc
Disabling C++ specific optional code
cross containers  docker

NOTE: guest cross-compilers enabled: cc
The Meson build system
Version: 0.55.0
...
             gprof enabled: NO
            sparse enabled: NO
            strip binaries: YES
                  profiler: NO
              static build: NO
               SDL support: NO
         SDL image support: NO
               GTK support: YES
...

Thanks,
Laurent


Re: [PULL 00/14] Linux user for 5.2 patches
Posted by Laurent Vivier 3 years, 8 months ago
Le 21/08/2020 à 21:08, Laurent Vivier a écrit :
> Le 21/08/2020 à 18:23, Peter Maydell a écrit :
>> On Thu, 13 Aug 2020 at 07:51, Laurent Vivier <laurent@vivier.eu> wrote:
>>>
>>> The following changes since commit d0ed6a69d399ae193959225cdeaa9382746c91cc:
>>>
>>>   Update version for v5.1.0 release (2020-08-11 17:07:03 +0100)
>>>
>>> are available in the Git repository at:
>>>
>>>   git://github.com/vivier/qemu.git tags/linux-user-for-5.2-pull-request
>>>
>>> for you to fetch changes up to 04275cad60c8f99e0dd7f56aecda68ceac926da8:
>>>
>>>   linux-user: Fix 'utimensat()' implementation (2020-08-12 10:09:58 +0200)
>>>
>>> ----------------------------------------------------------------
>>> Add btrfs ioctls
>>> Add clock_getres_time64, timer_gettime64, timer_settime64,
>>>     timerfd_gettime64, timerfd_settime64
>>> Some fixes (page protection, print_fdset, timerspec, itimerspec)
>>>
>>> ----------------------------------------------------------------
>>
>> Fails to compile:
>>
>> ../../linux-user/syscall_types.h:407:28: error:
>> ‘BTRFS_INO_LOOKUP_USER_PATH_MAX’ undeclared here (not in a function);
>> did you mean ‘BTRFS_INO_LOOKUP_PATH_MAX’?
>>         MK_ARRAY(TYPE_CHAR, BTRFS_INO_LOOKUP_USER_PATH_MAX)) /* path */
>>                             ^
>>
>> ../../linux-user/syscall_types.h:451:17: error:
>> ‘BTRFS_MAX_ROOTREF_BUFFER_NUM’ undeclared here (not in a function)
>>                  BTRFS_MAX_ROOTREF_BUFFER_NUM), /* rootref */
>>                  ^
>>
>> On PPC, even more errors, relating to not having
>> BTRFS_PATH_NAME_MAX, PTRFS_VOL_NAME_MAX, etc.
>>
>> Not sure if this was a semantic conflict with the meson
>> conversion, or just an assumption of a newer btrfs.h
>> than some systems have.
> 
> Well, for me master is also broken (F32, linux-user only, static):
> 
> Compiling C object libqemuutil.a.p/util_compatfd.c.o
> ../../../Projects/qemu/util/compatfd.c: In function 'qemu_signalfd':
> ../../../Projects/qemu/util/compatfd.c:103:19: error: 'SYS_signalfd'
> undeclared (first use in this function); did you mean 'SYS_signalfd4'?
>   103 |     ret = syscall(SYS_signalfd, -1, mask, _NSIG / 8);
>       |                   ^~~~~~~~~~~~
>       |                   SYS_signalfd4
> ../../../Projects/qemu/util/compatfd.c:103:19: note: each undeclared
> identifier is reported only once for each function it appears in

My build env was dirty and I had an asm/unistd.h that was not valid.

Fixed now.

Thanks,
Laurent