Hi, Check return value of disk_lookup before dereference as it can return NULL. These are Coverity CID 1452925, 1452951, 1452967.
Other functions using disk_lookup (or the re-defined versions like wdlookup) check the return value already, including in the context of hibernation (sdmmc_scsi_hibernate_io and wd_hibernate_io). Is there something special about the instances below or was it merely oversight? Index: dev/softraid.c =================================================================== RCS file: /cvs/src/sys/dev/softraid.c,v retrieving revision 1.399 diff -u -p -r1.399 softraid.c --- dev/softraid.c 10 Mar 2020 08:41:19 -0000 1.399 +++ dev/softraid.c 11 Mar 2020 12:28:53 -0000 @@ -5068,6 +5068,8 @@ sr_hibernate_io(dev_t dev, daddr_t blkno */ if (op == HIB_INIT) { dv = disk_lookup(&sd_cd, DISKUNIT(dev)); + if (dv == NULL) + return (EIO); sd = (struct sd_softc *)dv; sc = (struct sr_softc *)dv->dv_parent->dv_parent; Index: dev/ic/nvme.c =================================================================== RCS file: /cvs/src/sys/dev/ic/nvme.c,v retrieving revision 1.72 diff -u -p -r1.72 nvme.c --- dev/ic/nvme.c 10 Mar 2020 14:49:20 -0000 1.72 +++ dev/ic/nvme.c 11 Mar 2020 12:28:53 -0000 @@ -1498,6 +1498,8 @@ nvme_hibernate_io(dev_t dev, daddr_t blk /* find nvme softc */ disk = disk_lookup(&sd_cd, DISKUNIT(dev)); + if (disk == NULL) + return (EIO); scsibus = disk->dv_parent; my->sc = (struct nvme_softc *)disk->dv_parent->dv_parent; Index: dev/ic/ahci.c =================================================================== RCS file: /cvs/src/sys/dev/ic/ahci.c,v retrieving revision 1.34 diff -u -p -r1.34 ahci.c --- dev/ic/ahci.c 8 Jul 2019 22:02:59 -0000 1.34 +++ dev/ic/ahci.c 11 Mar 2020 12:28:53 -0000 @@ -3265,6 +3265,8 @@ ahci_hibernate_io(dev_t dev, daddr_t blk /* map dev to an ahci port */ disk = disk_lookup(&sd_cd, DISKUNIT(dev)); + if (disk == NULL) + return (EIO); scsibus = disk->dv_parent; sc = (struct ahci_softc *)disk->dv_parent->dv_parent; -- jasper