Staging: hv: test return value of VmbusChannelEstablishGpadl()
authorBill Pemberton <wfp5p@virginia.edu>
Wed, 5 May 2010 19:27:37 +0000 (15:27 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 11 May 2010 18:36:13 +0000 (11:36 -0700)
The return value of VmbusChannelEstablishGpadl() was not examined in
Channel.c

Signed-off-by: Bill Pemberton <wfp5p@virginia.edu>
Cc: Hank Janssen <hjanssen@microsoft.com>
Cc: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/hv/Channel.c

index 8c30540b725dc52fe19ad58da64efec13fb5578a..fdd441174f237b8ea5a0e3501dbf63c699384fce 100644 (file)
@@ -175,7 +175,7 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize,
                     void (*OnChannelCallback)(void *context), void *Context)
 {
        struct vmbus_channel_open_channel *openMsg;
-       struct vmbus_channel_msginfo *openInfo;
+       struct vmbus_channel_msginfo *openInfo = NULL;
        void *in, *out;
        unsigned long flags;
        int ret, err = 0;
@@ -218,7 +218,11 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize,
                                         SendRingBufferSize +
                                         RecvRingBufferSize,
                                         &NewChannel->RingBufferGpadlHandle);
-/* FIXME: the value of ret is not checked */
+
+       if (!ret) {
+               err = ret;
+               goto errorout;
+       }
 
        DPRINT_DBG(VMBUS, "channel %p <relid %d gpadl 0x%x send ring %p "
                   "size %d recv ring %p size %d, downstreamoffset %d>",
@@ -250,7 +254,6 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize,
        openMsg->OpenId = NewChannel->OfferMsg.ChildRelId; /* FIXME */
        openMsg->ChildRelId = NewChannel->OfferMsg.ChildRelId;
        openMsg->RingBufferGpadlHandle = NewChannel->RingBufferGpadlHandle;
-       ASSERT(openMsg->RingBufferGpadlHandle);
        openMsg->DownstreamRingBufferPageOffset = SendRingBufferSize >>
                                                  PAGE_SHIFT;
        openMsg->ServerContextAreaGpadlHandle = 0; /* TODO */
@@ -295,6 +298,8 @@ Cleanup:
        return 0;
 
 errorout:
+       RingBufferCleanup(&NewChannel->Outbound);
+       RingBufferCleanup(&NewChannel->Inbound);
        osd_PageFree(out, (SendRingBufferSize + RecvRingBufferSize)
                     >> PAGE_SHIFT);
        kfree(openInfo);