hwrng: virtio - unregister device before reset
authorMichael S. Tsirkin <mst@redhat.com>
Thu, 25 Nov 2021 18:00:17 +0000 (13:00 -0500)
committerMichael S. Tsirkin <mst@redhat.com>
Fri, 14 Jan 2022 23:50:52 +0000 (18:50 -0500)
unregister after reset is clearly wrong - device
can be used while it's reset. There's an attempt to
protect against that using hwrng_removed but it
seems racy since access can be in progress
when the flag is set.

Just unregister, then reset seems simpler and cleaner.
NB: we might be able to drop hwrng_removed in a follow-up patch.

Signed-off-by: Laurent Vivier <lvivier@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
drivers/char/hw_random/virtio-rng.c

index b2bf78b..e856df7 100644 (file)
@@ -179,9 +179,9 @@ static void remove_common(struct virtio_device *vdev)
        vi->data_avail = 0;
        vi->data_idx = 0;
        complete(&vi->have_data);
-       virtio_reset_device(vdev);
        if (vi->hwrng_register_done)
                hwrng_unregister(&vi->hwrng);
+       virtio_reset_device(vdev);
        vdev->config->del_vqs(vdev);
        ida_simple_remove(&rng_index_ida, vi->index);
        kfree(vi);