Home | History | Annotate | Download | only in test
      1 /* This demonstrates races: kernel may actually open other file then
      2  * you read at strace output. Create /tmp/delme with 10K of zeros and
      3  * 666 mode, then run this under strace. If you see open successfull
      4  * open of /etc/shadow, you know you've seen a race.
      5  */
      6 
      7 #include <stdio.h>
      8 #include <stdlib.h>
      9 #include <string.h>
     10 #include <unistd.h>
     11 #include <sys/mman.h>
     12 #include <sys/types.h>
     13 #include <sys/stat.h>
     14 #include <fcntl.h>
     15 
     16 int main(int argc, char *argv[])
     17 {
     18 	char *c;
     19 	int fd;
     20 
     21 	fd = open("/tmp/delme", O_RDWR);
     22 	c = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
     23 	*c = 0;
     24 
     25 	if (fork()) {
     26 		while (1) {
     27 			strcpy(c, "/etc/passwd");
     28 			strcpy(c, "/etc/shadow");
     29 		}
     30 	} else {
     31 		while (1)
     32 			if ((fd = open(c, 0)) != -1)
     33 				close(fd);
     34 	}
     35 
     36 	return 0;
     37 }
     38