Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.sbin/sysinst avoid calling snprintf/strlcat with an inpu...
details: https://anonhg.NetBSD.org/src/rev/7c9693e9b114
branches: trunk
changeset: 1003956:7c9693e9b114
user: mrg <mrg%NetBSD.org@localhost>
date: Sun Oct 06 00:05:10 2019 +0000
description:
avoid calling snprintf/strlcat with an input parameter the same
as the output. from martin@. fixes gcc 8 restrict warnings.
diffstat:
usr.sbin/sysinst/Makefile.inc | 4 +-
usr.sbin/sysinst/partman.c | 177 +++++++++++++++++++++++++++--------------
2 files changed, 117 insertions(+), 64 deletions(-)
diffs (truncated from 308 to 300 lines):
diff -r a3f8b226b4b3 -r 7c9693e9b114 usr.sbin/sysinst/Makefile.inc
--- a/usr.sbin/sysinst/Makefile.inc Sat Oct 05 23:35:57 2019 +0000
+++ b/usr.sbin/sysinst/Makefile.inc Sun Oct 06 00:05:10 2019 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile.inc,v 1.24 2019/10/04 09:47:28 mrg Exp $
+# $NetBSD: Makefile.inc,v 1.25 2019/10/06 00:05:10 mrg Exp $
#
# Makefile for sysinst
@@ -127,7 +127,7 @@
.endif
# XXX overlapping strncpy/snprintf buffers!
-COPTS.partman.c+= ${${ACTIVE_CC} == "gcc" && ${HAVE_GCC:U0} == 8:? -Wno-error :}
+#COPTS.partman.c+= ${${ACTIVE_CC} == "gcc" && ${HAVE_GCC:U0} == 8:? -Wno-error :}
# Host to ftp from. Default:
# "ftp.NetBSD.org"
diff -r a3f8b226b4b3 -r 7c9693e9b114 usr.sbin/sysinst/partman.c
--- a/usr.sbin/sysinst/partman.c Sat Oct 05 23:35:57 2019 +0000
+++ b/usr.sbin/sysinst/partman.c Sun Oct 06 00:05:10 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: partman.c,v 1.42 2019/08/13 17:57:49 martin Exp $ */
+/* $NetBSD: partman.c,v 1.43 2019/10/06 00:05:10 mrg Exp $ */
/*
* Copyright 2012 Eugene Lozovoy
@@ -950,7 +950,8 @@
break;
case PMV_MENU_NSECTORS:
if (dev_ptr->manual_geom && !dev_ptr->is_exist)
- snprintf(buf, SSTRSIZE, "%d", dev_ptr->nsectors);
+ snprintf(buf, SSTRSIZE, "%d",
+ dev_ptr->nsectors);
wprintw(m->mw, "%*s %s", -lcol_width,
msg_string(MSG_vnd_spt_fmt), buf);
break;
@@ -962,7 +963,8 @@
break;
case PMV_MENU_NCYLINDERS:
if (dev_ptr->manual_geom && !dev_ptr->is_exist)
- snprintf(buf, SSTRSIZE, "%d", dev_ptr->ncylinders);
+ snprintf(buf, SSTRSIZE, "%d",
+ dev_ptr->ncylinders);
wprintw(m->mw, "%*s %s", -lcol_width,
msg_string(MSG_vnd_cyl_fmt), buf);
break;
@@ -983,10 +985,13 @@
dev_ptr->filepath, dev_ptr->filepath, STRSIZE);
if (dev_ptr->filepath[0] != '/') {
strlcpy(buf, dev_ptr->filepath, MOUNTLEN);
- snprintf(dev_ptr->filepath, MOUNTLEN, "/%s", buf);
+ snprintf(dev_ptr->filepath, MOUNTLEN, "/%s",
+ buf);
}
- if (dev_ptr->filepath[strlen(dev_ptr->filepath) - 1] == '/')
- dev_ptr->filepath[strlen(dev_ptr->filepath) - 1] = '\0';
+ if (dev_ptr->filepath[strlen(dev_ptr->filepath) - 1]
+ == '/')
+ dev_ptr->filepath[strlen(dev_ptr->filepath)
+ - 1] = '\0';
return 0;
case PMV_MENU_EXIST:
dev_ptr->is_exist = !dev_ptr->is_exist;
@@ -1540,15 +1545,18 @@
int i;
char buf[STRSIZE];
lvms_t *dev_ptr = arg;
- strlcpy(buf, msg_string(MSG_auto), STRSIZE);
+ strlcpy(buf, msg_string(MSG_auto), sizeof buf);
switch (opt) {
case PML_MENU_PV:
buf[0] = '\0';
- for (i = 0; i < MAX_LVM_PV; i++)
- if (dev_ptr->pv[i].pm != NULL)
- snprintf(buf, STRSIZE, "%s %s",
- buf, dev_ptr->pv[i].pm_name);
+ for (i = 0; i < MAX_LVM_PV; i++) {
+ if (dev_ptr->pv[i].pm != NULL) {
+ strlcat(buf, " ", sizeof buf);
+ strlcat(buf, dev_ptr->pv[i].pm_name,
+ sizeof buf);
+ }
+ }
wprintw(m->mw, "%-20s: %s",
msg_string(MSG_lvm_disks_fmt), buf);
break;
@@ -1565,13 +1573,15 @@
break;
case PML_MENU_MAXPHYSICALVOLUMES:
if (dev_ptr->maxphysicalvolumes > 0)
- snprintf(buf, STRSIZE, "%d", dev_ptr->maxphysicalvolumes);
+ snprintf(buf, STRSIZE, "%d",
+ dev_ptr->maxphysicalvolumes);
wprintw(m->mw, "%-20s: %s",
msg_string(MSG_lvm_maxpv_fmt), buf);
break;
case PML_MENU_PHYSICALEXTENTSIZE:
if (dev_ptr->physicalextentsize > 0)
- snprintf(buf, STRSIZE, "%dM", dev_ptr->physicalextentsize);
+ snprintf(buf, STRSIZE, "%dM",
+ dev_ptr->physicalextentsize);
wprintw(m->mw, "%-20s: %s",
msg_string(MSG_lvm_extsiz_fmt), buf);
break;
@@ -1872,8 +1882,7 @@
{
int i, ii, error;
uint used_size = 0;
- char params[STRSIZE*3];
- char devs[STRSIZE*3];
+ char params[STRSIZE*3], devs[STRSIZE*3], arg[STRSIZE];
for (i = 0; i < MAX_LVM_VG; i++) {
/* Stage 0: checks */
@@ -1891,26 +1900,37 @@
for (ii = 0; ii < MAX_LVM_PV && ! error; ii++)
if (lvms[i].pv[ii].pm != NULL) {
run_program(RUN_SILENT | RUN_ERROR_OK,
- "lvm pvremove -ffy /dev/r%s",
- (char*)lvms[i].pv[ii].pm_name);
+ "lvm pvremove -ffy /dev/r%s",
+ (char*)lvms[i].pv[ii].pm_name);
error += run_program(RUN_DISPLAY | RUN_PROGRESS,
- "lvm pvcreate -ffy /dev/r%s",
- (char*)lvms[i].pv[ii].pm_name);
+ "lvm pvcreate -ffy /dev/r%s",
+ (char*)lvms[i].pv[ii].pm_name);
if (error)
break;
- snprintf(devs, STRSIZE*3, "%s /dev/r%s", devs, (char*)lvms[i].pv[ii].pm_name);
+ strlcat(devs, " /dev/r", sizeof devs);
+ strlcat(devs, lvms[i].pv[ii].pm_name,
+ sizeof devs);
}
if (error)
continue;
/* Stage 2: creating Volume Groups (VG's) */
- if (lvms[i].maxlogicalvolumes > 0)
- snprintf(params, STRSIZE*3, "%s -l %d", params, lvms[i].maxlogicalvolumes);
- if (lvms[i].maxphysicalvolumes > 0)
- snprintf(params, STRSIZE*3, "%s -p %d", params, lvms[i].maxphysicalvolumes);
- if (lvms[i].physicalextentsize > 0)
- snprintf(params, STRSIZE*3, "%s -s %d", params, lvms[i].physicalextentsize);
- error += run_program(RUN_DISPLAY | RUN_PROGRESS, "lvm vgcreate %s %s %s",
- params, lvms[i].name, devs);
+ if (lvms[i].maxlogicalvolumes > 0) {
+ snprintf(arg, sizeof arg, " -l %d",
+ lvms[i].maxlogicalvolumes);
+ strlcat(params, arg, sizeof params);
+ }
+ if (lvms[i].maxphysicalvolumes > 0) {
+ snprintf(arg, sizeof arg, " -p %d",
+ lvms[i].maxphysicalvolumes);
+ strlcat(params, arg, sizeof params);
+ }
+ if (lvms[i].physicalextentsize > 0) {
+ snprintf(arg, sizeof arg, " -s %d",
+ lvms[i].physicalextentsize);
+ strlcat(params, arg, sizeof params);
+ }
+ error += run_program(RUN_DISPLAY | RUN_PROGRESS,
+ "lvm vgcreate %s %s %s", params, lvms[i].name, devs);
if (error)
continue;
/* Stage 3: creating Logical Volumes (LV's) */
@@ -1919,30 +1939,62 @@
continue;
params[0] = '\0';
- snprintf(params, STRSIZE*3, "%s -C %c", params, lvms[i].lv[ii].contiguous?'y':'n');
- snprintf(params, STRSIZE*3, "%s -M %c", params, lvms[i].lv[ii].persistent?'y':'n');
- snprintf(params, STRSIZE*3, "%s -p %s", params, lvms[i].lv[ii].readonly?"r":"rw");
- snprintf(params, STRSIZE*3, "%s -Z %c", params, lvms[i].lv[ii].zero?'y':'n');
- if (strlen(lvms[i].lv[ii].name) > 0)
- snprintf(params, STRSIZE*3, "%s -n %s", params, lvms[i].lv[ii].name);
- if (strlen(lvms[i].lv[ii].extents) > 0)
- snprintf(params, STRSIZE*3, "%s -l %s", params, lvms[i].lv[ii].extents);
- if (lvms[i].lv[ii].minor > 0)
- snprintf(params, STRSIZE*3, "%s --minor %d", params, lvms[i].lv[ii].minor);
+ snprintf(arg, sizeof arg, " -C %c",
+ lvms[i].lv[ii].contiguous?'y':'n');
+ strlcat(params, arg, sizeof params);
+ snprintf(arg, sizeof arg, " -M %c",
+ lvms[i].lv[ii].persistent?'y':'n');
+ strlcat(params, arg, sizeof params);
+ snprintf(arg, sizeof arg, " -p %s",
+ lvms[i].lv[ii].readonly?"r":"rw");
+ strlcat(params, arg, sizeof params);
+ snprintf(arg, sizeof arg, " -Z %c",
+ lvms[i].lv[ii].zero?'y':'n');
+ strlcat(params, arg, sizeof params);
+ if (strlen(lvms[i].lv[ii].name) > 0) {
+ snprintf(arg, sizeof arg, " -n %s",
+ lvms[i].lv[ii].name);
+ strlcat(params, arg, sizeof params);
+ }
+ if (strlen(lvms[i].lv[ii].extents) > 0) {
+ snprintf(arg, sizeof arg, " -l %s",
+ lvms[i].lv[ii].extents);
+ strlcat(params, arg, sizeof params);
+ }
+ if (lvms[i].lv[ii].minor > 0) {
+ snprintf(arg, sizeof arg, " --minor %d",
+ lvms[i].lv[ii].minor);
+ strlcat(params, arg, sizeof params);
+ }
if (lvms[i].lv[ii].mirrors > 0) {
- snprintf(params, STRSIZE*3, "%s -m %d", params, lvms[i].lv[ii].mirrors);
- if (lvms[i].lv[ii].regionsize > 0)
- snprintf(params, STRSIZE*3, "%s -R %d", params, lvms[i].lv[ii].regionsize);
+ snprintf(arg, sizeof arg, " -m %d",
+ lvms[i].lv[ii].mirrors);
+ strlcat(params, arg, sizeof params);
+ if (lvms[i].lv[ii].regionsize > 0) {
+ snprintf(arg, sizeof arg, " -R %d",
+ lvms[i].lv[ii].regionsize);
+ strlcat(params, arg, sizeof params);
+ }
}
- if (lvms[i].lv[ii].readahead > 0)
- snprintf(params, STRSIZE*3, "%s -r %d", params, lvms[i].lv[ii].readahead);
+ if (lvms[i].lv[ii].readahead > 0) {
+ snprintf(arg, sizeof arg, " -r %d",
+ lvms[i].lv[ii].readahead);
+ strlcat(params, arg, sizeof params);
+ }
if (lvms[i].lv[ii].stripes > 0) {
- snprintf(params, STRSIZE*3, "%s -i %d", params, lvms[i].lv[ii].stripes);
- if (lvms[i].lv[ii].stripesize > 0)
- snprintf(params, STRSIZE*3, "%s -I %d", params, lvms[i].lv[ii].stripesize);
+ snprintf(arg, sizeof arg, " -i %d",
+ lvms[i].lv[ii].stripes);
+ strlcat(params, arg, sizeof params);
+ if (lvms[i].lv[ii].stripesize > 0) {
+ snprintf(arg, sizeof arg, " -I %d",
+ lvms[i].lv[ii].stripesize);
+ strlcat(params, arg, sizeof params);
+ }
}
- snprintf(params, STRSIZE*3, "%s -L %" PRIi64 "M",
- params, lvms[i].lv[ii].size);
+ snprintf(arg, sizeof arg, " -L %" PRIi64 "M",
+ lvms[i].lv[ii].size);
+ strlcat(params, arg, sizeof params);
+
error += run_program(RUN_DISPLAY | RUN_PROGRESS,
"lvm lvcreate %s %s", params, lvms[i].name);
}
@@ -1968,7 +2020,7 @@
pm_getrefdev(struct pm_devs *pm_cur)
{
int i, ii, dev_num, num_devs, num_devs_s;
- char dev[SSTRSIZE]; dev[0] = '\0';
+ char descr[SSTRSIZE], dev[SSTRSIZE] = "";
pm_cur->refdev = NULL;
if (! strncmp(pm_cur->diskdev, "cgd", 3)) {
@@ -1976,11 +2028,11 @@
for (i = 0; i < MAX_CGD; i++)
if (cgds[i].blocked && cgds[i].node == dev_num) {
pm_cur->refdev = &cgds[i];
- snprintf(pm_cur->diskdev_descr,
- sizeof(pm_cur->diskdev_descr),
- "%s (%s, %s-%d)",
- pm_cur->diskdev_descr, cgds[i].pm_name,
+ snprintf(descr, sizeof descr,
+ " (%s, %s-%d)", cgds[i].pm_name,
cgds[i].enc_type, cgds[i].key_size);
+ strlcat(pm_cur->diskdev_descr, descr,
+ sizeof(pm_cur->diskdev_descr));
break;
}
} else if (! strncmp(pm_cur->diskdev, "vnd", 3)) {
@@ -1991,11 +2043,10 @@
vnds[i].pm->parts->pscheme->get_part_device(
vnds[i].pm->parts, vnds[i].pm_part,
dev, sizeof dev, NULL, plain_name, false);
- snprintf(pm_cur->diskdev_descr,
- sizeof(pm_cur->diskdev_descr),
- "%s (%s, %s)",
- pm_cur->diskdev_descr, dev,
- vnds[i].filepath);
+ snprintf(descr, sizeof descr, " (%s, %s)",
+ dev, vnds[i].filepath);
+ strlcat(pm_cur->diskdev_descr, descr,
+ sizeof(pm_cur->diskdev_descr));
break;
}
} else if (! strncmp(pm_cur->diskdev, "raid", 4)) {
@@ -2011,10 +2062,12 @@
else
num_devs++;
}
- snprintf(pm_cur->diskdev_descr,
- sizeof(pm_cur->diskdev_descr),
- "%s (lvl %d, %d disks, %d spare)", pm_cur->diskdev_descr,
- raids[i].raid_level, num_devs, num_devs_s);
+ snprintf(descr, sizeof descr,
Home |
Main Index |
Thread Index |
Old Index