[PATCH] nvme-pci: avoid dereference of symbol from unloaded module

Ming Lei ming.lei at redhat.com
Thu Nov 2 05:29:27 PDT 2017


On Thu, Nov 02, 2017 at 02:10:16PM +0200, Sagi Grimberg wrote:
> 
> > The 'remove_work' may be scheduled to run after nvme_remove()
> > returns since we can't simply cancel it in nvme_remove() for
> > avoiding deadlock. Once nvme_remove() returns, this module(nvme)
> > can be unloaded.
> > 
> > On the other hand, nvme_put_ctrl() calls ctr->ops->free_ctrl
> > which may point to nvme_pci_free_ctrl() in unloaded module.
> > 
> > This patch avoids this issue by holding the module refcount before
> > scheduling 'remove_work'.
> 
> Why not simply flushing all scheduled works in module exit?

The nvme_wq is shared by all kinds of host(PCI, FC, ...), so
not good to flush all queued work in 'nvme_wq' just before
removing pci host module only.

Not mention 'remove_work' is actually scheduled by system wq
instead of nvme_wq.

-- 
Ming



More information about the Linux-nvme mailing list