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

Reply via email to