Fix a logic bug in makefs lazy inode initialization.
We may need to initialize multiple inode blocks before writing a given inode. makefs(8) was only initializing a single block at a time, so certain inode allocation patterns could lead to a situation where it wrote an inode to an uninitialized block. That inode might be clobbered by a later initialization, resulting in a filesystem image containing directory entries that point to a seemingly unused inode. Reviewed by: imp MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D13505
This commit is contained in:
parent
ae8ef112ad
commit
3836e3592e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=326912
@ -1130,7 +1130,7 @@ ffs_write_inode(union dinode *dp, uint32_t ino, const fsinfo_t *fsopts)
|
||||
* Initialize inode blocks on the fly for UFS2.
|
||||
*/
|
||||
initediblk = ufs_rw32(cgp->cg_initediblk, fsopts->needswap);
|
||||
if (ffs_opts->version == 2 && cgino + INOPB(fs) > initediblk &&
|
||||
while (ffs_opts->version == 2 && cgino + INOPB(fs) > initediblk &&
|
||||
initediblk < ufs_rw32(cgp->cg_niblk, fsopts->needswap)) {
|
||||
memset(buf, 0, fs->fs_bsize);
|
||||
dip = (struct ufs2_dinode *)buf;
|
||||
|
Loading…
Reference in New Issue
Block a user