All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3 0/2] OpenBSD: Let QEMU 4.0 be usable from OpenBSD 6.0 and onwards
@ 2019-03-07 14:28 Philippe Mathieu-Daudé
  2019-03-07 14:28 ` [Qemu-devel] [PATCH v3 1/2] oslib-posix: Ignore fcntl("/dev/null", F_SETFL, O_NONBLOCK) failure Philippe Mathieu-Daudé
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-03-07 14:28 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Brad Smith, Paolo Bonzini, Philippe Mathieu-Daudé

Since OpenBSD 6.0, the W^X protection is enforced by default.
TCG is incompatible with this protection, to be able to use the
QEMU binary, this protection has to be disabled.
The OpenBSD ports seens to have downstream patches to be able to
use QEMU, but these patches were never upstreamed.
This series allow to run QEMU when built from the mainstream sources.

I salvaged the minimum patches required to be able to run OpenBSD
from a previous series, which aimed at running the QEMU QTest suite
on OpenBSD. Sadly it seems there is not much interest in having this
OS covered by tests (except by Peter Maydell).

v2: https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg07513.html
v1: https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg06676.html

Philippe Mathieu-Daudé (2):
  oslib-posix: Ignore fcntl("/dev/null", F_SETFL, O_NONBLOCK) failure
  configure: Disable W^X on OpenBSD

 configure          | 11 +++++++++++
 util/oslib-posix.c | 12 ++++++++++++
 2 files changed, 23 insertions(+)

-- 
2.20.1

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Qemu-devel] [PATCH v3 1/2] oslib-posix: Ignore fcntl("/dev/null", F_SETFL, O_NONBLOCK) failure
  2019-03-07 14:28 [Qemu-devel] [PATCH v3 0/2] OpenBSD: Let QEMU 4.0 be usable from OpenBSD 6.0 and onwards Philippe Mathieu-Daudé
@ 2019-03-07 14:28 ` Philippe Mathieu-Daudé
  2019-03-07 14:28 ` [Qemu-devel] [PATCH v3 2/2] configure: Disable W^X on OpenBSD Philippe Mathieu-Daudé
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-03-07 14:28 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Brad Smith, Paolo Bonzini,
	Philippe Mathieu-Daudé,
	Michael S . Tsirkin

Previous to OpenBSD 6.3 [1], fcntl(F_SETFL) is not permitted on
memory devices.
Trying this call sets errno to ENODEV ("not a memory device"):

  19 ENODEV Operation not supported by device.
    An attempt was made to apply an inappropriate function to a device,
    for example, trying to read a write-only device such as a printer.

Do not assert fcntl failures in this specific case (errno set to ENODEV)
on OpenBSD. This fixes:

  $ lm32-softmmu/qemu-system-lm32
  assertion "f != -1" failed: file "util/oslib-posix.c", line 247, function "qemu_set_nonblock"
  Abort trap (core dumped)

[1] The fix seems https://github.com/openbsd/src/commit/c2a35b387f9d3c
  "fcntl(F_SETFL) invokes the FIONBIO and FIOASYNC ioctls internally, so
  the memory devices (/dev/null, /dev/zero, etc) need to permit them."

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
 util/oslib-posix.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/util/oslib-posix.c b/util/oslib-posix.c
index 37c5854b9c..326d92dcd2 100644
--- a/util/oslib-posix.c
+++ b/util/oslib-posix.c
@@ -244,7 +244,19 @@ void qemu_set_nonblock(int fd)
     f = fcntl(fd, F_GETFL);
     assert(f != -1);
     f = fcntl(fd, F_SETFL, f | O_NONBLOCK);
+#ifdef __OpenBSD__
+    if (f == -1) {
+        /*
+         * Previous to OpenBSD 6.3, fcntl(F_SETFL) is not permitted on
+         * memory devices and sets errno to ENODEV.
+         * It's OK if we fail to set O_NONBLOCK on devices like /dev/null,
+         * because they will never block anyway.
+         */
+        assert(errno == ENODEV);
+    }
+#else
     assert(f != -1);
+#endif
 }
 
 int socket_set_fast_reuse(int fd)
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [Qemu-devel] [PATCH v3 2/2] configure: Disable W^X on OpenBSD
  2019-03-07 14:28 [Qemu-devel] [PATCH v3 0/2] OpenBSD: Let QEMU 4.0 be usable from OpenBSD 6.0 and onwards Philippe Mathieu-Daudé
  2019-03-07 14:28 ` [Qemu-devel] [PATCH v3 1/2] oslib-posix: Ignore fcntl("/dev/null", F_SETFL, O_NONBLOCK) failure Philippe Mathieu-Daudé
