/* * CVE-2021-33909: size_t-to-int vulnerability in Linux's filesystem layer * * The program removes the huge directory structure generated by the PoC exploit from Qualys, Inc. * * $Date: 2021/07/24 $ */ #include #include #include #include #include #include #define die() do { \ fprintf(stderr, "died in %s: %u\n", __func__, __LINE__); \ exit(EXIT_FAILURE); \ } while (0) static const char *bigdir; static char onedir[NAME_MAX + 1]; u_int c = 0; int cd; int rm; int main(int argc, char **argv) { if (argc != 2) die(); bigdir = argv[1]; if (*bigdir != '/') die(); if (sizeof(onedir) != 256) die(); memset(onedir, '\\', sizeof(onedir)-1); if (onedir[sizeof(onedir)-1] != '\0') die(); if (chdir(bigdir)) die(); while(1) { cd = chdir(onedir); c++; printf("cd = %d, c = %d\n", cd, c); if(cd != 0) break; } while(c > 1) { cd = chdir(".."); rm = rmdir(onedir); c--; printf("cd = %d, rm = %d, c = %d\n", cd, rm, c); } die(); }