[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