@ 2019-03-07 14:28 ` Philippe Mathieu-Daudé
  2019-03-07 14:57   ` Thomas Huth
  2019-03-07 14:57 ` [Qemu-devel] [PATCH v3 0/2] OpenBSD: Let QEMU 4.0 be usable from OpenBSD 6.0 and onwards Daniel P. Berrangé
  2019-03-07 16:35 ` Paolo Bonzini
  3 siblings, 1 reply; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-03-07 14:28 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Brad Smith, Paolo Bonzini, Philippe Mathieu-Daudé

Since OpenBSD 6.0 [1], W^X is enforced by default [2].
TCG requires WX access. Disable W^X if it is available.
This fixes:

  # lm32-softmmu/qemu-system-lm32
  Could not allocate dynamic translator buffer

  # sysctl kern.wxabort=1
  kern.wxabort: 0 -> 1
  # lm32-softmmu/qemu-system-lm32
  mmap: Not supported
  Abort trap (core dumped)
  # gdb -q lm32-softmmu/qemu-system-lm32 qemu-system-lm32.core
  (gdb) bt
  #0  0x000017e3c156c50a in _thread_sys___syscall () at {standard input}:5
  #1  0x000017e3c15e5d7a in *_libc_mmap (addr=Variable "addr" is not available.) at /usr/src/lib/libc/sys/mmap.c:47
  #2  0x000017e17d9abc8b in alloc_code_gen_buffer () at /usr/src/qemu/accel/tcg/translate-all.c:1064
  #3  0x000017e17d9abd04 in code_gen_alloc (tb_size=0) at /usr/src/qemu/accel/tcg/translate-all.c:1112
  #4  0x000017e17d9abe81 in tcg_exec_init (tb_size=0) at /usr/src/qemu/accel/tcg/translate-all.c:1149
  #5  0x000017e17d9897e9 in tcg_init (ms=0x17e45e456800) at /usr/src/qemu/accel/tcg/tcg-all.c:66
  #6  0x000017e17d9891b8 in accel_init_machine (acc=0x17e3c3f50800, ms=0x17e45e456800) at /usr/src/qemu/accel/accel.c:63
  #7  0x000017e17d989312 in configure_accelerator (ms=0x17e45e456800, progname=0x7f7fffff07b0 "lm32-softmmu/qemu-system-lm32") at /usr/src/qemu/accel/accel.c:111
  #8  0x000017e17d9d8616 in main (argc=1, argv=0x7f7fffff06b8, envp=0x7f7fffff06c8) at vl.c:4325

[1] https://www.openbsd.org/faq/upgrade60.html
[2] https://undeadly.org/cgi?action=article&sid=20160527203200

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
 configure | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/configure b/configure
index cefeb8fcce..abfd60923a 100755
--- a/configure
+++ b/configure
@@ -5835,6 +5835,17 @@ if test "$mingw32" = "yes" ; then
     done
 fi
 
+# Disable OpenBSD W^X if available
+if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
+    cat > $TMPC <<EOF
+    int main(void) { return 0; }
+EOF
+    wx_ldflags="-Wl,-z,wxneeded"
+    if compile_prog "" "$wx_ldflags"; then
+        QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
+    fi
+fi
+
 qemu_confdir=$sysconfdir$confsuffix
 qemu_moddir=$libdir$confsuffix
 qemu_datadir=$datadir$confsuffix
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH v3 2/2] configure: Disable W^X on OpenBSD
  2019-03-07 14:28 ` [Qemu-devel] [PATCH v3 2/2] configure: Disable W^X on OpenBSD Philippe Mathieu-Daudé
@ 2019-03-07 14:57   ` Thomas Huth
  0 siblings, 0 replies; 7+ messages in thread
From: Thomas Huth @ 2019-03-07 14:57 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Peter Maydell, Paolo Bonzini, Brad Smith

