aboutsummaryrefslogtreecommitdiff
path: root/tests/nixos/setuid/fchmodat2-suid.c
blob: 931489ad72ab789d6909387f5a89c499b74963cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/syscall.h>
#include <errno.h>
#include <unistd.h>
#include <assert.h>

int main(void) {
    char *name = getenv("out");
    FILE *fd = fopen(name, "w");
    fprintf(fd, "henlo :3");
    fclose(fd);

    // FIXME use something nicer here that's less
    // platform-dependent as soon as we go to 24.05
    // and the glibc is new enough to support fchmodat2
    long rs = syscall(452, NULL, name, S_ISUID, 0);
    assert(rs == -1);
    assert(errno == EPERM);
}