File: 018-tmp_time_unsigned.patch

package info (click to toggle)
slirp 1%3A1.0.17-12
  • links: PTS
  • area: main
  • in suites: sid
  • size: 2,988 kB
  • sloc: ansic: 17,590; makefile: 157; perl: 53; sh: 2
file content (31 lines) | stat: -rw-r--r-- 1,369 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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));