> -----Original Message-----
> From: Vitaly Kuznetsov [mailto:vkuzn...@redhat.com]
> Sent: Tuesday, January 20, 2015 7:45 AM
> To: KY Srinivasan; de...@linuxdriverproject.org
> Cc: Haiyang Zhang; linux-ker...@vger.kernel.org; Dexuan Cui; Jason Wang;
> Radim Krčmář; Dan Carpenter
> Subject: [PATCH v3 1/3] Drivers: hv: check vmbus_device_create() return
> value in vmbus_process_offer()
> 
> vmbus_device_create() result is not being checked in
> vmbus_process_offer() and it can fail if kzalloc() fails. Add the check and do
> minor cleanup to avoid additional duplication of "free_channel(); return;"
> block.
> 
> Reported-by: Jason Wang <jasow...@redhat.com>
> Signed-off-by: Vitaly Kuznetsov <vkuzn...@redhat.com>

Thanks Vitaly.
Signed-off-by: K. Y. Srinivasan <k...@microsoft.com>
> ---
>  drivers/hv/channel_mgmt.c | 14 +++++++++-----
>  1 file changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c index
> 2c59f03..01f2c2b 100644
> --- a/drivers/hv/channel_mgmt.c
> +++ b/drivers/hv/channel_mgmt.c
> @@ -341,11 +341,10 @@ static void vmbus_process_offer(struct
> work_struct *work)
>                       if (channel->sc_creation_callback != NULL)
>                               channel->sc_creation_callback(newchannel);
> 
> -                     return;
> +                     goto out;
>               }
> 
> -             free_channel(newchannel);
> -             return;
> +             goto err_free_chan;
>       }
> 
>       /*
> @@ -364,6 +363,8 @@ static void vmbus_process_offer(struct work_struct
> *work)
>               &newchannel->offermsg.offer.if_type,
>               &newchannel->offermsg.offer.if_instance,
>               newchannel);
> +     if (!newchannel->device_obj)
> +             goto err_free_chan;
> 
>       /*
>        * Add the new device to the bus. This will kick off device-driver @@
> -379,9 +380,12 @@ static void vmbus_process_offer(struct work_struct
> *work)
>               list_del(&newchannel->listentry);
>               spin_unlock_irqrestore(&vmbus_connection.channel_lock,
> flags);
>               kfree(newchannel->device_obj);
> -
> -             free_channel(newchannel);
> +             goto err_free_chan;
>       }
> +out:
> +     return;
> +err_free_chan:
> +     free_channel(newchannel);
>  }
> 
>  enum {
> --
> 1.9.3

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to