Commit 3ca1b311 authored by Miklos Szeredi's avatar Miklos Szeredi
Browse files

fuse: zero initialize inode private data



This is slightly tricky, since the VFS uses non-zeroing allocation to
preserve some fields that are left in a consistent state.

Reported-by: default avatarChunsheng Luo <luochunsheng@ustc.edu>
Closes: https://lore.kernel.org/all/20250818083224.229-1-luochunsheng@ustc.edu/


Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
parent 8c14f208
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -101,14 +101,11 @@ static struct inode *fuse_alloc_inode(struct super_block *sb)
	if (!fi)
		return NULL;

	fi->i_time = 0;
	/* Initialize private data (i.e. everything except fi->inode) */
	BUILD_BUG_ON(offsetof(struct fuse_inode, inode) != 0);
	memset((void *) fi + sizeof(fi->inode), 0, sizeof(*fi) - sizeof(fi->inode));

	fi->inval_mask = ~0;
	fi->nodeid = 0;
	fi->nlookup = 0;
	fi->attr_version = 0;
	fi->orig_ino = 0;
	fi->state = 0;
	fi->submount_lookup = NULL;
	mutex_init(&fi->mutex);
	spin_lock_init(&fi->lock);
	fi->forget = fuse_alloc_forget();