From 38d807f941815e38dd627aea522db4139eaf0cf2 Mon Sep 17 00:00:00 2001 From: kamkow1 Date: Sat, 21 Feb 2026 22:38:50 +0100 Subject: [PATCH] Fix vfs_procgroup_cleanup not handling hash collisions --- kernel/fs/vfs.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/kernel/fs/vfs.c b/kernel/fs/vfs.c index 1653964..37d0ab3 100644 --- a/kernel/fs/vfs.c +++ b/kernel/fs/vfs.c @@ -168,16 +168,21 @@ void vfs_procgroup_cleanup (struct procgroup* procgroup) { for (size_t i = 0; i < lengthof (mount_table.mountpoint_buckets); i++) { struct hash_node_link* link = mount_table.mountpoint_buckets[i]; - struct vfs_mountpoint* vmp = hash_entry (link, struct vfs_mountpoint, mount_table_link); - spin_lock (&vmp->lock); + while (link != NULL) { + struct vfs_mountpoint* vmp = hash_entry (link, struct vfs_mountpoint, mount_table_link); - if (vmp->ownerpg == procgroup) { - vmp->locked = false; - vmp->ownerpg = NULL; + spin_lock (&vmp->lock); + + if (vmp->ownerpg == procgroup) { + vmp->locked = false; + vmp->ownerpg = NULL; + } + + spin_unlock (&vmp->lock); + + link = link->next; } - - spin_unlock (&vmp->lock); } spin_unlock (&mount_table.lock);