Index: sys/kern/vfs_mountroot.c =================================================================== --- sys/kern/vfs_mountroot.c +++ sys/kern/vfs_mountroot.c @@ -580,6 +580,7 @@ int error, fd, len; td = curthread; + fd = -1; error = parse_token(conf, &tok); if (error) @@ -635,9 +636,15 @@ root_mount_mddev = mdio->md_unit; printf(MD_NAME "%u attached to %s\n", root_mount_mddev, mdio->md_file); - error = kern_close(td, fd); - out: + if (fd >= 0) { + int cerror; + + /* Don't leak the fd, but preserve earlier errors. */ + cerror = kern_close(td, fd); + if (error == 0) + error = cerror; + } free(mdio, M_TEMP); return (error); }