OpenCloudOS-Kernel/arch/x86/ia32
Roland McGrath c09249f8d1 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).  Test program:

	/* gcc -o int80-badsys -m32 -g int80-badsys.c
	   Run on x86-64 kernel.
	   Note to reproduce the bug you need auditd never to have started.  */

	#include <errno.h>
	#include <stdio.h>

	int
	main (void)
	{
	  long res;
	  asm ("int $0x80" : "=a" (res) : "0" (99999));
	  printf ("bad syscall returns %ld\n", res);
	  return res != -ENOSYS;
	}

The fix makes the int $0x80 path match the sysenter and syscall paths.

Reported-by: Dmitry V. Levin <ldv@altlinux.org>
Signed-off-by: Roland McGrath <roland@redhat.com>
2009-02-06 18:22:29 -08:00
..
Makefile x86: compat_binfmt_elf 2008-01-30 13:31:55 +01:00
audit.c x86: coding style fixes in arch/x86/ia32/audit.c 2008-01-30 13:32:54 +01:00
ia32_aout.c CRED: Make execve() take advantage of copy-on-write credentials 2008-11-14 10:39:24 +11:00
ia32_signal.c x86: introducing asm/sys_ia32.h 2008-12-29 13:18:40 +01:00
ia32entry.S x86-64: fix int $0x80 -ENOSYS return 2009-02-06 18:22:29 -08:00
ipc32.c x86: introducing asm/sys_ia32.h 2008-12-29 13:18:40 +01:00
sys_ia32.c x86: introducing asm/sys_ia32.h 2008-12-29 13:18:40 +01:00