#define _GNU_SOURCE #include #include #include #include #include int main(int argc,char **argv) { struct ucred peer; socklen_t size=sizeof(peer); char reply[8]; if(argc!=2 || strcmp(argv[1],"c01-managed-v7") || getuid()!=53001 || geteuid()!=53001 || getgid()!=53001 || getegid()!=53001 || getgroups(0,0)!=0 || prctl(PR_GET_NO_NEW_PRIVS,0,0,0,0)!=1) return 91; if(fcntl(13,F_GETFD)!=-1) return 92; /* Authority's epoch slot must not leak. */ if(getsockopt(14,SOL_SOCKET,SO_PEERCRED,&peer,&size) || peer.uid || peer.gid || peer.pid<=1) return 93; if(send(14,"FD14",4,MSG_NOSIGNAL)!=4 || recv(14,reply,sizeof(reply),0)!=2 || memcmp(reply,"OK",2)) return 94; return 0; }