On 07/03/2019 15.28, Philippe Mathieu-Daudé wrote:
> Since OpenBSD 6.0 [1], W^X is enforced by default [2].
> TCG requires WX access. Disable W^X if it is available.
> This fixes:
> 
>   # lm32-softmmu/qemu-system-lm32
>   Could not allocate dynamic translator buffer
> 
>   # sysctl kern.wxabort=1
>   kern.wxabort: 0 -> 1
>   # lm32-softmmu/qemu-system-lm32
>   mmap: Not supported
>   Abort trap (core dumped)
>   # gdb -q lm32-softmmu/qemu-system-lm32 qemu-system-lm32.core
>   (gdb) bt
>   #0  0x000017e3c156c50a in _thread_sys___syscall () at {standard input}:5
>   #1  0x000017e3c15e5d7a in *_libc_mmap (addr=Variable "addr" is not available.) at /usr/src/lib/libc/sys/mmap.c:47
>   #2  0x000017e17d9abc8b in alloc_code_gen_buffer () at /usr/src/qemu/accel/tcg/translate-all.c:1064
>   #3  0x000017e17d9abd04 in code_gen_alloc (tb_size=0) at /usr/src/qemu/accel/tcg/translate-all.c:1112
>   #4  0x000017e17d9abe81 in tcg_exec_init (tb_size=0) at /usr/src/qemu/accel/tcg/translate-all.c:1149
>   #5  0x000017e17d9897e9 in tcg_init (ms=0x17e45e456800) at /usr/src/qemu/accel/tcg/tcg-all.c:66
>   #6  0x000017e17d9891b8 in accel_init_machine (acc=0x17e3c3f50800, ms=0x17e45e456800) at /usr/src/qemu/accel/accel.c:63
>   #7  0x000017e17d989312 in configure_accelerator (ms=0x17e45e456800, progname=0x7f7fffff07b0 "lm32-softmmu/qemu-system-lm32") at /usr/src/qemu/accel/accel.c:111
>   #8  0x000017e17d9d8616 in main (argc=1, argv=0x7f7fffff06b8, envp=0x7f7fffff06c8) at vl.c:4325
> 
> [1] https://www.openbsd.org/faq/upgrade60.html
> [2] https://undeadly.org/cgi?action=article&sid=20160527203200
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
>  configure | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/configure b/configure
> index cefeb8fcce..abfd60923a 100755
> --- a/configure
> +++ b/configure
> @@ -5835,6 +5835,17 @@ if test "$mingw32" = "yes" ; then
>      done
>  fi
>  
> +# Disable OpenBSD W^X if available
> +if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
> +    cat > $TMPC <<EOF
> +    int main(void) { return 0; }
> +EOF

You can use write_c_skeleton for this instead.

 Thomas

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH v3 0/2] OpenBSD: Let QEMU 4.0 be usable from OpenBSD 6.0 and onwards
  2019-03-07 14:28 [Qemu-devel] [PATCH v3 0/2] OpenBSD: Let QEMU 4.0 be usable from OpenBSD 6.0 and onwards Philippe Mathieu-Daudé
  2019-03-07 14:28 ` [Qemu-devel] [PATCH v3 1/2] oslib-posix: Ignore fcntl("/dev/null", F_SETFL, O_NONBLOCK) failure Philippe Mathieu-Daudé
  2019-03-07 14:28 ` [Qemu-devel] [PATCH v3 2/2] configure: Disable W^X on OpenBSD Philippe Mathieu-Daudé
@ 2019-03-07 14:57 ` Daniel P. Berrangé
  2019-03-07 16:00   ` Philippe Mathieu-Daudé
  2019-03-07 16:35 ` Paolo Bonzini
  3 siblings, 1 reply; 7+ messages in thread
From: Daniel P. Berrangé @ 2019-03-07 14:57 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: qemu-devel, Peter Maydell, Paolo Bonzini, Brad Smith

On Thu, Mar 07, 2019 at 03:28:20PM +0100, Philippe Mathieu-Daudé wrote:
> Since OpenBSD 6.0, the W^X protection is enforced by default.
> TCG is incompatible with this protection, to be able to use the
> QEMU binary, this protection has to be disabled.
> The OpenBSD ports seens to have downstream patches to be able to
> use QEMU, but these patches were never upstreamed.
> This series allow to run QEMU when built from the mainstream sources.
> 
> I salvaged the minimum patches required to be able to run OpenBSD
> from a previous series, which aimed at running the QEMU QTest suite
> on OpenBSD. Sadly it seems there is not much interest in having this
> OS covered by tests (except by Peter Maydell).

What were the blocking issues with getting the test fixes accepted in
previous postings ?  Was it simply no one interested in reviewing it
or actual review problems ?

With our increased interest in CI & push to drop build targets which
are not actively maintained, I'd question whether OpenBSD (or any
build target in the same situation) should continue to be supported
if the test suite hasn't worked for several releases in a row & not
enough people are willing to contribute to fix it.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH v3 0/2] OpenBSD: Let QEMU 4.0 be usable from OpenBSD 6.0 and onwards
  2019-03-07 14:57 ` [Qemu-devel] [PATCH v3 0/2] OpenBSD: Let QEMU 4.0 be usable from OpenBSD 6.0 and onwards Daniel P. Berrangé
