]> Projects (at) Tadryanom (dot) Me - AdrOS.git/commit
vfs: fix MS_REMOUNT, mount validation, blockdev locking, and resource leaks
authorTulio A M Mendes <[email protected]>
Tue, 26 May 2026 01:51:06 +0000 (22:51 -0300)
committerTulio A M Mendes <[email protected]>
Wed, 3 Jun 2026 04:02:35 +0000 (01:02 -0300)
commit30861c8c16edb7ed6dc7081d4c93608d83fa7c67
tree545cb108706c3510460d9697691444310118f2a5
parentde6367ed03d597dd491fa617f6458de8c3157ebd
vfs: fix MS_REMOUNT, mount validation, blockdev locking, and resource leaks

High-severity fixes:
- MS_REMOUNT: pass full flags to VFS, store flags & ~MS_REMOUNT in remount branch
- Reject mount replacement with -EBUSY (except with MS_REMOUNT)
- Fix init_mount_fs leak: call kill_sb on failure after fst->mount
- Add MS_RDONLY check in SYSCALL_FTRUNCATE via f->mount_root

Medium-severity fixes:
- Centralize read-only check in vfs_link with vfs_require_writable_path
- Validate mountpoint in init_mount_fs and kconsole mount (must exist and be directory)
- Add spinlock to g_blockdevs with irqsave/irqrestore protection
- Remove const from blockdev_claim/release API (block_device_t* instead of const*)

Files modified:
- src/kernel/syscall.c: MS_REMOUNT fix, ftruncate readonly check
- src/kernel/fs.c: mount replacement rejection, vfs_link readonly check, bdev const removal
- src/kernel/init.c: mountpoint validation, init_mount_fs leak fix, blockdev_init_lock call
- src/kernel/kconsole.c: mountpoint validation
- include/blockdev.h: spinlock include, const removal from API
- src/kernel/blockdev.c: spinlock implementation, const removal from functions
- include/fs.h: const removal from bdev, mount function signatures
- include/ext2.h: const removal from bdev, mount signature
- include/fat.h: const removal from bdev, mount signature
- src/kernel/ext2.c: const removal from mount signature
- src/kernel/fat.c: const removal from mount signature
- src/drivers/virtio_blk.c: const removal from ops functions
- include/kernel/init.h: const removal from init_mount_fs signature

Test results:
- Smoke test: 119/119 PASS
- cppcheck: style-level warnings only (no errors)
13 files changed:
include/blockdev.h
include/ext2.h
include/fat.h
include/fs.h
include/kernel/init.h
src/drivers/virtio_blk.c
src/kernel/blockdev.c
src/kernel/ext2.c
src/kernel/fat.c
src/kernel/fs.c
src/kernel/init.c
src/kernel/kconsole.c
src/kernel/syscall.c