Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: qemu/qemu
base: 6972ef1440a9
Choose a base ref
...
head repository: qemu/qemu
compare: 19200a0edf67
Choose a head ref
  • 10 commits
  • 4 files changed
  • 6 contributors

Commits on May 17, 2023

  1. linux-user: Emulate /proc/cpuinfo output for riscv

    RISC-V does not expose all extensions via hwcaps, thus some userspace
    applications may want to query these via /proc/cpuinfo.
    
    Currently when querying this file the host's file is shown instead
    which is slightly confusing. Emulate a basic /proc/cpuinfo file
    with mmu info and an ISA string.
    
    Signed-off-by: Afonso Bordado <afonsobordado@gmail.com>
    Reviewed-by: Palmer Dabbelt <palmer@rivosinc.com>
    Acked-by: Palmer Dabbelt <palmer@rivosinc.com>
    Reviewed-by: Laurent Vivier <laurent@vivier.eu>
    Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
    Reviewed-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com>
    Message-Id: <167873059442.9885.15152085316575248452-0@git.sr.ht>
    [lv: removed the test that fails in CI for unknown reason]
    Signed-off-by: Laurent Vivier <laurent@vivier.eu>
    afonso360 authored and vivier committed May 17, 2023
    Copy the full SHA
    8ddc171 View commit details
    Browse the repository at this point in the history
  2. linux-user: report ENOTTY for unknown ioctls

    The correct error number for unknown ioctls is ENOTTY.
    
    ENOSYS would mean that the ioctl() syscall itself is not implemented,
    which is very improbable and unexpected for userspace.
    
    ENOTTY means "Inappropriate ioctl for device". This is what the kernel
    returns on unknown ioctls, what qemu is trying to express and what
    userspace is prepared to handle.
    
    Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
    Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
    Message-Id: <20230426070659.80649-1-thomas@t-8ch.de>
    Signed-off-by: Laurent Vivier <laurent@vivier.eu>
    t-8ch authored and vivier committed May 17, 2023
    Copy the full SHA
    59d1172 View commit details
    Browse the repository at this point in the history
  3. linux-user: Add move_mount() syscall

    Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
    Reviewed-by: Laurent Vivier <laurent@vivier.eu>
    [lv: define syscall]
    Message-Id: <20230424153429.276788-1-thomas@t-8ch.de>
    Signed-off-by: Laurent Vivier <laurent@vivier.eu>
    t-8ch authored and vivier committed May 17, 2023
    Copy the full SHA
    4b2d275 View commit details
    Browse the repository at this point in the history
  4. linux-user: Add open_tree() syscall

    Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
    Reviewed-by: Laurent Vivier <laurent@vivier.eu>
    Message-Id: <20230424153429.276788-2-thomas@t-8ch.de>
    [lv: move declaration at the beginning of the block,
         define syscall]
    Signed-off-by: Laurent Vivier <laurent@vivier.eu>
    t-8ch authored and vivier committed May 17, 2023
    Copy the full SHA
    7f696cd View commit details
    Browse the repository at this point in the history
  5. linux-user/main: Use list_cpus() instead of cpu_list()

    This way we can get rid of the if'deffery and the XXX comment
    here (it's repeated in the list_cpus() function anyway).
    
    Signed-off-by: Thomas Huth <thuth@redhat.com>
    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
    Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
    Message-Id: <20230424122126.236586-1-thuth@redhat.com>
    Signed-off-by: Laurent Vivier <laurent@vivier.eu>
    huth authored and vivier committed May 17, 2023
    Copy the full SHA
    b67e5cb View commit details
    Browse the repository at this point in the history
  6. linux-user: Add new flag VERIFY_NONE

    This can be used to validate that an address range is mapped but without
    being readable or writable.
    
    It will be used by an updated implementation of mincore().
    
    Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
    Reviewed-by: Laurent Vivier <laurent@vivier.eu>
    Message-Id: <20230422100314.1650-2-thomas@t-8ch.de>
    Signed-off-by: Laurent Vivier <laurent@vivier.eu>
    t-8ch authored and vivier committed May 17, 2023
    Copy the full SHA
    64d0601 View commit details
    Browse the repository at this point in the history
  7. linux-user: Don't require PROT_READ for mincore

    The kernel does not require PROT_READ for addresses passed to mincore.
    For example the fincore(1) tool from util-linux uses PROT_NONE and
    currently does not work under qemu-user.
    
    Example (with fincore(1) from util-linux 2.38):
    
    $ fincore /proc/self/exe
    RES PAGES  SIZE FILE
    24K     6 22.1K /proc/self/exe
    
    $ qemu-x86_64 /usr/bin/fincore /proc/self/exe
    fincore: failed to do mincore: /proc/self/exe: Cannot allocate memory
    
    With this patch:
    
    $ ./build/qemu-x86_64 /usr/bin/fincore /proc/self/exe
    RES PAGES  SIZE FILE
    24K     6 22.1K /proc/self/exe
    
    Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
    Reviewed-by: Laurent Vivier <laurent@vivier.eu>
    Message-Id: <20230422100314.1650-3-thomas@t-8ch.de>
    Signed-off-by: Laurent Vivier <laurent@vivier.eu>
    t-8ch authored and vivier committed May 17, 2023
    Copy the full SHA
    f443a26 View commit details
    Browse the repository at this point in the history
  8. linux-user: Fix mips fp64 executables loading

    If a program requires fr1, we should set the FR bit of CP0 control status
    register and add F64 hardware flag. The corresponding `else if` branch
    statement is copied from the linux kernel sources (see `arch_check_elf` function
    in linux/arch/mips/kernel/elf.c).
    
    Signed-off-by: Daniil Kovalev <dkovalev@compiler-toolchain-for.me>
    Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Message-Id: <20230404052153.16617-1-dkovalev@compiler-toolchain-for.me>
    Signed-off-by: Laurent Vivier <laurent@vivier.eu>
    kovdan01 authored and vivier committed May 17, 2023
    Copy the full SHA
    a0f8d27 View commit details
    Browse the repository at this point in the history
  9. linux-user: fix getgroups/setgroups allocations

    linux-user getgroups(), setgroups(), getgroups32() and setgroups32()
    used alloca() to allocate grouplist arrays, with unchecked gidsetsize
    coming from the "guest".  With NGROUPS_MAX being 65536 (linux, and it
    is common for an application to allocate NGROUPS_MAX for getgroups()),
    this means a typical allocation is half the megabyte on the stack.
    Which just overflows stack, which leads to immediate SIGSEGV in actual
    system getgroups() implementation.
    
    An example of such issue is aptitude, eg
    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811087#72
    
    Cap gidsetsize to NGROUPS_MAX (return EINVAL if it is larger than that),
    and use heap allocation for grouplist instead of alloca().  While at it,
    fix coding style and make all 4 implementations identical.
    
    Try to not impose random limits - for example, allow gidsetsize to be
    negative for getgroups() - just do not allocate negative-sized grouplist
    in this case but still do actual getgroups() call.  But do not allow
    negative gidsetsize for setgroups() since its argument is unsigned.
    
    Capping by NGROUPS_MAX seems a bit arbitrary, - we can do more, it is
    not an error if set size will be NGROUPS_MAX+1. But we should not allow
    integer overflow for the array being allocated. Maybe it is enough to
    just call g_try_new() and return ENOMEM if it fails.
    
    Maybe there's also no need to convert setgroups() since this one is
    usually smaller and known beforehand (KERN_NGROUPS_MAX is actually 63, -
    this is apparently a kernel-imposed limit for runtime group set).
    
    The patch fixes aptitude segfault mentioned above.
    
    Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
    Message-Id: <20230409105327.1273372-1-mjt@msgid.tls.msk.ru>
    Signed-off-by: Laurent Vivier <laurent@vivier.eu>
    Michael Tokarev authored and vivier committed May 17, 2023
    Copy the full SHA
    1e35d32 View commit details
    Browse the repository at this point in the history
  10. Merge tag 'linux-user-for-8.1-pull-request' of https://github.com/viv…

    …ier/qemu into staging
    
    linux-user pull request 20230512-v4
    
    add open_tree(), move_mount()
    add /proc/cpuinfo for riscv
    fixes and cleanup
    
    # -----BEGIN PGP SIGNATURE-----
    #
    # iQJGBAABCAAwFiEEzS913cjjpNwuT1Fz8ww4vT8vvjwFAmRkiZISHGxhdXJlbnRA
    # dml2aWVyLmV1AAoJEPMMOL0/L748FdIP/RC1JaCftkP7ajAstNbZLMLegMxjUYHV
    # TrdhsMOsm804ZmLgTqqfS3bJ080mIHup0xUnHBckcEtUcwaz54cJ1BAR2WlM3/8A
    # t3fHMt3PDkh3OPd/3AnmpLE8XRh7yBztirPYfZc6SKqnFzT0TZrwBoQnwprEnZ5r
    # c0gbrgLZLunZhrWU1BbQmuIufW1qDoQo4PzwnyZeux1fHA1/v/dx3wgSLpv3V4k6
    # x0Kj8TvtMUU4/io2RqYF4jKopfhwsh0jnr9rlOmydOExalKq1VbRptJI2UC4KVOY
    # MZuApF1EaZfrW+v/WSlvmzaZ/zRzP1L0X3Xh0wB4J9Rj3057/elXr6bi+R+rM46p
    # xGTcti9ahWKP2J4/xrazRw2lfPsLcw/YbqVGG79AX1xLJPCiWq6lamzc/g3ptFnx
    # F/RRETe65z7apzF/nzU7SDOsMdN5p4/fMb1SysLuAov5OepNVjNVWyiTgqOHB5uC
    # ye+lOYkkvk+qRdMbls/fIcjDQ3C4AjoBWj4QlgRc0/Qf6ac4TkVjzPa70Y6eyzzS
    # LEV9D4fXD8EZgYWENNGmbbKPNbtfqc9uR6gXdgkEsKDx/rf5IMf1d6r1C99dhB3A
    # nbu0JpFKKY2lhD2oGVPDE3UQMW9DXXhZpDApUBsLNiEwfuoXZee+apH+6jc8tbn6
    # r+8LFB1mM9os
    # =NfIV
    # -----END PGP SIGNATURE-----
    # gpg: Signature made Wed 17 May 2023 01:00:18 AM PDT
    # gpg:                using RSA key CD2F75DDC8E3A4DC2E4F5173F30C38BD3F2FBE3C
    # gpg:                issuer "laurent@vivier.eu"
    # gpg: Good signature from "Laurent Vivier <lvivier@redhat.com>" [undefined]
    # gpg:                 aka "Laurent Vivier <laurent@vivier.eu>" [undefined]
    # gpg:                 aka "Laurent Vivier (Red Hat) <lvivier@redhat.com>" [undefined]
    # gpg: WARNING: This key is not certified with a trusted signature!
    # gpg:          There is no indication that the signature belongs to the owner.
    # Primary key fingerprint: CD2F 75DD C8E3 A4DC 2E4F  5173 F30C 38BD 3F2F BE3C
    
    * tag 'linux-user-for-8.1-pull-request' of https://github.com/vivier/qemu:
      linux-user: fix getgroups/setgroups allocations
      linux-user: Fix mips fp64 executables loading
      linux-user: Don't require PROT_READ for mincore
      linux-user: Add new flag VERIFY_NONE
      linux-user/main: Use list_cpus() instead of cpu_list()
      linux-user: Add open_tree() syscall
      linux-user: Add move_mount() syscall
      linux-user: report ENOTTY for unknown ioctls
      linux-user: Emulate /proc/cpuinfo output for riscv
    
    Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
    rth7680 committed May 17, 2023
    Copy the full SHA
    19200a0 View commit details
    Browse the repository at this point in the history