summary refs log tree commit diff stats
path: root/hw/remote/vfio-user-obj.c
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2025-09-23 11:09:49 +0200
committerMarkus Armbruster <armbru@redhat.com>2025-09-30 14:43:53 +0200
commit82b5e6cc309292b3490be87bb020cbe74fe618fc (patch)
tree2412c3d7c94a4a08402ed5f71ba3009cf021edad /hw/remote/vfio-user-obj.c
parent548f1abacbcd53947060a8b05b74d5d1539f87b3 (diff)
downloadfocaccia-qemu-82b5e6cc309292b3490be87bb020cbe74fe618fc.tar.gz
focaccia-qemu-82b5e6cc309292b3490be87bb020cbe74fe618fc.zip
tcg: Fix error reporting on mprotect() failure in tcg_region_init()
tcg_region_init() calls one of qemu_mprotect_rwx(),
qemu_mprotect_rw(), and mprotect(), then reports failure with
error_setg_errno(&error_fatal, errno, ...).

The use of &error_fatal is undesirable.  qapi/error.h advises:

 * Please don't error_setg(&error_fatal, ...), use error_report() and
 * exit(), because that's more obvious.

The use of errno is wrong.  qemu_mprotect_rwx() and qemu_mprotect_rw()
wrap around qemu_mprotect__osdep().  qemu_mprotect__osdep() calls
mprotect() on POSIX, VirtualProtect() on Windows, and reports failure
with error_report().  VirtualProtect() doesn't set errno.  mprotect()
does, but error_report() may clobber it.

Fix tcg_region_init() to report errors only when it calls mprotect(),
and rely on qemu_mprotect_rwx()'s and qemu_mprotect_rw()'s error
reporting otherwise.  Use error_report(), not error_setg().

Fixes: 22c6a9938f75 (tcg: Merge buffer protection and guard page protection)
Fixes: 6bc144237a85 (tcg: Use Error with alloc_code_gen_buffer)
Cc: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20250923091000.3180122-3-armbru@redhat.com>
Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
Diffstat (limited to 'hw/remote/vfio-user-obj.c')
0 files changed, 0 insertions, 0 deletions