1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-03-16 10:50:46 +03:00

validate region size against page size

This commit is contained in:
Alasdair Kergon 2006-04-28 17:25:54 +00:00
parent 61d8baf8b1
commit 20b71340bc
2 changed files with 17 additions and 1 deletions

View File

@ -102,6 +102,7 @@ static int _read_params(struct lvconvert_params *lp, struct cmd_context *cmd,
int argc, char **argv)
{
int region_size;
int pagesize = getpagesize();
memset(lp, 0, sizeof(*lp));
@ -188,13 +189,20 @@ static int _read_params(struct lvconvert_params *lp, struct cmd_context *cmd,
lp->region_size = region_size;
}
if (lp->region_size % (pagesize >> SECTOR_SHIFT)) {
log_error("Region size (%" PRIu32 ") must be "
"a multiple of machine memory "
"page size (%d)",
lp->region_size, pagesize >> SECTOR_SHIFT);
return 0;
}
if (lp->region_size & (lp->region_size - 1)) {
log_error("Region size (%" PRIu32
") must be a power of 2", lp->region_size);
return 0;
}
if (!lp->region_size) {
log_error("Non-zero region size must be supplied.");
return 0;

View File

@ -235,6 +235,7 @@ static int _read_mirror_params(struct lvcreate_params *lp,
{
int argc = *pargc;
int region_size;
int pagesize = getpagesize();
if (argc && (unsigned) argc < lp->mirrors) {
log_error("Too few physical volumes on "
@ -266,6 +267,13 @@ static int _read_mirror_params(struct lvcreate_params *lp,
return 0;
}
if (lp->region_size % (pagesize >> SECTOR_SHIFT)) {
log_error("Region size (%" PRIu32 ") must be a multiple of "
"machine memory page size (%d)",
lp->region_size, pagesize >> SECTOR_SHIFT);
return 0;
}
if (!lp->region_size) {
log_error("Non-zero region size must be supplied.");
return 0;