Cage: drop root on startup like Sway

wlroots may need setuid to run on DRM if built without (e)logind
support.
This commit is contained in:
Jan Beich 2019-04-25 07:08:04 +00:00 committed by Jente Hidskes
parent 3fb89563ae
commit 61894994f3
No known key found for this signature in database
GPG key ID: 04BE5A29F32D91EA

24
cage.c
View file

@ -65,6 +65,25 @@ spawn_primary_client(char *argv[], pid_t *pid_out)
return true;
}
static bool
drop_permissions(void)
{
if (getuid() != geteuid() || getgid() != getegid()) {
if (setuid(getuid()) != 0 || setgid(getgid()) != 0) {
wlr_log(WLR_ERROR, "Unable to drop root, refusing to start");
return false;
}
}
if (setuid(0) != -1) {
wlr_log(WLR_ERROR, "Unable to drop root (we shouldn't be able to "
"restore it after setuid), refusing to start");
return false;
}
return true;
}
static int
handle_signal(int signal, void *data)
{
@ -184,6 +203,11 @@ main(int argc, char *argv[])
goto end;
}
if (!drop_permissions()) {
ret = 1;
goto end;
}
renderer = wlr_backend_get_renderer(server.backend);
wlr_renderer_init_wl_display(renderer, server.wl_display);