diff --git a/apps/src/su.c b/apps/src/su.c index 0c11c520..804fb6a3 100644 --- a/apps/src/su.c +++ b/apps/src/su.c @@ -26,6 +26,12 @@ int main(int argc, char** argv) return EXIT_FAILURE; } + if (setgid(atoi(argv[1])) < 0) + { + perror("setgid"); + return EXIT_FAILURE; + } + if (argc == 2) run_program(default_argv); else run_program(argv + 2); diff --git a/kernel/src/thread/Task.cpp b/kernel/src/thread/Task.cpp index c01ec34b..89da8788 100644 --- a/kernel/src/thread/Task.cpp +++ b/kernel/src/thread/Task.cpp @@ -129,5 +129,5 @@ Descriptor* Task::descriptor_from_fd(int fd, int& error) bool Task::is_superuser() { - return euid == 0; + return euid == 0 || egid == 0; } \ No newline at end of file