From: Ziyang Zhang <functioner@sjtu.edu.cn>
To: qemu-devel <qemu-devel@nongnu.org>
Cc: Riku Voipio <riku.voipio@iki.fi>,
Laurent Vivier <laurent@vivier.eu>,
Alex Bennee <alex.bennee@linaro.org>,
Alexandre Iooss <erdnaxe@crans.org>,
Mahmoud Mandour <ma.mandourr@gmail.com>,
Pierrick Bouvier <pierrick.bouvier@linaro.org>,
Richard Henderson <richard.henderson@linaro.org>,
Zhengwei Qi <qizhwei@sjtu.edu.cn>,
Yun Wang <yunwang94@sjtu.edu.cn>,
Mingyuan Xia <xiamy@ultrarisc.com>,
Kailiang Xu <xukl2019@sjtu.edu.cn>,
Ziyang Zhang <functioner@sjtu.edu.cn>
Subject: [PATCH v2 1/1] plugins: use int64_t for the syscall filter return value
Date: Thu, 18 Jun 2026 16:24:26 +0800 [thread overview]
Message-ID: <20260618082426.790315-2-functioner@sjtu.edu.cn> (raw)
In-Reply-To: <20260618082426.790315-1-functioner@sjtu.edu.cn>
The syscall return value passed back through the syscall filter
callback is semantically signed: negative values encode errno codes.
Declaring the sysret pointer as uint64_t * is therefore misleading and
forces callers to launder the value through an unsigned temporary.
Change the sysret pointer to int64_t * across the public plugin API
typedef (qemu_plugin_vcpu_syscall_filter_cb_t), the internal
qemu_plugin_vcpu_syscall_filter() prototypes and stub, its
implementation in plugins/core.c, the linux-user caller, and the
in-tree example plugins.
Signed-off-by: Ziyang Zhang <functioner@sjtu.edu.cn>
---
v2: rebased onto current master. The syscall callbacks now take a
userdata argument, so the filter signatures were adjusted to keep
that while changing only the sysret type. No functional change.
---
include/plugins/qemu-plugin.h | 2 +-
include/qemu/plugin.h | 4 ++--
linux-user/syscall.c | 2 +-
plugins/core.c | 2 +-
tests/tcg/plugins/setpc.c | 2 +-
tests/tcg/plugins/syscall.c | 2 +-
6 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/include/plugins/qemu-plugin.h b/include/plugins/qemu-plugin.h
index d8d4b37384..3e913cd89c 100644
--- a/include/plugins/qemu-plugin.h
+++ b/include/plugins/qemu-plugin.h
@@ -871,7 +871,7 @@ typedef bool
int64_t num, uint64_t a1, uint64_t a2,
uint64_t a3, uint64_t a4, uint64_t a5,
uint64_t a6, uint64_t a7, uint64_t a8,
- uint64_t *sysret,
+ int64_t *sysret,
void *userdata);
/**
diff --git a/include/qemu/plugin.h b/include/qemu/plugin.h
index 9356ee836a..9c2ec8ceae 100644
--- a/include/qemu/plugin.h
+++ b/include/qemu/plugin.h
@@ -172,7 +172,7 @@ bool
qemu_plugin_vcpu_syscall_filter(CPUState *cpu, int64_t num, uint64_t a1,
uint64_t a2, uint64_t a3, uint64_t a4,
uint64_t a5, uint64_t a6, uint64_t a7,
- uint64_t a8, uint64_t *sysret);
+ uint64_t a8, int64_t *sysret);
void qemu_plugin_vcpu_mem_cb(CPUState *cpu, uint64_t vaddr,
uint64_t value_low,
@@ -288,7 +288,7 @@ static inline bool
qemu_plugin_vcpu_syscall_filter(CPUState *cpu, int64_t num, uint64_t a1,
uint64_t a2, uint64_t a3, uint64_t a4,
uint64_t a5, uint64_t a6, uint64_t a7,
- uint64_t a8, uint64_t *sysret)
+ uint64_t a8, int64_t *sysret)
{
return false;
}
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index fbe357b7e0..d257fb9ca9 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -14619,7 +14619,7 @@ static bool send_through_syscall_filters(CPUState *cpu, int num,
abi_long arg7, abi_long arg8,
abi_long *sysret)
{
- uint64_t sysret64 = 0;
+ int64_t sysret64 = 0;
bool filtered = qemu_plugin_vcpu_syscall_filter(cpu, num, arg1, arg2,
arg3, arg4, arg5, arg6,
arg7, arg8, &sysret64);
diff --git a/plugins/core.c b/plugins/core.c
index 4b55aacd2d..1113bfe567 100644
--- a/plugins/core.c
+++ b/plugins/core.c
@@ -573,7 +573,7 @@ bool
qemu_plugin_vcpu_syscall_filter(CPUState *cpu, int64_t num, uint64_t a1,
uint64_t a2, uint64_t a3, uint64_t a4,
uint64_t a5, uint64_t a6, uint64_t a7,
- uint64_t a8, uint64_t *sysret)
+ uint64_t a8, int64_t *sysret)
{
struct qemu_plugin_cb *cb, *next;
enum qemu_plugin_event ev = QEMU_PLUGIN_EV_VCPU_SYSCALL_FILTER;
diff --git a/tests/tcg/plugins/setpc.c b/tests/tcg/plugins/setpc.c
index 7c78f182f0..76b2efc61b 100644
--- a/tests/tcg/plugins/setpc.c
+++ b/tests/tcg/plugins/setpc.c
@@ -27,7 +27,7 @@ static bool vcpu_syscall_filter(unsigned int vcpu_index,
int64_t num, uint64_t a1, uint64_t a2,
uint64_t a3, uint64_t a4, uint64_t a5,
uint64_t a6, uint64_t a7, uint64_t a8,
- uint64_t *sysret, void *userdata)
+ int64_t *sysret, void *userdata)
{
if (num == MAGIC_SYSCALL) {
if (a1 == SETPC) {
diff --git a/tests/tcg/plugins/syscall.c b/tests/tcg/plugins/syscall.c
index a28d108784..debec9f09b 100644
--- a/tests/tcg/plugins/syscall.c
+++ b/tests/tcg/plugins/syscall.c
@@ -176,7 +176,7 @@ static bool vcpu_syscall_filter(unsigned int vcpu_index,
int64_t num, uint64_t a1, uint64_t a2,
uint64_t a3, uint64_t a4, uint64_t a5,
uint64_t a6, uint64_t a7, uint64_t a8,
- uint64_t *sysret, void *userdata)
+ int64_t *sysret, void *userdata)
{
/* Special syscall to test the filter functionality. */
if (num == 4096 && a1 == 0x66CCFF) {
--
2.34.1
next prev parent reply other threads:[~2026-06-18 8:25 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-18 8:24 [PATCH v2 0/1] plugins: fix syscall filter return value type Ziyang Zhang
2026-06-18 8:24 ` Ziyang Zhang [this message]
2026-06-18 23:33 ` [PATCH v2 1/1] plugins: use int64_t for the syscall filter return value Pierrick Bouvier
2026-06-19 14:47 ` Alex Bennée
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260618082426.790315-2-functioner@sjtu.edu.cn \
--to=functioner@sjtu.edu.cn \
--cc=alex.bennee@linaro.org \
--cc=erdnaxe@crans.org \
--cc=laurent@vivier.eu \
--cc=ma.mandourr@gmail.com \
--cc=pierrick.bouvier@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qizhwei@sjtu.edu.cn \
--cc=richard.henderson@linaro.org \
--cc=riku.voipio@iki.fi \
--cc=xiamy@ultrarisc.com \
--cc=xukl2019@sjtu.edu.cn \
--cc=yunwang94@sjtu.edu.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.