uaf-close-while-blocked-in-read.cpp 669 B

123456789101112131415161718192021222324252627282930
  1. #include <pthread.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. int pipefds[2];
  6. int main(int, char**)
  7. {
  8. pipe(pipefds);
  9. pthread_t tid;
  10. pthread_create(
  11. &tid, nullptr, [](void*) -> void* {
  12. sleep(1);
  13. printf("Second thread closing pipes!\n");
  14. close(pipefds[0]);
  15. close(pipefds[1]);
  16. pthread_exit(nullptr);
  17. return nullptr;
  18. },
  19. nullptr);
  20. printf("First thread doing a blocking read from pipe...\n");
  21. char buffer[16];
  22. int nread = read(pipefds[0], buffer, sizeof(buffer));
  23. printf("Ok, read %d bytes from pipe\n", nread);
  24. return 0;
  25. }