#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); }