qemu-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-commits] [qemu/qemu] de52cb: linux-user: Emulate /proc/cpuinfo out


From: Richard Henderson
Subject: [Qemu-commits] [qemu/qemu] de52cb: linux-user: Emulate /proc/cpuinfo output for riscv
Date: Tue, 16 May 2023 08:53:13 -0700

  Branch: refs/heads/staging
  Home:   https://github.com/qemu/qemu
  Commit: de52cbdacca9ab8baf41a331840989f8c18c0f7b
      
https://github.com/qemu/qemu/commit/de52cbdacca9ab8baf41a331840989f8c18c0f7b
  Author: Afonso Bordado <afonsobordado@gmail.com>
  Date:   2023-05-16 (Tue, 16 May 2023)

  Changed paths:
    M linux-user/syscall.c
    M tests/tcg/riscv64/Makefile.target
    A tests/tcg/riscv64/cpuinfo.c

  Log Message:
  -----------
  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>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>


  Commit: f3a87e459d85768153a34dac3710bc4a735b9b13
      
https://github.com/qemu/qemu/commit/f3a87e459d85768153a34dac3710bc4a735b9b13
  Author: Thomas Weißschuh <thomas@t-8ch.de>
  Date:   2023-05-16 (Tue, 16 May 2023)

  Changed paths:
    M linux-user/syscall.c

  Log Message:
  -----------
  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>


  Commit: 3b6bb13356268ed0cc07f2e448c5f86d6985c322
      
https://github.com/qemu/qemu/commit/3b6bb13356268ed0cc07f2e448c5f86d6985c322
  Author: Thomas Weißschuh <thomas@t-8ch.de>
  Date:   2023-05-16 (Tue, 16 May 2023)

  Changed paths:
    M linux-user/syscall.c

  Log Message:
  -----------
  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>


  Commit: f8bb4c120c3050605469f675fff1e95c8d0ef1a5
      
https://github.com/qemu/qemu/commit/f8bb4c120c3050605469f675fff1e95c8d0ef1a5
  Author: Thomas Weißschuh <thomas@t-8ch.de>
  Date:   2023-05-16 (Tue, 16 May 2023)

  Changed paths:
    M linux-user/syscall.c

  Log Message:
  -----------
  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>


  Commit: ca78e0ca150f88e9ea8168ff144936e3e7714110
      
https://github.com/qemu/qemu/commit/ca78e0ca150f88e9ea8168ff144936e3e7714110
  Author: Thomas Huth <thuth@redhat.com>
  Date:   2023-05-16 (Tue, 16 May 2023)

  Changed paths:
    M linux-user/main.c

  Log Message:
  -----------
  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>


  Commit: c532762f6e6ed406f75c50d303b093a40d7769b7
      
https://github.com/qemu/qemu/commit/c532762f6e6ed406f75c50d303b093a40d7769b7
  Author: Thomas Weißschuh <thomas@t-8ch.de>
  Date:   2023-05-16 (Tue, 16 May 2023)

  Changed paths:
    M linux-user/qemu.h

  Log Message:
  -----------
  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>


  Commit: e6aa9e1f8cec39bafd4cbc14c2a2f00ce1d39a09
      
https://github.com/qemu/qemu/commit/e6aa9e1f8cec39bafd4cbc14c2a2f00ce1d39a09
  Author: Thomas Weißschuh <thomas@t-8ch.de>
  Date:   2023-05-16 (Tue, 16 May 2023)

  Changed paths:
    M linux-user/syscall.c

  Log Message:
  -----------
  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>


  Commit: 5d385d89fff90a670fdaf5a1c910020f0ae2b429
      
https://github.com/qemu/qemu/commit/5d385d89fff90a670fdaf5a1c910020f0ae2b429
  Author: Daniil Kovalev <dkovalev@compiler-toolchain-for.me>
  Date:   2023-05-16 (Tue, 16 May 2023)

  Changed paths:
    M linux-user/mips/cpu_loop.c

  Log Message:
  -----------
  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>


  Commit: c490496e85047d516b31f93ea0e14819e0ab5cf5
      
https://github.com/qemu/qemu/commit/c490496e85047d516b31f93ea0e14819e0ab5cf5
  Author: Michael Tokarev <mjt@tls.msk.ru>
  Date:   2023-05-16 (Tue, 16 May 2023)

  Changed paths:
    M linux-user/syscall.c

  Log Message:
  -----------
  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>


  Commit: cf102aa4e20337d270f8f6f1e7936127351ec31f
      
https://github.com/qemu/qemu/commit/cf102aa4e20337d270f8f6f1e7936127351ec31f
  Author: Richard Henderson <richard.henderson@linaro.org>
  Date:   2023-05-16 (Tue, 16 May 2023)

  Changed paths:
    M linux-user/main.c
    M linux-user/mips/cpu_loop.c
    M linux-user/qemu.h
    M linux-user/syscall.c
    M tests/tcg/riscv64/Makefile.target
    A tests/tcg/riscv64/cpuinfo.c

  Log Message:
  -----------
  Merge tag 'linux-user-for-8.1-pull-request' of https://github.com/vivier/qemu 
into staging

linux-user pull request 20230512-v3

add open_tree(), move_mount()
add /proc/cpuinfo for riscv
fixes and cleanup

# -----BEGIN PGP SIGNATURE-----
#
# iQJGBAABCAAwFiEEzS913cjjpNwuT1Fz8ww4vT8vvjwFAmRje3sSHGxhdXJlbnRA
# dml2aWVyLmV1AAoJEPMMOL0/L748NVwQAJ4jWpZblT2F77e+fADcI3RQvioOEbSK
# 7yB+l9dP/a9RZ8hm+EYYRWMf6lh6x/acI2xjZXZn5THqahw3e7wrZaSCg1OTY19y
# 8uwsPhRyQVbIzveqqGlbLCVPaVkk2xHRxDr7dJf2erIzkliQeHHgcdD0TpSuXdqQ
# XlqoofcdnZwwMmB8pL65+A2271P4DocPdxslQmuq6HPHIx+qXGvxDD1t5Hhg5KPj
# pAmsAIDHm69X+3dv3WGDDCI/HmyG491p7pXXuoUmcq1ObHsodA/Zo71qd46O7zKb
# wfkGzx8HDIVw6nPvZNaVED/wS5PBrrfGdzJAJblaLENhijFIdqcff/q7tIfcldgg
# 9kNcT7eUIpiB/a414Y3M0L/0JlZ6ClC0A4rWwa1tWjOhosRhmGB0IFXiYkO1u8b9
# fCOIUouTvnDXLfvJOgXLuEvu52iyfyw3oqt/3GRFG0kCAnrWDupV32d/ovzvtUPW
# rU+mKg2QaDxtSn0Q+hGL37dvZOroUsKEEBkkqh+AaCZSjnYaR/E8gBUPJw7il9qI
# J8KtQS7taJ4yXUrSb/WjZo9v8/WfSQFG78DQdloZiQM0FNJlVYEySEG1MEIIBlUB
# Kdru25wASuxPGSFZW4Ec1/6qN+07Dasvg9kpO8UBwl/AuzqG6LITgouIO9mxDqQ9
# z9lLKnlaGLKU
# =ruip
# -----END PGP SIGNATURE-----
# gpg: Signature made Tue 16 May 2023 05:47:55 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>


Compare: https://github.com/qemu/qemu/compare/3d8ff94e5977...cf102aa4e203



reply via email to

[Prev in Thread] Current Thread [Next in Thread]