Skip to content

Commit

Permalink
virtio-rng: skip reading when we start to remove the device
Browse files Browse the repository at this point in the history
Before we really unregister the hwrng device, reading will get stuck if
the virtio device is reset. We should return error for reading when we
start to remove the device.

Signed-off-by: Amos Kong <akong@redhat.com>
Reviewed-by: Amit Shah <amit.shah@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
  • Loading branch information
Amos Kong authored and Rusty Russell committed Sep 11, 2014
1 parent 3856e54 commit f498195
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions drivers/char/hw_random/virtio-rng.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ struct virtrng_info {
int index;
bool busy;
bool hwrng_register_done;
bool hwrng_removed;
};


Expand Down Expand Up @@ -68,6 +69,9 @@ static int virtio_read(struct hwrng *rng, void *buf, size_t size, bool wait)
int ret;
struct virtrng_info *vi = (struct virtrng_info *)rng->priv;

if (vi->hwrng_removed)
return -ENODEV;

if (!vi->busy) {
vi->busy = true;
init_completion(&vi->have_data);
Expand Down Expand Up @@ -137,6 +141,7 @@ static void remove_common(struct virtio_device *vdev)
{
struct virtrng_info *vi = vdev->priv;

vi->hwrng_removed = true;
vi->data_avail = 0;
complete(&vi->have_data);
vdev->config->reset(vdev);
Expand Down

0 comments on commit f498195

Please sign in to comment.