mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
Tighten region size validation.
This commit is contained in:
parent
dfb5da937e
commit
089ae9a58e
@ -1,5 +1,6 @@
|
|||||||
Version 2.02.06 -
|
Version 2.02.06 -
|
||||||
=================================
|
=================================
|
||||||
|
Tighten region size validation.
|
||||||
Ignore empty strings in config files.
|
Ignore empty strings in config files.
|
||||||
Require non-zero regionsize and document parameter on lvcreate man page.
|
Require non-zero regionsize and document parameter on lvcreate man page.
|
||||||
Invalidate cache if composition of VG changed externally.
|
Invalidate cache if composition of VG changed externally.
|
||||||
|
@ -101,6 +101,8 @@ static int _lvconvert_name_params(struct lvconvert_params *lp,
|
|||||||
static int _read_params(struct lvconvert_params *lp, struct cmd_context *cmd,
|
static int _read_params(struct lvconvert_params *lp, struct cmd_context *cmd,
|
||||||
int argc, char **argv)
|
int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
int region_size;
|
||||||
|
|
||||||
memset(lp, 0, sizeof(*lp));
|
memset(lp, 0, sizeof(*lp));
|
||||||
|
|
||||||
if (arg_count(cmd, mirrors_ARG) + arg_count(cmd, snapshot_ARG) != 1) {
|
if (arg_count(cmd, mirrors_ARG) + arg_count(cmd, snapshot_ARG) != 1) {
|
||||||
@ -165,6 +167,7 @@ static int _read_params(struct lvconvert_params *lp, struct cmd_context *cmd,
|
|||||||
* --regionsize is only valid if converting an LV into a mirror.
|
* --regionsize is only valid if converting an LV into a mirror.
|
||||||
* Checked when we know the state of the LV being converted.
|
* Checked when we know the state of the LV being converted.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (arg_count(cmd, regionsize_ARG)) {
|
if (arg_count(cmd, regionsize_ARG)) {
|
||||||
if (arg_sign_value(cmd, regionsize_ARG, 0) ==
|
if (arg_sign_value(cmd, regionsize_ARG, 0) ==
|
||||||
SIGN_MINUS) {
|
SIGN_MINUS) {
|
||||||
@ -173,11 +176,18 @@ static int _read_params(struct lvconvert_params *lp, struct cmd_context *cmd,
|
|||||||
}
|
}
|
||||||
lp->region_size = 2 * arg_uint_value(cmd,
|
lp->region_size = 2 * arg_uint_value(cmd,
|
||||||
regionsize_ARG, 0);
|
regionsize_ARG, 0);
|
||||||
} else
|
} else {
|
||||||
lp->region_size = 2 * find_config_int(cmd->cft->root,
|
region_size = 2 * find_config_int(cmd->cft->root,
|
||||||
"activation/mirror_region_size",
|
"activation/mirror_region_size",
|
||||||
DEFAULT_MIRROR_REGION_SIZE);
|
DEFAULT_MIRROR_REGION_SIZE);
|
||||||
|
if (region_size < 0) {
|
||||||
|
log_error("Negative regionsize in "
|
||||||
|
"configuration file is invalid");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
lp->region_size = region_size;
|
||||||
|
}
|
||||||
|
|
||||||
if (lp->region_size & (lp->region_size - 1)) {
|
if (lp->region_size & (lp->region_size - 1)) {
|
||||||
log_error("Region size (%" PRIu32
|
log_error("Region size (%" PRIu32
|
||||||
") must be a power of 2", lp->region_size);
|
") must be a power of 2", lp->region_size);
|
||||||
|
@ -234,6 +234,7 @@ static int _read_mirror_params(struct lvcreate_params *lp,
|
|||||||
int *pargc, char ***pargv)
|
int *pargc, char ***pargv)
|
||||||
{
|
{
|
||||||
int argc = *pargc;
|
int argc = *pargc;
|
||||||
|
int region_size;
|
||||||
|
|
||||||
if (argc && (unsigned) argc < lp->mirrors) {
|
if (argc && (unsigned) argc < lp->mirrors) {
|
||||||
log_error("Too few physical volumes on "
|
log_error("Too few physical volumes on "
|
||||||
@ -247,10 +248,17 @@ static int _read_mirror_params(struct lvcreate_params *lp,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
lp->region_size = 2 * arg_uint_value(cmd, regionsize_ARG, 0);
|
lp->region_size = 2 * arg_uint_value(cmd, regionsize_ARG, 0);
|
||||||
} else
|
} else {
|
||||||
lp->region_size = 2 * find_config_int(cmd->cft->root,
|
region_size = 2 * find_config_int(cmd->cft->root,
|
||||||
"activation/mirror_region_size",
|
"activation/mirror_region_size",
|
||||||
DEFAULT_MIRROR_REGION_SIZE);
|
DEFAULT_MIRROR_REGION_SIZE);
|
||||||
|
if (region_size < 0) {
|
||||||
|
log_error("Negative regionsize in configuration file "
|
||||||
|
"is invalid");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
lp->region_size = region_size;
|
||||||
|
}
|
||||||
|
|
||||||
if (lp->region_size & (lp->region_size - 1)) {
|
if (lp->region_size & (lp->region_size - 1)) {
|
||||||
log_error("Region size (%" PRIu32 ") must be a power of 2",
|
log_error("Region size (%" PRIu32 ") must be a power of 2",
|
||||||
|
Loading…
Reference in New Issue
Block a user