• Dan Williams's avatar
    libnvdimm, namespace: use a safe lookup for dimm device name · 4f867220
    Dan Williams authored
    The following NULL dereference results from incorrectly assuming that
    ndd is valid in this print:
      struct nvdimm_drvdata *ndd = to_ndd(&nd_region->mapping[i]);
       * Give up if we don't find an instance of a uuid at each
       * position (from 0 to nd_region->ndr_mappings - 1), or if we
       * find a dimm with two instances of the same uuid.
      dev_err(&nd_region->dev, "%s missing label for %pUb\n",
                      dev_name(ndd->dev), nd_label->uuid);
     BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
     IP: nd_region_register_namespaces+0xd67/0x13c0 [libnvdimm]
     PGD 0 P4D 0
     Oops: 0000 [#1] SMP PTI
     CPU: 43 PID: 673 Comm: kworker/u609:10 Not tainted 4.16.0-rc4+ #1
     RIP: 0010:nd_region_register_namespaces+0xd67/0x13c0 [libnvdimm]
     Call Trace:
      ? devres_add+0x2f/0x40
      ? devm_kmalloc+0x52/0x60
      ? nd_region_activate+0x9c/0x320 [libnvdimm]
      nd_region_probe+0x94/0x260 [libnvdimm]
      ? kernfs_add_one+0xe4/0x130
      nvdimm_bus_probe+0x63/0x100 [libnvdimm]
    Switch to using the nvdimm device directly.
    Fixes: 0e3b0d12
     ("libnvdimm, namespace: allow multiple pmem...")
    Cc: <stable@vger.kernel.org>
    Reported-by: default avatarDave Jiang <dave.jiang@intel.com>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>