|
|
1.1 root 1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <errno.h>
4: #include <unistd.h>
5:
6: #include <sys/syscall.h>
7:
8: #ifndef SYS_set_thread_area
9: #define SYS_set_thread_area 243
10: #endif
11:
12: int main (void)
13: {
14: unsigned long tp;
15: int ret;
16:
17: ret = syscall (SYS_set_thread_area, 0xf0);
18: if (ret != -1 || errno != EINVAL) {
19: perror ("Invalid thread area accepted:");
20: abort();
21: }
22:
23: ret = syscall (SYS_set_thread_area, 0xeddeed00);
24: if (ret != 0) {
25: perror ("Valid thread area not accepted: ");
26: abort ();
27: }
28:
29: asm ("move $pid,%0" : "=r" (tp));
30: tp &= ~0xff;
31:
32: if (tp != 0xeddeed00) {
33: perror ("tls2");
34: abort ();
35: }
36:
37: printf ("pass\n");
38: return EXIT_SUCCESS;
39: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.