From d27fc2c98ea725e751ccaa61d78797d76b0aed60 Mon Sep 17 00:00:00 2001 From: mlelstv Date: Tue, 1 Oct 2019 10:59:49 +0000 Subject: Don't attach an ld device if the format descriptor is unsupported/unused. --- sys/dev/ic/ld_nvme.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'sys/dev') diff --git a/sys/dev/ic/ld_nvme.c b/sys/dev/ic/ld_nvme.c index c47e9eadcbb..38e7a56306c 100644 --- a/sys/dev/ic/ld_nvme.c +++ b/sys/dev/ic/ld_nvme.c @@ -1,4 +1,4 @@ -/* $NetBSD: ld_nvme.c,v 1.22 2019/04/26 14:28:40 mlelstv Exp $ */ +/* $NetBSD: ld_nvme.c,v 1.23 2019/10/01 10:59:49 mlelstv Exp $ */ /*- * Copyright (C) 2016 NONAKA Kimihiro @@ -26,7 +26,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ld_nvme.c,v 1.22 2019/04/26 14:28:40 mlelstv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ld_nvme.c,v 1.23 2019/10/01 10:59:49 mlelstv Exp $"); #include #include @@ -105,6 +105,19 @@ ld_nvme_attach(device_t parent, device_t self, void *aux) KASSERT(ns); f = &ns->ident->lbaf[NVME_ID_NS_FLBAS(ns->ident->flbas)]; + /* + * NVME1.0e 6.11 Identify command + * + * LBADS values smaller than 9 are not supported, a value + * of zero means that the format is not used. + */ + if (f->lbads < 9) { + if (f->lbads > 0) + aprint_error_dev(self, + "unsupported logical data size %u\n", f->lbads); + return; + } + ld->sc_secsize = 1 << f->lbads; ld->sc_secperunit = ns->ident->nsze; ld->sc_maxxfer = naa->naa_maxphys; -- cgit