* [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.