Staging: sxg: Fix memory leak in case of allocation failure
* 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>
This commit is contained in:
Родитель
9914f0536f
Коммит
b9d1081a83
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче