From: Stefano Brivio <sbrivio@redhat.com>
To: passt-dev@passt.top
Cc: "Uroš Knupleš" <uros@knuples.net>,
"Faidon Liambotis" <paravoid@debian.org>
Subject: [PATCH] treewide: Allow additional system calls for i386/i686
Date: Tue, 20 Aug 2024 01:14:07 +0200 [thread overview]
Message-ID: <20240819231407.1481337-1-sbrivio@redhat.com> (raw)
I haven't tested i386 for a long time (after playing with some
openSUSE i586 image a couple of years ago). It turns out that a number
of system calls we actually need were denied by the seccomp filter,
and not even basic functionality works.
Add some system calls that glibc started using with the 64-bit time
("t64") transition, see also:
https://wiki.debian.org/ReleaseGoals/64bit-time
that is: clock_gettime64, timerfd_gettime64, fcntl64, and
recvmmsg_time64.
Add further system calls that are needed regardless of time_t width,
that is, mmap2 (valgrind profile only), _llseek and sigreturn (common
outside x86_64), and socketcall (same as s390x).
I validated this against an almost full run of the test suite, with
just a few selected tests skipped. Fixes needed to run most tests on
i386/i686, and other assorted fixes for tests, are included in
upcoming patches.
Reported-by: Uroš Knupleš <uros@knuples.net>
Analysed-by: Faidon Liambotis <paravoid@debian.org>
Link: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1078981
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
---
Makefile | 2 +-
log.c | 2 +-
passt.c | 6 +++---
pasta.c | 2 +-
tcp.c | 2 +-
tcp_splice.c | 2 +-
udp.c | 2 +-
udp_flow.c | 2 +-
8 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/Makefile b/Makefile
index b6329e3..01fada4 100644
--- a/Makefile
+++ b/Makefile
@@ -129,7 +129,7 @@ qrap: $(QRAP_SRCS) passt.h
valgrind: EXTRA_SYSCALLS += rt_sigprocmask rt_sigtimedwait rt_sigaction \
rt_sigreturn getpid gettid kill clock_gettime mmap \
- munmap open unlink gettimeofday futex
+ mmap2 munmap open unlink gettimeofday futex
valgrind: FLAGS += -g -DVALGRIND
valgrind: all
diff --git a/log.c b/log.c
index e7202d0..433b552 100644
--- a/log.c
+++ b/log.c
@@ -98,7 +98,7 @@ const char *logfile_prefix[] = {
* @fd: Log file descriptor
* @now: Current timestamp
*
- * #syscalls lseek ppc64le:_llseek ppc64:_llseek arm:_llseek
+ * #syscalls lseek ppc64le:_llseek ppc64:_llseek arm:_llseek i686:_llseek
*/
static void logfile_rotate_fallocate(int fd, const struct timespec *now)
{
diff --git a/passt.c b/passt.c
index 4b3c306..f9670b3 100644
--- a/passt.c
+++ b/passt.c
@@ -191,11 +191,11 @@ void exit_handler(int signal)
* Return: non-zero on failure
*
* #syscalls read write writev
- * #syscalls socket bind connect getsockopt setsockopt s390x:socketcall close
- * #syscalls recvfrom sendto shutdown
+ * #syscalls socket getsockopt setsockopt s390x:socketcall i686:socketcall close
+ * #syscalls bind connect recvfrom sendto shutdown
* #syscalls arm:recv ppc64le:recv arm:send ppc64le:send
* #syscalls accept4|accept listen epoll_ctl epoll_wait|epoll_pwait epoll_pwait
- * #syscalls clock_gettime arm:clock_gettime64
+ * #syscalls clock_gettime arm:clock_gettime64 i686:clock_gettime64
*/
int main(int argc, char **argv)
{
diff --git a/pasta.c b/pasta.c
index 1142f03..49b56db 100644
--- a/pasta.c
+++ b/pasta.c
@@ -13,7 +13,7 @@
*
* #syscalls:pasta clone waitid exit exit_group rt_sigprocmask
* #syscalls:pasta rt_sigreturn|sigreturn
- * #syscalls:pasta arm:sigreturn ppc64:sigreturn s390x:sigreturn
+ * #syscalls:pasta arm:sigreturn ppc64:sigreturn s390x:sigreturn i686:sigreturn
*/
#include <sched.h>
diff --git a/tcp.c b/tcp.c
index c0820ce..c542a78 100644
--- a/tcp.c
+++ b/tcp.c
@@ -2143,7 +2143,7 @@ cancel:
* @c: Execution context
* @ref: epoll reference of timer (not connection)
*
- * #syscalls timerfd_gettime
+ * #syscalls timerfd_gettime i686:timerfd_gettime64
*/
void tcp_timer_handler(struct ctx *c, union epoll_ref ref)
{
diff --git a/tcp_splice.c b/tcp_splice.c
index 483e45d..9f5cc27 100644
--- a/tcp_splice.c
+++ b/tcp_splice.c
@@ -28,7 +28,7 @@
* - FIN_SENT_0: FIN (write shutdown) sent to accepted socket
* - FIN_SENT_1: FIN (write shutdown) sent to target socket
*
- * #syscalls:pasta pipe2|pipe fcntl arm:fcntl64 ppc64:fcntl64
+ * #syscalls:pasta pipe2|pipe fcntl arm:fcntl64 ppc64:fcntl64 i686:fcntl64
*/
#include <sched.h>
diff --git a/udp.c b/udp.c
index 7731257..851881e 100644
--- a/udp.c
+++ b/udp.c
@@ -460,7 +460,7 @@ static bool udp_sock_recverr(int s)
* @events: epoll events bitmap
* @mmh mmsghdr array to receive into
*
- * #syscalls recvmmsg
+ * #syscalls recvmmsg i686:recvmmsg_time64
*/
static int udp_sock_recv(const struct ctx *c, int s, uint32_t events,
struct mmsghdr *mmh)
diff --git a/udp_flow.c b/udp_flow.c
index 8b25ad1..b1133c0 100644
--- a/udp_flow.c
+++ b/udp_flow.c
@@ -174,7 +174,7 @@ cancel:
* @s_in: Source socket address, filled in by recvmmsg()
* @now: Timestamp
*
- * #syscalls fcntl
+ * #syscalls fcntl arm:fcntl64 ppc64:fcntl64 i686:fcntl64
*
* Return: sidx for the destination side of the flow for this packet, or
* FLOW_SIDX_NONE if we couldn't find or create a flow.
--
@@ -174,7 +174,7 @@ cancel:
* @s_in: Source socket address, filled in by recvmmsg()
* @now: Timestamp
*
- * #syscalls fcntl
+ * #syscalls fcntl arm:fcntl64 ppc64:fcntl64 i686:fcntl64
*
* Return: sidx for the destination side of the flow for this packet, or
* FLOW_SIDX_NONE if we couldn't find or create a flow.
--
2.43.0
next reply other threads:[~2024-08-19 23:14 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-19 23:14 Stefano Brivio [this message]
2024-08-20 0:44 ` [PATCH] treewide: Allow additional system calls for i386/i686 David Gibson
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=20240819231407.1481337-1-sbrivio@redhat.com \
--to=sbrivio@redhat.com \
--cc=paravoid@debian.org \
--cc=passt-dev@passt.top \
--cc=uros@knuples.net \
/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.
Code repositories for project(s) associated with this public inbox
https://passt.top/passt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).