PR 56893: fix input validation when the user moves a new partition to

a totaly different part of the disk. Fix size handling for freshly
added partitions (which would previously use random stack data due to
bogus error checking).
This commit is contained in:
martin 2022-06-20 16:06:38 +00:00
parent 17801ae1f2
commit e58e24d52b
1 changed files with 17 additions and 12 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: label.c,v 1.38 2022/06/19 12:08:31 martin Exp $ */
/* $NetBSD: label.c,v 1.39 2022/06/20 16:06:38 martin Exp $ */
/*
* Copyright 1997 Jonathan Stone
@ -36,7 +36,7 @@
#include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
__RCSID("$NetBSD: label.c,v 1.38 2022/06/19 12:08:31 martin Exp $");
__RCSID("$NetBSD: label.c,v 1.39 2022/06/20 16:06:38 martin Exp $");
#endif
#include <sys/types.h>
@ -261,14 +261,18 @@ edit_fs_start(menudesc *m, void *arg)
start = getpartoff(edit->pset->parts, edit->info.start);
if (edit->info.size != 0) {
/* Try to keep end in the same place */
end = edit->info.start + edit->info.size;
if (end < start)
edit->info.size = edit->pset->parts->pscheme->
max_free_space_at(edit->pset->parts,
edit->info.start);
else
edit->info.size = end - start;
if (start < (edit->info.start+edit->info.size)) {
/* Try to keep end in the same place */
end = edit->info.start + edit->info.size;
if (end < start)
edit->info.size = edit->pset->parts->pscheme->
max_free_space_at(edit->pset->parts,
edit->info.start);
else
edit->info.size = end - start;
} else {
edit->info.size = 0;
}
}
edit->info.start = start;
return 0;
@ -282,8 +286,9 @@ edit_fs_size(menudesc *m, void *arg)
daddr_t size;
/* get original partition data, in case start moved already */
edit->pset->parts->pscheme->get_part_info(edit->pset->parts,
edit->id, &pinfo);
if (!edit->pset->parts->pscheme->get_part_info(edit->pset->parts,
edit->id, &pinfo))
pinfo = edit->info;
/* ask for new size with old start and current values */
size = getpartsize(edit->pset->parts, pinfo.start,
edit->info.start, edit->info.size);