quota: Properly disable quotas when add_dquot_ref() fails
[ Upstream commit 6a4e336379 ]
When add_dquot_ref() fails (usually due to IO error or ENOMEM), we want
to disable quotas we are trying to enable. However dquot_disable() call
was passed just the flags we are enabling so in case flags ==
DQUOT_USAGE_ENABLED dquot_disable() call will just fail with EINVAL
instead of properly disabling quotas. Fix the problem by always passing
DQUOT_LIMITS_ENABLED | DQUOT_USAGE_ENABLED to dquot_disable() in this
case.
Reported-and-tested-by: Ye Bin <yebin10@huawei.com>
Reported-by: syzbot+e633c79ceaecbf479854@syzkaller.appspotmail.com
Signed-off-by: Jan Kara <jack@suse.cz>
Message-Id: <20230605140731.2427629-2-yebin10@huawei.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
df907501ba
commit
8a4f4d47b8
+2
-1
@@ -2415,7 +2415,8 @@ int dquot_load_quota_sb(struct super_block *sb, int type, int format_id,
|
|||||||
|
|
||||||
error = add_dquot_ref(sb, type);
|
error = add_dquot_ref(sb, type);
|
||||||
if (error)
|
if (error)
|
||||||
dquot_disable(sb, type, flags);
|
dquot_disable(sb, type,
|
||||||
|
DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED);
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
out_fmt:
|
out_fmt:
|
||||||
|
|||||||
Reference in New Issue
Block a user