]> granicus.if.org Git - strace/commitdiff
x32: fix decoding of i386 personality lseek syscall
authorDmitry V. Levin <ldv@altlinux.org>
Fri, 4 Dec 2015 16:42:30 +0000 (16:42 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Fri, 4 Dec 2015 16:42:30 +0000 (16:42 +0000)
On x32, tcp->ext_arg is not initialized for i386 personality,
so tcp->u_arg has to be used instead.

* lseek.c (SYS_FUNC(lseek)) [X32]: Handle "current_personality == 1" case.

lseek.c

diff --git a/lseek.c b/lseek.c
index f02158e71ada5f11097c85d2c0bb851137071e63..8d8f21b95ae0cc51958374603a0ab73f8fb8011c 100644 (file)
--- a/lseek.c
+++ b/lseek.c
@@ -16,6 +16,12 @@ SYS_FUNC(lseek)
        int whence;
 
        printfd(tcp, tcp->u_arg[0]);
+# ifdef X32
+       /* tcp->ext_arg is not initialized for i386 personality */
+       if (current_personality == 1)
+               offset = tcp->u_arg[1];
+       else
+# endif
        offset = tcp->ext_arg[1];
        whence = tcp->u_arg[2];
        if (whence == SEEK_SET)