@ 2019-03-07 16:00   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-03-07 16:00 UTC (permalink / raw)
  To: Daniel P. Berrangé
  Cc: qemu-devel, Peter Maydell, Paolo Bonzini, Brad Smith

On 3/7/19 3:57 PM, Daniel P. Berrangé wrote:
> On Thu, Mar 07, 2019 at 03:28:20PM +0100, Philippe Mathieu-Daudé wrote:
>> Since OpenBSD 6.0, the W^X protection is enforced by default.
>> TCG is incompatible with this protection, to be able to use the
>> QEMU binary, this protection has to be disabled.
>> The OpenBSD ports seens to have downstream patches to be able to
>> use QEMU, but these patches were never upstreamed.
>> This series allow to run QEMU when built from the mainstream sources.
>>
>> I salvaged the minimum patches required to be able to run OpenBSD
>> from a previous series, which aimed at running the QEMU QTest suite
>> on OpenBSD. Sadly it seems there is not much interest in having this
>> OS covered by tests (except by Peter Maydell).
> 
> What were the blocking issues with getting the test fixes accepted in
> previous postings ?  Was it simply no one interested in reviewing it
> or actual review problems ?
> 
> With our increased interest in CI & push to drop build targets which
> are not actively maintained, I'd question whether OpenBSD (or any
> build target in the same situation) should continue to be supported
> if the test suite hasn't worked for several releases in a row & not
> enough people are willing to contribute to fix it.

It is true nobody complained about this OS since the 6.0 release on
Sep 1, 2016, more than 2 years ago.

Looking at the mailing archive, Peter is the only one reporting build
failures since.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH v3 0/2] OpenBSD: Let QEMU 4.0 be usable from OpenBSD 6.0 and onwards
  2019-03-07 14:28 [Qemu-devel] [PATCH v3 0/2] OpenBSD: Let QEMU 4.0 be usable from OpenBSD 6.0 and onwards Philippe Mathieu-Daudé
                   ` (2 preceding siblings ...)
  2019-03-07 14:57 ` [Qemu-devel] [PATCH v3 0/2] OpenBSD: Let QEMU 4.0 be usable from OpenBSD 6.0 and onwards Daniel P. Berrangé
@ 2019-03-07 16:35 ` Paolo Bonzini
  3 siblings, 0 replies; 7+ messages in thread
From: Paolo Bonzini @ 2019-03-07 16:35 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel; +Cc: Peter Maydell, Brad Smith

On 07/03/19 15:28, Philippe Mathieu-Daudé wrote:
> Since OpenBSD 6.0, the W^X protection is enforced by default.
> TCG is incompatible with this protection, to be able to use the
> QEMU binary, this protection has to be disabled.
> The OpenBSD ports seens to have downstream patches to be able to
> use QEMU, but these patches were never upstreamed.
> This series allow to run QEMU when built from the mainstream sources.
> 
> I salvaged the minimum patches required to be able to run OpenBSD
> from a previous series, which aimed at running the QEMU QTest suite
> on OpenBSD. Sadly it seems there is not much interest in having this
> OS covered by tests (except by Peter Maydell).
> 
> v2: https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg07513.html
> v1: https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg06676.html
> 
> Philippe Mathieu-Daudé (2):
>   oslib-posix: Ignore fcntl("/dev/null", F_SETFL, O_NONBLOCK) failure
>   configure: Disable W^X on OpenBSD
> 
>  configure          | 11 +++++++++++
>  util/oslib-posix.c | 12 ++++++++++++
>  2 files changed, 23 insertions(+)
> 

Queued, thanks.

Paolo

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2019-03-07 16:35 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-07 14:28 [Qemu-devel] [PATCH v3 0/2] OpenBSD: Let QEMU 4.0 be usable from OpenBSD 6.0 and onwards Philippe Mathieu-Daudé
2019-03-07 14:28 ` [Qemu-devel] [PATCH v3 1/2] oslib-posix: Ignore fcntl("/dev/null", F_SETFL, O_NONBLOCK) failure Philippe Mathieu-Daudé
2019-03-07 14:28 ` [Qemu-devel] [PATCH v3 2/2] configure: Disable W^X on OpenBSD Philippe Mathieu-Daudé
2019-03-07 14:57   ` Thomas Huth
2019-03-07 14:57 ` [Qemu-devel] [PATCH v3 0/2] OpenBSD: Let QEMU 4.0 be usable from OpenBSD 6.0 and onwards Daniel P. Berrangé
2019-03-07 16:00   ` Philippe Mathieu-Daudé
2019-03-07 16:35 ` Paolo Bonzini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.