quota: Fix maximum quota limit settings
Currently quota format that supports 64-bit usage sets maximum quota limit as 2^64-1. However quota core code uses signed numbers to track usage and even limits themselves are stored in long long. Checking of maximum allowable limits worked by luck until commit14bf61ffe6
(quota: Switch ->get_dqblk() and ->set_dqblk() to use bytes as space units) because variable we compared with was unsigned. After that commit the type we compared against changed to signed and thus checks for maximum limits with the newest VFS quota format started to refuse any non-negative value. Later the problem was inadvertedly fixed by commitb10a08194c
(quota: Store maximum space limit in bytes) because we started to compare against unsigned type as well. Fix possible future problems of this kind by setting maximum limits to 2^63-1 to avoid overflow issues. Reported-by: Carlos Carvalho <carlos@fisica.ufpr.br> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
Родитель
781970240a
Коммит
7e08da50cf
|
@ -117,12 +117,16 @@ static int v2_read_file_info(struct super_block *sb, int type)
|
|||
qinfo = info->dqi_priv;
|
||||
if (version == 0) {
|
||||
/* limits are stored as unsigned 32-bit data */
|
||||
info->dqi_max_spc_limit = 0xffffffffULL << QUOTABLOCK_BITS;
|
||||
info->dqi_max_spc_limit = 0xffffffffLL << QUOTABLOCK_BITS;
|
||||
info->dqi_max_ino_limit = 0xffffffff;
|
||||
} else {
|
||||
/* used space is stored as unsigned 64-bit value in bytes */
|
||||
info->dqi_max_spc_limit = 0xffffffffffffffffULL; /* 2^64-1 */
|
||||
info->dqi_max_ino_limit = 0xffffffffffffffffULL;
|
||||
/*
|
||||
* Used space is stored as unsigned 64-bit value in bytes but
|
||||
* quota core supports only signed 64-bit values so use that
|
||||
* as a limit
|
||||
*/
|
||||
info->dqi_max_spc_limit = 0x7fffffffffffffffLL; /* 2^63-1 */
|
||||
info->dqi_max_ino_limit = 0x7fffffffffffffffLL;
|
||||
}
|
||||
info->dqi_bgrace = le32_to_cpu(dinfo.dqi_bgrace);
|
||||
info->dqi_igrace = le32_to_cpu(dinfo.dqi_igrace);
|
||||
|
|
Загрузка…
Ссылка в новой задаче