1 #include "config.h"
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <cap-ng.h>
5 #include <pthread.h>
6 
7 //#define DEBUG 1
8 
9 pthread_t thread1, thread2;
10 
thread1_main(void * arg)11 void *thread1_main(void *arg)
12 {
13 	capng_fill(CAPNG_SELECT_BOTH);
14 #ifdef DEBUG
15 	printf("thread1 filled capabilities\n");
16 #endif
17 	sleep(2);
18 	if (capng_have_capabilities(CAPNG_SELECT_CAPS) < CAPNG_FULL) {
19 		printf("Capabilities missing when there should be some\n");
20 		exit(1);
21 	}
22 #ifdef DEBUG
23 		printf("SUCCESS: Full capabilities reported\n");
24 #endif
25 	return NULL;
26 }
27 
thread2_main(void * arg)28 void *thread2_main(void *arg)
29 {
30 	sleep(1);
31 #ifdef DEBUG
32 	printf("thread2 getting capabilities\n");
33 #endif
34 	capng_get_caps_process();
35 	if (capng_have_capabilities(CAPNG_SELECT_CAPS) != CAPNG_NONE) {
36 		printf("Detected capabilities when there should not be any\n");
37 		exit(1);
38 	}
39 	capng_clear(CAPNG_SELECT_BOTH);
40 #ifdef DEBUG
41 	printf("SUCCESS: No capabilities reported\n");
42 #endif
43 	return NULL;
44 }
45 
main(void)46 int main(void)
47 {
48 	printf("Testing thread separation of capabilities\n");
49 	pthread_create(&thread1, NULL, thread1_main, NULL);
50 	pthread_create(&thread2, NULL, thread2_main, NULL);
51 	sleep(3);
52 	return 0;
53 }
54 
55