From 1f65c3cd2ac24c6fcc6a8eb3eb88cd6161c25c88 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 5 Nov 2013 16:20:16 +0100 Subject: [PATCH] Truncate arg[0] to int in select decoding. This matches kernel's behavior. Signed-off-by: Denys Vlasenko --- desc.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/desc.c b/desc.c index 384b1472..bbdc0872 100644 --- a/desc.c +++ b/desc.c @@ -481,16 +481,17 @@ static int decode_select(struct tcb *tcp, long *args, enum bitness_t bitness) { int i, j; - unsigned nfds, fdsize; + int nfds, fdsize; fd_set *fds; const char *sep; long arg; - fdsize = args[0]; + /* Kernel truncates arg[0] to int, we do the same */ + fdsize = (int)args[0]; /* Beware of select(2^31-1, NULL, NULL, NULL) and similar... */ - if (args[0] > 1024*1024) + if (fdsize > 1024*1024) fdsize = 1024*1024; - if (args[0] < 0) + if (fdsize < 0) fdsize = 0; nfds = fdsize; fdsize = (((fdsize + 7) / 8) + sizeof(long)-1) & -sizeof(long);