Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 11 Jun 2021 18:03:07 GMT
From:      Robert Wing <rew@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: e1dfdff10967 - stable/12 - bectl(8): don't allow creation of boot environments with spaces
Message-ID:  <202106111803.15BI37TY029197@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/12 has been updated by rew:

URL: https://cgit.FreeBSD.org/src/commit/?id=e1dfdff10967d294f8c9acb22812380901be3f80

commit e1dfdff10967d294f8c9acb22812380901be3f80
Author:     Robert Wing <rew@FreeBSD.org>
AuthorDate: 2021-06-03 16:36:11 +0000
Commit:     Robert Wing <rew@FreeBSD.org>
CommitDate: 2021-06-11 17:41:51 +0000

    bectl(8): don't allow creation of boot environments with spaces
    
    Boot environment datasets that contain spaces are not bootable.
    
    When a user attempts to create a boot environment with a space, abort
    the creation and print an error message.
    
    PR:             254441
    Reviewed by:    allanjude
    Differential Revision:  https://reviews.freebsd.org/D30194
    
    (cherry picked from commit 0e6549c8745049e3d6fba3ad748034de2d5cbd2a)
---
 sbin/bectl/bectl.c             | 9 ++++++++-
 sbin/bectl/tests/bectl_test.sh | 4 ++++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/sbin/bectl/bectl.c b/sbin/bectl/bectl.c
index 768d1cd89ac2..0c8b9c313488 100644
--- a/sbin/bectl/bectl.c
+++ b/sbin/bectl/bectl.c
@@ -217,7 +217,10 @@ bectl_cmd_create(int argc, char *argv[])
 	bootenv = *argv;
 
 	err = BE_ERR_SUCCESS;
-	if ((atpos = strchr(bootenv, '@')) != NULL) {
+	if (strchr(bootenv, ' ') != NULL)
+		/* BE datasets with spaces are not bootable */
+		err = BE_ERR_INVALIDNAME;
+	else if ((atpos = strchr(bootenv, '@')) != NULL) {
 		/*
 		 * This is the "create a snapshot variant". No new boot
 		 * environment is to be created here.
@@ -245,6 +248,10 @@ bectl_cmd_create(int argc, char *argv[])
 	switch (err) {
 	case BE_ERR_SUCCESS:
 		break;
+	case BE_ERR_INVALIDNAME:
+		fprintf(stderr,
+		    "bectl create: boot environment name must not contain spaces\n");
+		break;
 	default:
 		if (atpos != NULL)
 			fprintf(stderr,
diff --git a/sbin/bectl/tests/bectl_test.sh b/sbin/bectl/tests/bectl_test.sh
index 4a3fc78db0bc..c23cde13adb5 100755
--- a/sbin/bectl/tests/bectl_test.sh
+++ b/sbin/bectl/tests/bectl_test.sh
@@ -105,6 +105,10 @@ bectl_create_body()
 	atf_check zfs create -o mountpoint=/usr -o canmount=noauto \
 	    ${zpool}/ROOT/default/usr
 
+	# BE datasets with spaces are not bootable, PR 254441.
+	atf_check -e not-empty -s not-exit:0 \
+		bectl -r ${zpool}/ROOT create "foo bar"
+
 	# Test standard creation, creation of a snapshot, and creation from a
 	# snapshot.
 	atf_check bectl -r ${zpool}/ROOT create -e default default2



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202106111803.15BI37TY029197>