lkml.org 
[lkml]   [2016]   [Jan]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.1 099/127] xen-netfront: update num_queues to real created
    Date
    4.1-stable review patch.  If anyone has any objections, please let me know.

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

    From: Joe Jin <joe.jin@oracle.com>

    [ Upstream commit ca88ea1247dfee094e2467a3578eaec9bdf0833a ]

    Sometimes xennet_create_queues() may failed to created all requested
    queues, we need to update num_queues to real created to avoid NULL
    pointer dereference.

    Signed-off-by: Joe Jin <joe.jin@oracle.com>
    Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: Wei Liu <wei.liu2@citrix.com>
    Cc: Ian Campbell <ian.campbell@citrix.com>
    Cc: David S. Miller <davem@davemloft.net>
    Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/xen-netfront.c | 14 +++++++-------
    1 file changed, 7 insertions(+), 7 deletions(-)

    --- a/drivers/net/xen-netfront.c
    +++ b/drivers/net/xen-netfront.c
    @@ -1710,19 +1710,19 @@ static void xennet_destroy_queues(struct
    }

    static int xennet_create_queues(struct netfront_info *info,
    - unsigned int num_queues)
    + unsigned int *num_queues)
    {
    unsigned int i;
    int ret;

    - info->queues = kcalloc(num_queues, sizeof(struct netfront_queue),
    + info->queues = kcalloc(*num_queues, sizeof(struct netfront_queue),
    GFP_KERNEL);
    if (!info->queues)
    return -ENOMEM;

    rtnl_lock();

    - for (i = 0; i < num_queues; i++) {
    + for (i = 0; i < *num_queues; i++) {
    struct netfront_queue *queue = &info->queues[i];

    queue->id = i;
    @@ -1732,7 +1732,7 @@ static int xennet_create_queues(struct n
    if (ret < 0) {
    dev_warn(&info->netdev->dev,
    "only created %d queues\n", i);
    - num_queues = i;
    + *num_queues = i;
    break;
    }

    @@ -1742,11 +1742,11 @@ static int xennet_create_queues(struct n
    napi_enable(&queue->napi);
    }

    - netif_set_real_num_tx_queues(info->netdev, num_queues);
    + netif_set_real_num_tx_queues(info->netdev, *num_queues);

    rtnl_unlock();

    - if (num_queues == 0) {
    + if (*num_queues == 0) {
    dev_err(&info->netdev->dev, "no queues\n");
    return -EINVAL;
    }
    @@ -1792,7 +1792,7 @@ static int talk_to_netback(struct xenbus
    if (info->queues)
    xennet_destroy_queues(info);

    - err = xennet_create_queues(info, num_queues);
    + err = xennet_create_queues(info, &num_queues);
    if (err < 0)
    goto destroy_ring;


    \
     
     \ /
      Last update: 2016-01-27 21:01    [W:2.683 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site