Message ID | 20201015110330.28716-1-jack@suse.cz |
---|---|
State | Awaiting Upstream |
Headers | show |
Series | [v2] ext4: Detect already used quota file early | expand |
On Thu, Oct 15, 2020 at 01:03:30PM +0200, Jan Kara wrote: > When we try to use file already used as a quota file again (for the same > or different quota type), strange things can happen. At the very least > lockdep annotations may be wrong but also inode flags may be wrongly set > / reset. When the file is used for two quota types at once we can even > corrupt the file and likely crash the kernel. Catch all these cases by > checking whether passed file is already used as quota file and bail > early in that case. > > This fixes occasional generic/219 failure due to lockdep complaint. > > Reviewed-by: Andreas Dilger <adilger@dilger.ca> > Reported-by: Ritesh Harjani <riteshh@linux.ibm.com> > Signed-off-by: Jan Kara <jack@suse.cz> Replied to the wrong patch previously. Thanks, applied. - Ted
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index ea425b49b345..d31ae5a87859 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -6042,6 +6042,11 @@ static int ext4_quota_on(struct super_block *sb, int type, int format_id, /* Quotafile not on the same filesystem? */ if (path->dentry->d_sb != sb) return -EXDEV; + + /* Quota already enabled for this file? */ + if (IS_NOQUOTA(d_inode(path->dentry))) + return -EBUSY; + /* Journaling quota? */ if (EXT4_SB(sb)->s_qf_names[type]) { /* Quotafile not in fs root? */