From 247d6e3563512cf41d8af279a8be23d22699f80d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ferenc=20W=C3=A1gner?= <wferi@debian.org>
Date: Fri, 20 Oct 2023 21:05:31 +0200
Subject: [PATCH 1/3] Do not convert tmp_time to unsiged before assigning to
 tv_usec

When tmp_time is set to the sentinel value -1 that conversion results
2^32-1, which is out of range for suseconds_t on 32-bit platforms, so
the assignment invokes undefined behaviour (which apparently happened
to give -1, working good enough for the task by chance).  However, on
64-bit platforms 2^32-1 fits in the range of suseconds_t (long int)
and definitely does not equal -1 in the following check, leading to
EINVAL when passed into the select() call and immediately exiting
slirp on startup.
---
 src/main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: slirp-1.0.17/src/main.c
===================================================================
--- slirp-1.0.17.orig/src/main.c	2025-11-14 22:17:15.780339608 +0100
+++ slirp-1.0.17/src/main.c	2025-11-14 22:17:15.776339625 +0100
@@ -933,7 +933,7 @@
 	 * Take the minimum of the above calculated timeouts
 	 */
 	if ((timeout.tv_usec < 0) || (tmp_time >= 0 && tmp_time < timeout.tv_usec))
-		timeout.tv_usec = (u_int)tmp_time;
+		timeout.tv_usec = tmp_time;
 #endif
 	DEBUG_MISC((dfd, " timeout.tv_usec = %u",
 		    (u_int)timeout.tv_usec));
