Skip to content

Commit

Permalink
Staging: sxg: Fix memory leak in case of allocation failure
Browse files Browse the repository at this point in the history
* Fix a memory leak if allocation of skb fails in sxg_fill_descriptor_block.
  In sxg_fill_descriptor_block(), if allocation of skb failed in loop,
  we just came out shouting. This rollbacks all the successful operation
  before skb allocation fails and then returns.

Signed-off-by: LinSysSoft Sahara Team <saharaproj@linsyssoft.com>
Signed-off-by: Mithlesh Thukral <mithlesh@linsyssoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Mithlesh Thukral authored and Greg Kroah-Hartman committed Apr 3, 2009
1 parent 9914f05 commit b9d1081
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions drivers/staging/sxg/sxg.c
Original file line number Diff line number Diff line change
Expand Up @@ -4212,6 +4212,21 @@ static int sxg_fill_descriptor_block(struct adapter_t *adapter,
adapter->FreeRcvBufferCount, adapter->AllRcvBlockCount);
return (STATUS_SUCCESS);
no_memory:
for (; i >= 0 ; i--) {
if (RcvDescriptorBlock->Descriptors[i].VirtualAddress) {
RcvDataBufferHdr = (struct sxg_rcv_data_buffer_hdr *)
RcvDescriptorBlock->Descriptors[i].
VirtualAddress;
RcvDescriptorBlock->Descriptors[i].PhysicalAddress =
(dma_addr_t)NULL;
RcvDescriptorBlock->Descriptors[i].VirtualAddress=NULL;
}
SXG_FREE_RCV_DATA_BUFFER(adapter, RcvDataBufferHdr);
}
RcvDescriptorBlockHdr->State = SXG_BUFFER_FREE;
SXG_RETURN_CMD(RingZero, RcvRingInfo, RingDescriptorCmd,
RcvDescriptorBlockHdr);

return (-ENOMEM);
}

Expand Down

0 comments on commit b9d1081

Please sign in to comment.