Re: [PATCH 2/4] nvme: fix reset uninitialized controller

Sagi Grimberg
2023-01-03T10:44:53Z

On 1/3/23 12:03, Taehee Yoo wrote:
> nvme-fabric controllers can be reset by
> /sys/class/nvme/nvme#/reset_controller
> echo 1 > /sys/class/nvme/nvme#/reset_controller
> The above command will call nvme_sysfs_reset().
>
> This function internally calls ctrl->reset_work synchronously or
> asynchronously.
> At this point, it doesn't sure if the controller will be reset after
> initialization.
>
> So kernel panic would occur because ctrl->reset_work dereferences
> uninitialized values.

This is strange, the reset_work func is assigned earlier than sysfs...

>
> In order to avoid this, nvme_sysfs_reset checks
> the NVME_CTRL_STARTED_ONCE flag. This flag indicates the controller is
> initialized fully. So, reset logic can be executed safely.

Same comment, the reset should fully fence the controller
initialization.