aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Somers <asomers@FreeBSD.org>2022-06-10 22:44:59 +0000
committerAlan Somers <asomers@FreeBSD.org>2022-07-24 15:41:18 +0000
commitb3c8ab9ff9081748277906a348aff9d331c09092 (patch)
tree8949c777f5d772e4dde61dfd67a071ac9ed5feb5
parent504ac101ba2848d79bce3cd3011fea0438b881e2 (diff)
downloadsrc-b3c8ab9ff9081748277906a348aff9d331c09092.tar.gz
src-b3c8ab9ff9081748277906a348aff9d331c09092.zip
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)
-rw-r--r--sys/cam/scsi/scsi_pass.c5
-rw-r--r--sys/geom/geom_dev.c4
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;