diff options
author | dzwdz | 2022-04-14 08:34:50 +0200 |
---|---|---|
committer | dzwdz | 2022-04-14 08:34:50 +0200 |
commit | ced5298a40faf8250759c34c13c8de0f62924d19 (patch) | |
tree | f328c1ab46798a2d24ddde98bfb59dbfa62286cb | |
parent | acf27b6071884c7a0939f26f47d3895d134f5088 (diff) |
init/fs: fix `fs_dir_inject`
the loop wasn't bounder, so was copying garbage - including multiple
null bytes
also, the trailing slash was appended even if the injected path didn't
have one
-rw-r--r-- | src/init/fs/misc.c | 5 | ||||
-rw-r--r-- | src/init/main.c | 4 |
2 files changed, 5 insertions, 4 deletions
diff --git a/src/init/fs/misc.c b/src/init/fs/misc.c index ddb230f..f140910 100644 --- a/src/init/fs/misc.c +++ b/src/init/fs/misc.c @@ -149,10 +149,11 @@ void fs_dir_inject(const char *path) { struct fs_dir_handle h = handles[res.id]; int out_len = 0; - while (h.inject[out_len] != '/') + while (h.inject[out_len] && h.inject[out_len] != '/') + out_len++; + if (h.inject[out_len] == '/') out_len++; memcpy(buf, h.inject, out_len); - buf[out_len++] = '/'; buf[out_len++] = '\0'; if (h.delegate >= 0) { diff --git a/src/init/main.c b/src/init/main.c index b5ef22f..3460417 100644 --- a/src/init/main.c +++ b/src/init/main.c @@ -22,11 +22,11 @@ int main(void) { // allocate bss _syscall_memflag(&_bss_start, &_bss_end - &_bss_start, MEMFLAG_PRESENT); - MOUNT("/init", tar_driver(&_initrd)); + MOUNT("/init/", tar_driver(&_initrd)); MOUNT("/keyboard", ps2_drv()); MOUNT("/vga_tty", ansiterm_drv()); - MOUNT("/bind", fs_passthru(NULL)); + MOUNT("/bind/", fs_passthru(NULL)); if (!_syscall_fork()) { __stdin = __stdout = _syscall_open(argify("/com1")); |