Toybox expects to be setuid root; setuid some other user confuses the attempt to drop privileges, and we err on the side of avoiding shenanigans.
uid_t uid = getuid(), euid = geteuid();
if (!(which->flags & TOYFLAG_STAYROOT)) {
- if (uid != euid)
- if (!setuid(euid=uid)) perror_exit("setuid"); // drop root
+ if (uid != euid) {
+ if (!setuid(uid)) perror_exit("setuid %d->%d", euid, uid); // drop root
+ else euid = uid;
+ }
} else if (CFG_TOYBOX_DEBUG && uid && which != toy_list)
error_msg("Not installed suid root");