From: Tulio A M Mendes Date: Mon, 25 May 2026 21:12:34 +0000 (-0300) Subject: vfs: add vfs_require_writable_path checks to VFS mutator functions (P4.2) X-Git-Url: https://projects.tadryanom.me/?a=commitdiff_plain;h=a07c567309a2c25f0970e78ee2cb3e3e455525bd;p=AdrOS.git vfs: add vfs_require_writable_path checks to VFS mutator functions (P4.2) - Add MS_RDONLY check to vfs_create, vfs_mkdir, vfs_unlink, vfs_rmdir - Add MS_RDONLY check to vfs_rename for both old_path and new_path - vfs_truncate already has the check from previous session --- diff --git a/src/kernel/fs.c b/src/kernel/fs.c index a803b4bd..9268659c 100644 --- a/src/kernel/fs.c +++ b/src/kernel/fs.c @@ -505,6 +505,8 @@ fs_node_t* vfs_lookup_parent(const char* path, char* name_out, size_t name_sz) { int vfs_create(const char* path, uint32_t flags, fs_node_t** out) { if (!path || !out) return -EINVAL; + int rc = vfs_require_writable_path(path); + if (rc < 0) return rc; char name[128]; fs_node_t* parent = vfs_lookup_parent(path, name, sizeof(name)); if (!parent) return -ENOENT; @@ -516,6 +518,8 @@ int vfs_create(const char* path, uint32_t flags, fs_node_t** out) { int vfs_mkdir(const char* path) { if (!path) return -EINVAL; + int rc = vfs_require_writable_path(path); + if (rc < 0) return rc; char name[128]; fs_node_t* parent = vfs_lookup_parent(path, name, sizeof(name)); if (!parent) return -ENOENT; @@ -571,6 +575,8 @@ int vfs_mkdirp(const char* path) { int vfs_unlink(const char* path) { if (!path) return -EINVAL; + int rc = vfs_require_writable_path(path); + if (rc < 0) return rc; char name[128]; fs_node_t* parent = vfs_lookup_parent(path, name, sizeof(name)); if (!parent) return -ENOENT; @@ -582,6 +588,8 @@ int vfs_unlink(const char* path) { int vfs_rmdir(const char* path) { if (!path) return -EINVAL; + int rc = vfs_require_writable_path(path); + if (rc < 0) return rc; char name[128]; fs_node_t* parent = vfs_lookup_parent(path, name, sizeof(name)); if (!parent) return -ENOENT; @@ -593,6 +601,10 @@ int vfs_rmdir(const char* path) { int vfs_rename(const char* old_path, const char* new_path) { if (!old_path || !new_path) return -EINVAL; + int rc = vfs_require_writable_path(old_path); + if (rc < 0) return rc; + rc = vfs_require_writable_path(new_path); + if (rc < 0) return rc; char old_name[128], new_name[128]; fs_node_t* old_parent = vfs_lookup_parent(old_path, old_name, sizeof(old_name)); fs_node_t* new_parent = vfs_lookup_parent(new_path, new_name, sizeof(new_name));