Mailing List Archive

sysenter cause a segmentation fault.
A simple code running on PIII 800,kernel 2.6.20 with SEP enabled
causes a segmentation fault.
The slice is as following.

#include <stdio.h>
#include <sys/syacall.h>

int main()
{
unsigned long ret=0;
__asm__ __volatile__ ("movl %1,%%eax\n\tpushl %%ecx\n\t"
"pushl %%edx\n\tpush %%ebp\n\t"
"movl %%esp,%%ebp\n\t" "sysenter\n\t"
"movl %%eax,%0"
:"=m"(ret)
:"b"(SYS_getuid));
printf("%d\n",ret);
return 0;
}

More, when i enabled Kdb and set "bp sysenter_entry",it went with a
catastrophic error errupted.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Re: sysenter cause a segmentation fault. [ In reply to ]
"Ying Chu" <xjtuychu@gmail.com> writes:

> A simple code running on PIII 800,kernel 2.6.20 with SEP enabled
> causes a segmentation fault.

SYSENTER has a hardcoded return address, that is why you cannot be used
anywhere but in the vsyscall trampoline. In addition it doesn't work
on x86-64 for 32bit processes for AMD. The only system call method
supported without the vDSO is int 0x80. Better you just use the vDSO.

> More, when i enabled Kdb and set "bp sysenter_entry",it went with a
> catastrophic error errupted.

The stack and some other kernel state are not set up yet at this point.

-Andi
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/