aboutsummaryrefslogtreecommitdiffstats
path: root/src/firejail/run_symlink.c
diff options
context:
space:
mode:
authorLibravatar smitsohu <smitsohu@gmail.com>2019-03-16 23:28:25 +0100
committerLibravatar smitsohu <smitsohu@gmail.com>2019-03-16 23:28:25 +0100
commitda89f57071591ad971d67532313e02ff738d91ac (patch)
treeb09b23dbd111b9f3af43698a63df49fea94d4beb /src/firejail/run_symlink.c
parentMerge branch 'master' of https://github.com/netblue30/firejail (diff)
downloadfirejail-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.c8
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);