diff options
author | 2019-03-16 23:28:25 +0100 | |
---|---|---|
committer | 2019-03-16 23:28:25 +0100 | |
commit | da89f57071591ad971d67532313e02ff738d91ac (patch) | |
tree | b09b23dbd111b9f3af43698a63df49fea94d4beb /src/firejail/run_symlink.c | |
parent | Merge branch 'master' of https://github.com/netblue30/firejail (diff) | |
download | firejail-da89f57071591ad971d67532313e02ff738d91ac.tar.gz firejail-da89f57071591ad971d67532313e02ff738d91ac.tar.zst firejail-da89f57071591ad971d67532313e02ff738d91ac.zip |
minor enhancement: added robustness for setres[gu]id function calls
Diffstat (limited to 'src/firejail/run_symlink.c')
-rw-r--r-- | src/firejail/run_symlink.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/src/firejail/run_symlink.c b/src/firejail/run_symlink.c index e10f90850..a63f29322 100644 --- a/src/firejail/run_symlink.c +++ b/src/firejail/run_symlink.c | |||
@@ -34,11 +34,9 @@ void run_symlink(int argc, char **argv, int run_as_is) { | |||
34 | return; | 34 | return; |
35 | 35 | ||
36 | // drop privileges | 36 | // drop privileges |
37 | gid_t gid = getgid(); | 37 | if (setresgid(-1, getgid(), getgid()) != 0) |
38 | uid_t uid = getuid(); | ||
39 | if (setresgid(gid, gid, gid) != 0) | ||
40 | errExit("setresgid"); | 38 | errExit("setresgid"); |
41 | if (setresuid(uid, uid, uid) != 0) | 39 | if (setresuid(-1, getuid(), getuid()) != 0) |
42 | errExit("setresuid"); | 40 | errExit("setresuid"); |
43 | 41 | ||
44 | // find the real program by looking in PATH | 42 | // find the real program by looking in PATH |
@@ -95,7 +93,7 @@ void run_symlink(int argc, char **argv, int run_as_is) { | |||
95 | umask(orig_umask); | 93 | umask(orig_umask); |
96 | 94 | ||
97 | // desktop integration is not supported for root user; instead, the original program is started | 95 | // desktop integration is not supported for root user; instead, the original program is started |
98 | if (uid == 0 || run_as_is) { | 96 | if (getuid() == 0 || run_as_is) { |
99 | argv[0] = program; | 97 | argv[0] = program; |
100 | execv(program, argv); | 98 | execv(program, argv); |
101 | exit(1); | 99 | exit(1); |