lkml.org 
[lkml]   [2012]   [Nov]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[ 01/66] xen/gntdev: dont leak memory from IOCTL_GNTDEV_MAP_GRANT_REF
    Date
    3.6-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: David Vrabel <david.vrabel@citrix.com>

    commit a67baeb77375199bbd842fa308cb565164dd1f19 upstream.

    map->kmap_ops allocated in gntdev_alloc_map() wasn't freed by
    gntdev_put_map().

    Add a gntdev_free_map() helper function to free everything allocated
    by gntdev_alloc_map().

    Signed-off-by: David Vrabel <david.vrabel@citrix.com>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/xen/gntdev.c | 36 +++++++++++++++++++-----------------
    1 file changed, 19 insertions(+), 17 deletions(-)

    --- a/drivers/xen/gntdev.c
    +++ b/drivers/xen/gntdev.c
    @@ -105,6 +105,21 @@ static void gntdev_print_maps(struct gnt
    #endif
    }

    +static void gntdev_free_map(struct grant_map *map)
    +{
    + if (map == NULL)
    + return;
    +
    + if (map->pages)
    + free_xenballooned_pages(map->count, map->pages);
    + kfree(map->pages);
    + kfree(map->grants);
    + kfree(map->map_ops);
    + kfree(map->unmap_ops);
    + kfree(map->kmap_ops);
    + kfree(map);
    +}
    +
    static struct grant_map *gntdev_alloc_map(struct gntdev_priv *priv, int count)
    {
    struct grant_map *add;
    @@ -142,12 +157,7 @@ static struct grant_map *gntdev_alloc_ma
    return add;

    err:
    - kfree(add->pages);
    - kfree(add->grants);
    - kfree(add->map_ops);
    - kfree(add->unmap_ops);
    - kfree(add->kmap_ops);
    - kfree(add);
    + gntdev_free_map(add);
    return NULL;
    }

    @@ -198,17 +208,9 @@ static void gntdev_put_map(struct grant_
    evtchn_put(map->notify.event);
    }

    - if (map->pages) {
    - if (!use_ptemod)
    - unmap_grant_pages(map, 0, map->count);
    -
    - free_xenballooned_pages(map->count, map->pages);
    - }
    - kfree(map->pages);
    - kfree(map->grants);
    - kfree(map->map_ops);
    - kfree(map->unmap_ops);
    - kfree(map);
    + if (map->pages && !use_ptemod)
    + unmap_grant_pages(map, 0, map->count);
    + gntdev_free_map(map);
    }

    /* ------------------------------------------------------------------ */



    \
     
     \ /
      Last update: 2012-11-15 06:23    [W:2.843 / U:0.820 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site