quota: check quota type in early stage
Check quota type in early stage so we can avoid many unncessary operations when the type is wrong. Link: https://lore.kernel.org/r/20191008145059.21402-1-cgxu519@mykernel.net Signed-off-by: Chengguang Xu <cgxu519@mykernel.net> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
@@ -60,8 +60,6 @@ static int quota_sync_all(int type)
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (type >= MAXQUOTAS)
|
|
||||||
return -EINVAL;
|
|
||||||
ret = security_quotactl(Q_SYNC, type, 0, NULL);
|
ret = security_quotactl(Q_SYNC, type, 0, NULL);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
iterate_supers(quota_sync_one, &type);
|
iterate_supers(quota_sync_one, &type);
|
||||||
@@ -686,8 +684,6 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id,
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (type >= MAXQUOTAS)
|
|
||||||
return -EINVAL;
|
|
||||||
type = array_index_nospec(type, MAXQUOTAS);
|
type = array_index_nospec(type, MAXQUOTAS);
|
||||||
/*
|
/*
|
||||||
* Quota not supported on this fs? Check this before s_quota_types
|
* Quota not supported on this fs? Check this before s_quota_types
|
||||||
@@ -831,6 +827,9 @@ int kernel_quotactl(unsigned int cmd, const char __user *special,
|
|||||||
cmds = cmd >> SUBCMDSHIFT;
|
cmds = cmd >> SUBCMDSHIFT;
|
||||||
type = cmd & SUBCMDMASK;
|
type = cmd & SUBCMDMASK;
|
||||||
|
|
||||||
|
if (type >= MAXQUOTAS)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* As a special case Q_SYNC can be called without a specific device.
|
* As a special case Q_SYNC can be called without a specific device.
|
||||||
* It will iterate all superblocks that have quota enabled and call
|
* It will iterate all superblocks that have quota enabled and call
|
||||||
|
|||||||
Reference in New Issue
Block a user