From 8ef0f3067316dfea7cf70790e47fec1a735bc197 Mon Sep 17 00:00:00 2001 From: Luming Wang Date: Tue, 23 Nov 2021 22:49:14 +0800 Subject: [PATCH] sim-se: add checks in selectFunc to fix up crashes In selectFunc, FD_ZERO are invoked without checking whether reinterpret_cast((typename OS::fd_set *)readfds) is NULL. So does writefds and errorfds. Change-Id: I175fe1369c85fd8a832a227c3f90f25d772f33e1 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/53143 Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power Tested-by: kokoro --- src/sim/syscall_emul.hh | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh index 6cbbf00fb9..d78f4acebe 100644 --- a/src/sim/syscall_emul.hh +++ b/src/sim/syscall_emul.hh @@ -2543,9 +2543,15 @@ selectFunc(SyscallDesc *desc, ThreadContext *tc, int nfds, if (retval == -1) return -errno; - FD_ZERO(reinterpret_cast((typename OS::fd_set *)readfds)); - FD_ZERO(reinterpret_cast((typename OS::fd_set *)writefds)); - FD_ZERO(reinterpret_cast((typename OS::fd_set *)errorfds)); + if (readfds) { + FD_ZERO(reinterpret_cast((typename OS::fd_set *)readfds)); + } + if (writefds) { + FD_ZERO(reinterpret_cast((typename OS::fd_set *)writefds)); + } + if (errorfds) { + FD_ZERO(reinterpret_cast((typename OS::fd_set *)errorfds)); + } /** * We need to translate the host file descriptor set into a target file