|
Message-ID: <5523A299.5050209@ndmsystems.com> Date: Tue, 07 Apr 2015 12:25:45 +0300 From: Eugene <e.yudin@...systems.com> To: musl@...ts.openwall.com Subject: [PATCH] MIPS big endian and *stat syscalls return value Hello, Thank for a wonderful system library! Revision f61be1f875a2758509d6e9e2cf6f1d9603b28b65 <http://git.musl-libc.org/cgit/musl/commit/arch/mips/syscall_arch.h?id=f61be1f875a2758509d6e9e2cf6f1d9603b28b65> has led to regression with system calls of family *stat on MIPS with big endian byte order. Upon successful completion, the system call returns the number from stat structure instead of 0. _Information: _Binutils 2.23.2/2.24 GCC 4.8.3/4.9.2 musl 1.1.5/1.1.8/HEAD _Code to reproduce problem:_ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main(int argc, char *argv[]) { int fd, res = EXIT_FAILURE, ret; struct stat st; fd = open("/dev/urandom", O_RDONLY); if (fd < 0) { perror("open"); goto out; } ret = fstat(fd, &st); if (ret < 0) { perror("fstat"); goto out_close; } else { printf("ret = %d\n", ret); } res = EXIT_SUCCESS; out_close: close(fd); out: return res; } _Output:_ # test_fstat ret = 265 # strace -s 1024 test_fstat execve("/bin/test_fstat", ["test_fstat"], [/* 7 vars */]) = 0 set_thread_area(0x2ae00764) = 0 set_tid_address(0x2adf96b4) = 150 open("/dev/urandom", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFCHR|0600, st_rdev=makedev(1, 9), ...}) = 0 ioctl(1, TIOCNXCL, {B9600 opost isig icanon echo ...}) = 0 writev(1, [{"ret = 265", 9}, {"\n", 1}], 2ret = 265 ) = 10 close(3) = 0 exit_group(0) = ? +++ exited with 0 +++ The reason of the problem is that the function __stat_fix rewrites register $v0, which is not stored in the parent function. Disassembled code of fstat64 is attached. Patchis attachedalso. Sorry for my english. Content of type "text/html" skipped Download attachment "dis.asm" of type "application/octet-stream" (1927 bytes) View attachment "musl.patch" of type "text/x-patch" (2950 bytes)
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.