]> Projects (at) Tadryanom (dot) Me - AdrOS.git/commitdiff
vfs: add vfs_require_writable_path checks to VFS mutator functions (P4.2)
authorTulio A M Mendes <[email protected]>
Mon, 25 May 2026 21:12:34 +0000 (18:12 -0300)
committerTulio A M Mendes <[email protected]>
Wed, 3 Jun 2026 04:02:35 +0000 (01:02 -0300)
- 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

src/kernel/fs.c

index a803b4bd9bbe0802450432d20501379b8f83da4c..9268659ce7def16ab70fa39acc7f7936654c97d6 100644 (file)
@@ -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));