Fascinating. The problem is that pipe2() is not actually returning -1 and setting errno = ENOSYS like it should. Instead, it is returning 331, which is __NR_pipe2, and leaving errno == 0.
This affects every x86_64 kernel from v2.6.26 (8ab32bb) through v2.6.29-rc3, and was fixed by commit c09249f8d1b84344eca882547afdbffee8c09d14 Author: Roland McGrath <rol...@redhat.com> Date: Fri Feb 6 18:15:18 2009 -0800 x86-64: fix int $0x80 -ENOSYS return One of my past fixes to this code introduced a different new bug. When using 32-bit "int $0x80" entry for a bogus syscall number, the return value is not correctly set to -ENOSYS. This only happens when neither syscall-audit nor syscall tracing is enabled (i.e., never seen if auditd ever started). The fix makes the int $0x80 path match the sysenter and syscall paths. Reported-by: Dmitry V. Levin <l...@altlinux.org> Signed-off-by: Roland McGrath <rol...@redhat.com> -- Jaunty i386 popen() misbehaves on x86_64 kernel 2.6.26 https://bugs.launchpad.net/bugs/339743 You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs