public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
* [PATCH] treewide: Allow additional system calls for i386/i686
@ 2024-08-19 23:14 Stefano Brivio
  2024-08-20  0:44 ` David Gibson
  0 siblings, 1 reply; 2+ messages in thread
From: Stefano Brivio @ 2024-08-19 23:14 UTC (permalink / raw)
  To: passt-dev; +Cc: Uroš Knupleš, Faidon Liambotis

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


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

* Re: [PATCH] treewide: Allow additional system calls for i386/i686
  2024-08-19 23:14 [PATCH] treewide: Allow additional system calls for i386/i686 Stefano Brivio
@ 2024-08-20  0:44 ` David Gibson
  0 siblings, 0 replies; 2+ messages in thread
From: David Gibson @ 2024-08-20  0:44 UTC (permalink / raw)
  To: Stefano Brivio; +Cc: passt-dev, Uroš Knupleš, Faidon Liambotis

[-- Attachment #1: Type: text/plain, Size: 5659 bytes --]

On Tue, Aug 20, 2024 at 01:14:07AM +0200, Stefano Brivio wrote:
> 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>

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

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

-- 
David Gibson (he or they)	| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you, not the other way
				| around.
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

end of thread, other threads:[~2024-08-20  0:49 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-08-19 23:14 [PATCH] treewide: Allow additional system calls for i386/i686 Stefano Brivio
2024-08-20  0:44 ` David Gibson

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).