aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2020-08-20 20:31:47 +0000
committerKyle Evans <kevans@FreeBSD.org>2021-10-08 05:24:27 +0000
commit4d997b340dd7ee561b2f44bbcef3c532108640e6 (patch)
tree2a4e4501d6871b764441bdca38fca5c66aa6e88f
parent53fdb802567df401b333fa0aa898908ccabaca93 (diff)
downloadsrc-4d997b340dd7ee561b2f44bbcef3c532108640e6.tar.gz
src-4d997b340dd7ee561b2f44bbcef3c532108640e6.zip
When we have a command returned by zfs_nextboot() that is longer
than command in the loader.conf, the latter needs to be nul terminated, otherwise garbage trailer left from zfs_nextboot() will be passed to parse_cmd() together with loader.conf command. While here, reset cmd to empty string if read() returns error. (cherry picked from commit c7dd069c70d465298f14553d981bfe5e2ffd0459)
-rw-r--r--stand/i386/zfsboot/zfsboot.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/stand/i386/zfsboot/zfsboot.c b/stand/i386/zfsboot/zfsboot.c
index e387d4a47c9d..81a6d74abc7b 100644
--- a/stand/i386/zfsboot/zfsboot.c
+++ b/stand/i386/zfsboot/zfsboot.c
@@ -248,7 +248,12 @@ main(void)
fd = open(PATH_DOTCONFIG, O_RDONLY);
if (fd != -1) {
- read(fd, cmd, sizeof (cmd));
+ ssize_t cmdlen;
+
+ if ((cmdlen = read(fd, cmd, sizeof(cmd))) > 0)
+ cmd[cmdlen] = '\0';
+ else
+ *cmd = '\0';
close(fd);
}