git: b3c8ab9ff908 - stable/13 - ses: don't panic if disk elements have really weird descriptors

From: Alan Somers <asomers_at_FreeBSD.org>
Date: Sun, 24 Jul 2022 15:41:41 UTC
The branch stable/13 has been updated by asomers:

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

commit b3c8ab9ff9081748277906a348aff9d331c09092
Author:     Alan Somers <asomers@FreeBSD.org>
AuthorDate: 2022-06-10 22:44:59 +0000
Commit:     Alan Somers <asomers@FreeBSD.org>
CommitDate: 2022-07-24 15:41:18 +0000

    ses: don't panic if disk elements have really weird descriptors
    
    SES allows element descriptors to contain characters like spaces and
    quotes that devfs does not allow to appear in device aliases.  Since SES
    element descriptors are outside of the kernel's control, we should
    gracefully handle a failure to create a device physical path alias.
    
    PR:             264513
    Reported by:    Yuri <yuri@aetern.org>
    Reviewed by:    imp, mav
    Sponsored by:   Axcient
    
    (cherry picked from commit 5f438dd3acba47e54e63b13bfff31a49bcc6ddea)
---
 sys/cam/scsi/scsi_pass.c | 5 +++--
 sys/geom/geom_dev.c      | 4 ++--
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/sys/cam/scsi/scsi_pass.c b/sys/cam/scsi/scsi_pass.c
index e9751e26d8ca..78a9ebe0a640 100644
--- a/sys/cam/scsi/scsi_pass.c
+++ b/sys/cam/scsi/scsi_pass.c
@@ -458,8 +458,9 @@ pass_add_physpath(void *context, int pending)
 			"GEOM::physpath", periph->path) == 0
 	 && strlen(physpath) != 0) {
 		mtx_unlock(mtx);
-		make_dev_physpath_alias(MAKEDEV_WAITOK, &softc->alias_dev,
-					softc->dev, softc->alias_dev, physpath);
+		make_dev_physpath_alias(MAKEDEV_WAITOK | MAKEDEV_CHECKNAME,
+				&softc->alias_dev, softc->dev,
+				softc->alias_dev, physpath);
 		mtx_lock(mtx);
 	}
 
diff --git a/sys/geom/geom_dev.c b/sys/geom/geom_dev.c
index 574cfa9f0215..e52f8b8cccc2 100644
--- a/sys/geom/geom_dev.c
+++ b/sys/geom/geom_dev.c
@@ -273,8 +273,8 @@ g_dev_set_physpath(struct g_consumer *cp)
 		dev = sc->sc_dev;
 		old_alias_dev = sc->sc_alias;
 		alias_devp = (struct cdev **)&sc->sc_alias;
-		make_dev_physpath_alias(MAKEDEV_WAITOK, alias_devp, dev,
-		    old_alias_dev, physpath);
+		make_dev_physpath_alias(MAKEDEV_WAITOK | MAKEDEV_CHECKNAME,
+		    alias_devp, dev, old_alias_dev, physpath);
 	} else if (sc->sc_alias) {
 		destroy_dev((struct cdev *)sc->sc_alias);
 		sc->sc_alias = NULL;