Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/distrib/utils/sysinst - avoid dereferencing junk if fstype i...
details: https://anonhg.NetBSD.org/src/rev/6dbe589cd66a
branches: trunk
changeset: 772484:6dbe589cd66a
user: christos <christos%NetBSD.org@localhost>
date: Thu Jan 05 19:43:59 2012 +0000
description:
- avoid dereferencing junk if fstype is out of bounds.
- kill mountnames since it is not used.
diffstat:
distrib/utils/sysinst/defs.h | 5 ++---
distrib/utils/sysinst/disks.c | 20 +++++++++++++++-----
distrib/utils/sysinst/label.c | 11 +++++++----
distrib/utils/sysinst/savenewlabel.c | 23 ++++++++++++++---------
4 files changed, 38 insertions(+), 21 deletions(-)
diffs (166 lines):
diff -r 9ad65e60ca93 -r 6dbe589cd66a distrib/utils/sysinst/defs.h
--- a/distrib/utils/sysinst/defs.h Thu Jan 05 18:59:51 2012 +0000
+++ b/distrib/utils/sysinst/defs.h Thu Jan 05 19:43:59 2012 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: defs.h,v 1.155 2011/11/04 11:27:00 martin Exp $ */
+/* $NetBSD: defs.h,v 1.156 2012/01/05 19:43:59 christos Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -40,8 +40,7 @@
/* System includes needed for this. */
#include <sys/types.h>
#include <sys/disklabel.h>
-extern const char * const fstypenames[];
-extern const char * const mountnames[];
+const char *getfstypename(char *, size_t, uint8_t);
static inline void *
deconst(const void *p)
diff -r 9ad65e60ca93 -r 6dbe589cd66a distrib/utils/sysinst/disks.c
--- a/distrib/utils/sysinst/disks.c Thu Jan 05 18:59:51 2012 +0000
+++ b/distrib/utils/sysinst/disks.c Thu Jan 05 19:43:59 2012 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: disks.c,v 1.117 2011/11/04 11:27:00 martin Exp $ */
+/* $NetBSD: disks.c,v 1.118 2012/01/05 19:43:59 christos Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -47,10 +47,7 @@
#include <ufs/ufs/dinode.h>
#include <ufs/ffs/fs.h>
#define FSTYPENAMES
-#define MOUNTNAMES
-#define static
#include <sys/disklabel.h>
-#undef static
#include <dev/scsipi/scsipi_all.h>
#include <sys/scsiio.h>
@@ -91,6 +88,18 @@
static const char *disk_names[] = { DISK_NAMES, "vnd", NULL };
+const char *
+getfstypename(char *buf, size_t len, uint8_t fstype)
+{
+
+ if (fstype >= __arraycount(fstypenames) ||
+ fstypenames[fstype] == NULL)
+ snprintf(buf, len, "*unknown*%" PRIu8 "*", fstype);
+ else
+ strlcpy(buf, fstypenames[fstype], len);
+ return buf;
+}
+
/* from src/sbin/atactl/atactl.c
* extract_string: copy a block of bytes out of ataparams and make
* a proper string out of it, truncating trailing spaces and preserving
@@ -438,6 +447,7 @@
{
unsigned int poffset, psize, pend;
const char *desc;
+ char buf[128];
static const char *Yes, *No;
partinfo *p = bsdlabel + ptn;
@@ -459,7 +469,7 @@
else
desc = "FFSv1";
else
- desc = fstypenames[p->pi_fstype];
+ desc = getfstypename(buf, sizeof(buf), p->pi_fstype);
#ifdef PART_BOOT
if (ptn == PART_BOOT)
diff -r 9ad65e60ca93 -r 6dbe589cd66a distrib/utils/sysinst/label.c
--- a/distrib/utils/sysinst/label.c Thu Jan 05 18:59:51 2012 +0000
+++ b/distrib/utils/sysinst/label.c Thu Jan 05 19:43:59 2012 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: label.c,v 1.57 2011/07/06 01:20:03 mrg Exp $ */
+/* $NetBSD: label.c,v 1.58 2012/01/05 19:43:59 christos 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.57 2011/07/06 01:20:03 mrg Exp $");
+__RCSID("$NetBSD: label.c,v 1.58 2012/01/05 19:43:59 christos Exp $");
#endif
#include <sys/types.h>
@@ -387,7 +387,9 @@
if (all_fstype_menu == -1) {
for (i = 0; i < nelem(all_fstypes); i++) {
- all_fstypes[i].opt_name = fstypenames[i];
+ char buf[128];
+ all_fstypes[i].opt_name = strdup(getfstypename(buf,
+ sizeof(buf), i));
all_fstypes[i].opt_menu = OPT_NOMENU;
all_fstypes[i].opt_flags = 0;
all_fstypes[i].opt_action = set_fstype;
@@ -472,6 +474,7 @@
{
partinfo *p = arg;
const char *c;
+ char buf[128];
if (m->opts[opt].opt_flags & OPT_IGNORE
&& (opt != PTN_MENU_END || p->pi_fstype == FS_UNUSED)) {
@@ -487,7 +490,7 @@
else
c = "FFSv1";
else
- c = fstypenames[p->pi_fstype];
+ c = getfstypename(buf, sizeof(buf), p->pi_fstype);
wprintw(m->mw, msg_string(MSG_fstype_fmt), c);
break;
case PTN_MENU_START:
diff -r 9ad65e60ca93 -r 6dbe589cd66a distrib/utils/sysinst/savenewlabel.c
--- a/distrib/utils/sysinst/savenewlabel.c Thu Jan 05 18:59:51 2012 +0000
+++ b/distrib/utils/sysinst/savenewlabel.c Thu Jan 05 19:43:59 2012 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: savenewlabel.c,v 1.7 2009/09/20 22:43:00 abs Exp $ */
+/* $NetBSD: savenewlabel.c,v 1.8 2012/01/05 19:43:59 christos Exp $ */
/*
* Copyright 1997 Jonathan Stone
@@ -36,7 +36,7 @@
#include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: savenewlabel.c,v 1.7 2009/09/20 22:43:00 abs Exp $");
+__RCSID("$NetBSD: savenewlabel.c,v 1.8 2012/01/05 19:43:59 christos Exp $");
#endif
#include <sys/types.h>
@@ -86,14 +86,19 @@
(uint32_t)dlsize);
scripting_fprintf(f, "\t:se#%d:%s\\\n", sectorsize, doessf);
for (i = 0; i < nparts; i++) {
- scripting_fprintf(f, "\t:p%c#%" PRIu32 ":o%c#%" PRIu32 ":t%c=%s:",
- 'a'+i, (uint32_t)bsdlabel[i].pi_size,
- 'a'+i, (uint32_t)bsdlabel[i].pi_offset,
- 'a'+i, fstypenames[bsdlabel[i].pi_fstype]);
+ char fstypename[128];
+
+ scripting_fprintf(f, "\t:p%c#%" PRIu32 ":o%c#%" PRIu32
+ ":t%c=%s:", 'a'+i, (uint32_t)bsdlabel[i].pi_size,
+ 'a'+i, (uint32_t)bsdlabel[i].pi_offset, 'a'+i,
+ getfstypename(fstypename, sizeof(fstypename),
+ bsdlabel[i].pi_fstype));
if (PI_ISBSDFS(&bsdlabel[i]))
- scripting_fprintf (f, "b%c#%" PRIu32 ":f%c#%" PRIu32 ":ta=4.2BSD:",
- 'a'+i, (uint32_t)(bsdlabel[i].pi_fsize * bsdlabel[i].pi_frag),
- 'a'+i, (uint32_t)bsdlabel[i].pi_fsize);
+ scripting_fprintf (f, "b%c#%" PRIu32 ":f%c#%" PRIu32
+ ":ta=4.2BSD:", 'a'+i,
+ (uint32_t)(bsdlabel[i].pi_fsize *
+ bsdlabel[i].pi_frag),
+ 'a'+i, (uint32_t)bsdlabel[i].pi_fsize);
if (i < nparts - 1)
scripting_fprintf(f, "\\\n");
Home |
Main Index |
Thread Index |
Old Index