aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLibravatar smitsohu <smitsohu@gmail.com>2019-12-23 15:12:08 +0100
committerLibravatar smitsohu <smitsohu@gmail.com>2019-12-23 15:12:08 +0100
commit089919539b656a0a802f8cd2098f1ce33f3911fb (patch)
tree693ce1927f034a5c928d3f4aff132e68ab8c1ebd /src
parentcleanup (diff)
downloadfirejail-089919539b656a0a802f8cd2098f1ce33f3911fb.tar.gz
firejail-089919539b656a0a802f8cd2098f1ce33f3911fb.tar.zst
firejail-089919539b656a0a802f8cd2098f1ce33f3911fb.zip
simplify join timeout
Diffstat (limited to 'src')
-rw-r--r--src/firejail/checkcfg.c4
-rw-r--r--src/firejail/firejail.h2
-rw-r--r--src/firejail/join.c7
3 files changed, 7 insertions, 6 deletions
diff --git a/src/firejail/checkcfg.c b/src/firejail/checkcfg.c
index 6ea92cd9d..d6b591133 100644
--- a/src/firejail/checkcfg.c
+++ b/src/firejail/checkcfg.c
@@ -31,7 +31,7 @@ char *xpra_extra_params = "";
31char *xvfb_screen = "800x600x24"; 31char *xvfb_screen = "800x600x24";
32char *xvfb_extra_params = ""; 32char *xvfb_extra_params = "";
33char *netfilter_default = NULL; 33char *netfilter_default = NULL;
34unsigned join_timeout = 50; // 5 sec (unit is 0.1 sec) 34unsigned long join_timeout = 5000000; // microseconds
35 35
36int checkcfg(int val) { 36int checkcfg(int val) {
37 assert(val < CFG_MAX); 37 assert(val < CFG_MAX);
@@ -217,7 +217,7 @@ int checkcfg(int val) {
217 217
218 // timeout for join option 218 // timeout for join option
219 else if (strncmp(ptr, "join-timeout ", 13) == 0) 219 else if (strncmp(ptr, "join-timeout ", 13) == 0)
220 join_timeout = strtoul(ptr + 13, NULL, 10) * 10; 220 join_timeout = strtoul(ptr + 13, NULL, 10) * 1000000; // seconds to microseconds
221 221
222 else 222 else
223 goto errout; 223 goto errout;
diff --git a/src/firejail/firejail.h b/src/firejail/firejail.h
index 37d8c6883..8b7cfdcdd 100644
--- a/src/firejail/firejail.h
+++ b/src/firejail/firejail.h
@@ -738,7 +738,7 @@ extern char *xpra_extra_params;
738extern char *xvfb_screen; 738extern char *xvfb_screen;
739extern char *xvfb_extra_params; 739extern char *xvfb_extra_params;
740extern char *netfilter_default; 740extern char *netfilter_default;
741extern unsigned join_timeout; 741extern unsigned long join_timeout;
742int checkcfg(int val); 742int checkcfg(int val);
743void print_compiletime_support(void); 743void print_compiletime_support(void);
744 744
diff --git a/src/firejail/join.c b/src/firejail/join.c
index 08120cffe..ddf26e0e7 100644
--- a/src/firejail/join.c
+++ b/src/firejail/join.c
@@ -318,15 +318,16 @@ int is_ready_for_join(const pid_t pid) {
318 return 1; 318 return 1;
319} 319}
320 320
321#define SNOOZE 100000 // sleep interval in microseconds
321void check_join_permission(pid_t pid) { 322void check_join_permission(pid_t pid) {
322 // check if pid belongs to a fully set up firejail sandbox 323 // check if pid belongs to a fully set up firejail sandbox
323 unsigned i; 324 unsigned long i;
324 for (i = 0; is_ready_for_join(pid) == 0; i++) { // give sandbox some time to start up 325 for (i = 0; is_ready_for_join(pid) == 0; i += SNOOZE) { // give sandbox some time to start up
325 if (i >= join_timeout) { 326 if (i >= join_timeout) {
326 fprintf(stderr, "Error: no valid sandbox\n"); 327 fprintf(stderr, "Error: no valid sandbox\n");
327 exit(1); 328 exit(1);
328 } 329 }
329 usleep(100000); // 0.1 sec 330 usleep(SNOOZE);
330 } 331 }
331 // check privileges for non-root users 332 // check privileges for non-root users
332 uid_t uid = getuid(); 333 uid_t uid = getuid();