lkml.org 
[lkml]   [2010]   [Jul]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] virtio: fix oops on OOM
    Date
    From: "Michael S. Tsirkin" <mst@redhat.com>

    virtio ring was changed to return an error code on OOM,
    but one caller was missed and still checks for vq->vring.num.
    The fix is just to check for <0 error code.

    Long term it might make sense to change goto add_head to
    just return an error on oom instead, but let's apply
    a minimal fix for 2.6.35.

    Reported-by: Chris Mason <chris.mason@oracle.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
    Tested-by: Chris Mason <chris.mason@oracle.com>
    ---

    diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
    index dd35b34..bffec32 100644
    --- a/drivers/virtio/virtio_ring.c
    +++ b/drivers/virtio/virtio_ring.c
    @@ -164,7 +164,8 @@ int virtqueue_add_buf_gfp(struct virtqueue *_vq,
    gfp_t gfp)
    {
    struct vring_virtqueue *vq = to_vvq(_vq);
    - unsigned int i, avail, head, uninitialized_var(prev);
    + unsigned int i, avail, uninitialized_var(prev);
    + int head;

    START_USE(vq);

    @@ -174,8 +175,8 @@ int virtqueue_add_buf_gfp(struct virtqueue *_vq,
    * buffers, then go indirect. FIXME: tune this threshold */
    if (vq->indirect && (out + in) > 1 && vq->num_free) {
    head = vring_add_indirect(vq, sg, out, in, gfp);
    - if (head != vq->vring.num)
    + if (likely(head >= 0))
    goto add_head;
    }

    BUG_ON(out + in > vq->vring.num);

    \
     
     \ /
      Last update: 2010-07-23 08:21    [W:0.020 / U:185.444 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site