aboutsummaryrefslogtreecommitdiffstats
path: root/src/firejail/fs_dev.c
diff options
context:
space:
mode:
authorLibravatar Chiraag Nataraj <chiraag.nataraj@gmail.com>2018-06-13 15:41:21 -0400
committerLibravatar Chiraag Nataraj <chiraag.nataraj@gmail.com>2018-06-13 15:41:21 -0400
commitaee73739fa43d05ef3fc7ef52f31c6a6460e042a (patch)
treee140d3df70d7282b73ed10236b3bb4ec89da46d2 /src/firejail/fs_dev.c
parentChange --nousb to --nou2f per suggestion on last commit. (diff)
downloadfirejail-aee73739fa43d05ef3fc7ef52f31c6a6460e042a.tar.gz
firejail-aee73739fa43d05ef3fc7ef52f31c6a6460e042a.tar.zst
firejail-aee73739fa43d05ef3fc7ef52f31c6a6460e042a.zip
Add --keep-dev-shm (undocumented for now).
Diffstat (limited to 'src/firejail/fs_dev.c')
-rw-r--r--src/firejail/fs_dev.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/firejail/fs_dev.c b/src/firejail/fs_dev.c
index 9e287bf27..ff525f0b9 100644
--- a/src/firejail/fs_dev.c
+++ b/src/firejail/fs_dev.c
@@ -171,12 +171,23 @@ static void empty_dev_shm(void) {
171 fs_logger("create /dev/shm"); 171 fs_logger("create /dev/shm");
172} 172}
173 173
174static void mount_dev_shm(void) {
175 mkdir_attr("/dev/shm", 01777, 0, 0);
176 int rv = mount(RUN_DEV_DIR "/shm", "/dev/shm", "none", MS_BIND, "mode=01777,gid=0");
177 if (rv == -1) {
178 fwarning("cannot mount the old /dev/shm in private-dev\n");
179 dbg_test_dir(RUN_DEV_DIR "/shm");
180 empty_dev_shm();
181 return;
182 }
183}
184
174static void process_dev_shm(void) { 185static void process_dev_shm(void) {
175 // Jack audio keeps an Unix socket under (/dev/shm/jack_default_1000_0 or /dev/shm/jack/...) 186 // Jack audio keeps an Unix socket under (/dev/shm/jack_default_1000_0 or /dev/shm/jack/...)
176 // looking for jack socket 187 // looking for jack socket
177 glob_t globbuf; 188 glob_t globbuf;
178 int globerr = glob(RUN_DEV_DIR "/shm/jack*", GLOB_NOSORT, NULL, &globbuf); 189 int globerr = glob(RUN_DEV_DIR "/shm/jack*", GLOB_NOSORT, NULL, &globbuf);
179 if (globerr) { 190 if (globerr && !arg_keep_dev_shm) {
180 empty_dev_shm(); 191 empty_dev_shm();
181 return; 192 return;
182 } 193 }
@@ -184,14 +195,8 @@ static void process_dev_shm(void) {
184 195
185 // if we got here, it means we have a jack server installed 196 // if we got here, it means we have a jack server installed
186 // mount-bind the old /dev/shm 197 // mount-bind the old /dev/shm
187 mkdir_attr("/dev/shm", 01777, 0, 0); 198 mount_dev_shm();
188 int rv = mount(RUN_DEV_DIR "/shm", "/dev/shm", "none", MS_BIND, "mode=01777,gid=0"); 199
189 if (rv == -1) {
190 fwarning("cannot mount the old /dev/shm in private-dev\n");
191 dbg_test_dir(RUN_DEV_DIR "/shm");
192 empty_dev_shm();
193 return;
194 }
195} 200}
196 201
197 202