teknoraver icon

mountbomb

teknoraver | PRO | 02/25/26 10:02:12 AM UTC (Edited) | 0 ⭐ | 15601 👁️ | Never ⏰ | []
C |

1.1 KB

|

None

|

0 👍

/

0 👎

#define _GNU_SOURCE
#include <sched.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <sys/sysinfo.h>
 
#define DIR1 "/tmp/dir1_%d"
#define DIR2 "/tmp/dir2_%d"
 
int main(void)
{
    /* unshare -rm: new mount + user namespace */
    if (getuid() != 0 && unshare(CLONE_NEWNS | CLONE_NEWUSER) == -1) {
        perror("unshare");
        return 1;
    }
 
    int nprocs = get_nprocs();
    int id = 0;
 
    for (int i = 1; i < nprocs; i++) {
        pid_t pid = fork();
        if (pid == -1) {
            perror("fork");
            return 1;
        }
        if (pid == 0) {
            id = i;
            break;
        }
    }
 
    char dir1[32], dir2[32];
    snprintf(dir1, sizeof(dir1), DIR1, id);
    snprintf(dir2, sizeof(dir2), DIR2, id);
    mkdir(dir1, 0755);
    mkdir(dir2, 0755);
 
    while (1) {
        if (mount(dir1, dir2, NULL, MS_BIND, NULL) == -1) {
            fprintf(stderr, "mount --bind %s %s: %s\n", dir1, dir2, strerror(errno));
            return 1;
        }
 
        if (umount(dir2) == -1) {
            fprintf(stderr, "umount %s: %s\n", dir2, strerror(errno));
            return 1;
        }
    }
 
    return 0;
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