DragonFlyBSD Kernel Audit
DF-0030 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/kern/vfs_journal.c b/sys/kern/vfs_journal.c
--- a/sys/kern/vfs_journal.c
+++ b/sys/kern/vfs_journal.c
@@ -1219,6 +1219,7 @@
     char *base;
     int pathlen;
     int index;
+    int retries = 0;
     struct namecache *scan;
 
     /*
@@ -1251,6 +1252,10 @@
 	if (scan->nc_nlen >= index) {
 	    if (base != buf)
 		kfree(base, M_TEMP);
+	    if (++retries > 4) {
+		/* Name topology changed repeatedly; bail rather than spin. */
+		return;
+	    }
 	    goto again;
 	}
 	if (index == pathlen)