DragonFlyBSD Kernel Audit
DF-2636 / fix.diff
← back to finding ↓ download raw
--- a/sys/vfs/hammer2/hammer2_inode.c
+++ b/sys/vfs/hammer2/hammer2_inode.c
@@ -789,11 +808,22 @@
 			vp->v_type = VSOCK;
 			break;
 		default:
-			panic("hammer2: unhandled objtype %d",
-			      ip->meta.type);
+			/*
+			 * DF-2636: meta.type is taken from media and is
+			 * not validated on the mount path.  Do not panic
+			 * the kernel on a crafted or corrupted image.
+			 */
+			kprintf("hammer2: unhandled objtype %d inum %ld\n",
+				ip->meta.type, (long)ip->meta.inum);
+			vp->v_type = VBAD;
+			vx_put(vp);
+			vp = NULL;
+			*errorp = EINVAL;
 			break;
 		}
 
+		if (vp == NULL)
+			break;
 		if (ip == pmp->iroot)
 			vsetflags(vp, VROOT);