git: 91a736d7016f - stable/13 - bsdinstall partedit: Use snprintf instead of sprintf for error messages
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 05 Jan 2024 00:23:11 UTC
The branch stable/13 has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=91a736d7016f26b2ec2e64553c2183555cc077d1
commit 91a736d7016f26b2ec2e64553c2183555cc077d1
Author: John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2023-10-16 23:25:38 +0000
Commit: John Baldwin <jhb@FreeBSD.org>
CommitDate: 2024-01-05 00:16:24 +0000
bsdinstall partedit: Use snprintf instead of sprintf for error messages
When generating a message for a dialog box into a static buffer, use
snprintf instead of sprintf to avoid buffer overflows.
Reviewed by: emaste
Differential Revision: https://reviews.freebsd.org/D42240
(cherry picked from commit 6e8bf24073a1867c4b21bd84438a8b01ce91d82d)
---
usr.sbin/bsdinstall/partedit/gpart_ops.c | 37 ++++++++++++++++++++----------
usr.sbin/bsdinstall/partedit/part_wizard.c | 6 +++--
usr.sbin/bsdinstall/partedit/partedit.c | 3 ++-
3 files changed, 31 insertions(+), 15 deletions(-)
diff --git a/usr.sbin/bsdinstall/partedit/gpart_ops.c b/usr.sbin/bsdinstall/partedit/gpart_ops.c
index bc45a0f2d383..7ab5e16c063b 100644
--- a/usr.sbin/bsdinstall/partedit/gpart_ops.c
+++ b/usr.sbin/bsdinstall/partedit/gpart_ops.c
@@ -56,12 +56,13 @@ gpart_show_error(const char *title, const char *explanation, const char *errstr)
while (errmsg[0] == ' ')
errmsg++;
if (errmsg[0] != '\0')
- sprintf(message, "%s%s. %s", explanation,
- strerror(error), errmsg);
+ snprintf(message, sizeof(message), "%s%s. %s",
+ explanation, strerror(error), errmsg);
else
- sprintf(message, "%s%s", explanation, strerror(error));
+ snprintf(message, sizeof(message), "%s%s", explanation,
+ strerror(error));
} else {
- sprintf(message, "%s%s", explanation, errmsg);
+ snprintf(message, sizeof(message), "%s%s", explanation, errmsg);
}
dialog_msgbox(title, message, 0, 0, TRUE);
@@ -245,7 +246,9 @@ parttypemenu:
if (!is_scheme_bootable(items[choice].name)) {
char message[512];
- sprintf(message, "This partition scheme (%s) is not "
+
+ snprintf(message, sizeof(message),
+ "This partition scheme (%s) is not "
"bootable on this platform. Are you sure you want "
"to proceed?", items[choice].name);
dialog_vars.defaultno = TRUE;
@@ -276,7 +279,9 @@ schememenu:
if (!is_scheme_bootable(scheme)) {
char message[512];
- sprintf(message, "This partition scheme (%s) is not "
+
+ snprintf(message, sizeof(message),
+ "This partition scheme (%s) is not "
"bootable on this platform. Are you sure you want "
"to proceed?", scheme);
dialog_vars.defaultno = TRUE;
@@ -458,10 +463,11 @@ gpart_partcode(struct gprovider *pp, const char *fstype)
}
/* Shell out to gpart for partcode for now */
- sprintf(command, "gpart bootcode -p %s -i %s %s",
+ snprintf(command, sizeof(command), "gpart bootcode -p %s -i %s %s",
partcode_path(scheme, fstype), indexstr, pp->lg_geom->lg_name);
if (system(command) != 0) {
- sprintf(message, "Error installing partcode on partition %s",
+ snprintf(message, sizeof(message),
+ "Error installing partcode on partition %s",
pp->lg_name);
dialog_msgbox("Error", message, 0, 0, TRUE);
}
@@ -626,7 +632,9 @@ editpart:
if (strcmp(items[2].text, "/") == 0 && !is_fs_bootable(scheme,
items[0].text)) {
char message[512];
- sprintf(message, "This file system (%s) is not bootable "
+
+ snprintf(message, sizeof(message),
+ "This file system (%s) is not bootable "
"on this system. Are you sure you want to proceed?",
items[0].text);
dialog_vars.defaultno = TRUE;
@@ -1122,7 +1130,8 @@ addpartform:
if (expand_number(items[1].text, &bytes) != 0) {
char error[512];
- sprintf(error, "Invalid size: %s\n", strerror(errno));
+ snprintf(error, sizeof(error), "Invalid size: %s\n",
+ strerror(errno));
dialog_msgbox("Error", error, 0, 0, TRUE);
goto addpartform;
}
@@ -1170,7 +1179,9 @@ addpartform:
/* If this is the root partition, check that this scheme is bootable */
if (strcmp(items[2].text, "/") == 0 && !is_scheme_bootable(scheme)) {
char message[512];
- sprintf(message, "This partition scheme (%s) is not bootable "
+
+ snprintf(message, sizeof(message),
+ "This partition scheme (%s) is not bootable "
"on this platform. Are you sure you want to proceed?",
scheme);
dialog_vars.defaultno = TRUE;
@@ -1184,7 +1195,9 @@ addpartform:
if (strcmp(items[2].text, "/") == 0 && !is_fs_bootable(scheme,
items[0].text)) {
char message[512];
- sprintf(message, "This file system (%s) is not bootable "
+
+ snprintf(message, sizeof(message),
+ "This file system (%s) is not bootable "
"on this system. Are you sure you want to proceed?",
items[0].text);
dialog_vars.defaultno = TRUE;
diff --git a/usr.sbin/bsdinstall/partedit/part_wizard.c b/usr.sbin/bsdinstall/partedit/part_wizard.c
index db689fd223d7..90dba58383e2 100644
--- a/usr.sbin/bsdinstall/partedit/part_wizard.c
+++ b/usr.sbin/bsdinstall/partedit/part_wizard.c
@@ -251,7 +251,8 @@ query:
char warning[512];
int subchoice;
- sprintf(warning, "The existing partition scheme on this "
+ snprintf(warning, sizeof(warning),
+ "The existing partition scheme on this "
"disk (%s) is not bootable on this platform. To install "
"FreeBSD, it must be repartitioned. This will destroy all "
"data on the disk. Are you sure you want to proceed?",
@@ -338,7 +339,8 @@ wizard_makeparts(struct gmesh *mesh, const char *disk, const char *fstype,
HN_DECIMAL);
humanize_number(neededstr, 7, MIN_FREE_SPACE, "B", HN_AUTOSCALE,
HN_DECIMAL);
- sprintf(message, "There is not enough free space on %s to "
+ snprintf(message, sizeof(message),
+ "There is not enough free space on %s to "
"install FreeBSD (%s free, %s required). Would you like "
"to choose another disk or to open the partition editor?",
disk, availablestr, neededstr);
diff --git a/usr.sbin/bsdinstall/partedit/partedit.c b/usr.sbin/bsdinstall/partedit/partedit.c
index c8961d03c5cc..599d2b2ec234 100644
--- a/usr.sbin/bsdinstall/partedit/partedit.c
+++ b/usr.sbin/bsdinstall/partedit/partedit.c
@@ -421,7 +421,8 @@ apply_changes(struct gmesh *mesh)
fstab_path = "/etc/fstab";
fstab = fopen(fstab_path, "w+");
if (fstab == NULL) {
- sprintf(message, "Cannot open fstab file %s for writing (%s)\n",
+ snprintf(message, sizeof(message),
+ "Cannot open fstab file %s for writing (%s)\n",
getenv("PATH_FSTAB"), strerror(errno));
dialog_msgbox("Error", message, 0, 0, TRUE);
return (-1);