Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-9]: src/usr.sbin/sysinst Pull up following revision(s) (requested...



details:   https://anonhg.NetBSD.org/src/rev/a872e1b0db3d
branches:  netbsd-9
changeset: 367696:a872e1b0db3d
user:      msaitoh <msaitoh%NetBSD.org@localhost>
date:      Wed Jun 22 23:48:54 2022 +0000

description:
Pull up following revision(s) (requested by martin in ticket #1476):
        usr.sbin/sysinst/label.c: revision 1.39
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).

diffstat:

 usr.sbin/sysinst/label.c |  29 +++++++++++++++++------------
 1 files changed, 17 insertions(+), 12 deletions(-)

diffs (57 lines):

diff -r 0bcdf431c29f -r a872e1b0db3d usr.sbin/sysinst/label.c
--- a/usr.sbin/sysinst/label.c  Fri Jun 17 15:26:31 2022 +0000
+++ b/usr.sbin/sysinst/label.c  Wed Jun 22 23:48:54 2022 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: label.c,v 1.10.2.7 2021/05/12 06:53:55 msaitoh Exp $   */
+/*     $NetBSD: label.c,v 1.10.2.8 2022/06/22 23:48:54 msaitoh 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.10.2.7 2021/05/12 06:53:55 msaitoh Exp $");
+__RCSID("$NetBSD: label.c,v 1.10.2.8 2022/06/22 23:48:54 msaitoh Exp $");
 #endif
 
 #include <sys/types.h>
@@ -258,14 +258,18 @@
 
        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;
@@ -279,8 +283,9 @@
        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);



Home | Main Index | Thread Index | Old Index