From: Jacob Lifshay Date: Wed, 6 Dec 2023 09:07:42 +0000 (-0800) Subject: caller.py: don't try to make zero-sized memory accesses, they error X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3a4677d8bfde845ccfda102170af9a50e072308a;p=openpower-isa.git caller.py: don't try to make zero-sized memory accesses, they error --- diff --git a/src/openpower/decoder/isa/caller.py b/src/openpower/decoder/isa/caller.py index 556c9b10..44b0fd06 100644 --- a/src/openpower/decoder/isa/caller.py +++ b/src/openpower/decoder/isa/caller.py @@ -1171,7 +1171,10 @@ class SyscallEmulator(openpower.syscalls.Dispatcher): raise ExitSyscallCalled(status) def sys_write(self, fd, buf, count, *rest): - buf = self.__isacaller.mem.get_ctypes(buf, count, is_write=False) + if count != 0: + buf = self.__isacaller.mem.get_ctypes(buf, count, is_write=False) + else: + buf = b"" try: return os.write(fd, buf) except OSError as e: @@ -1201,7 +1204,10 @@ class SyscallEmulator(openpower.syscalls.Dispatcher): return -e.errno def sys_read(self, fd, buf, count, *rest): - buf = self.__isacaller.mem.get_ctypes(buf, count, is_write=True) + if count != 0: + buf = self.__isacaller.mem.get_ctypes(buf, count, is_write=True) + else: + buf = bytearray() try: return os.readv(fd, [buf]) except OSError as e: @@ -1281,7 +1287,11 @@ class SyscallEmulator(openpower.syscalls.Dispatcher): def sys_readlinkat(self, dirfd, pathname, buf, bufsiz, *rest): try: path = self.__isacaller.mem.read_cstr(pathname) - buf = self.__isacaller.mem.get_ctypes(buf, bufsiz, is_write=True) + if bufsiz != 0: + buf = self.__isacaller.mem.get_ctypes( + buf, bufsiz, is_write=True) + else: + buf = bytearray() except (ValueError, MemException): return -errno.EFAULT try: