qcacmn: Handle error case with HAL SRNG setup
If hal_srng_setup() fails, memory allocated for srng is not freed resulting in a leak. Free the memory in that case. In future, return error to caller and assert when invalid ring ID is used during setup. Change-Id: I6f3a7494a5c5e861652f3a38d18c220cd9a6eef2
This commit is contained in:
@@ -574,6 +574,14 @@ static int dp_srng_setup(struct dp_soc *soc, struct dp_srng *srng,
|
|||||||
|
|
||||||
srng->hal_srng = hal_srng_setup(hal_soc, ring_type, ring_num,
|
srng->hal_srng = hal_srng_setup(hal_soc, ring_type, ring_num,
|
||||||
mac_id, &ring_params);
|
mac_id, &ring_params);
|
||||||
|
|
||||||
|
if (!srng->hal_srng) {
|
||||||
|
qdf_mem_free_consistent(soc->osdev, soc->osdev->dev,
|
||||||
|
srng->alloc_size,
|
||||||
|
srng->base_vaddr_unaligned,
|
||||||
|
srng->base_paddr_unaligned, 0);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -545,6 +545,7 @@ static int hal_get_srng_ring_id(struct hal_soc *hal, int ring_type,
|
|||||||
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
|
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
|
||||||
"%s: ring_num exceeded maximum no. of supported rings\n",
|
"%s: ring_num exceeded maximum no. of supported rings\n",
|
||||||
__func__);
|
__func__);
|
||||||
|
/* TODO: This is a programming error. Assert if this happens */
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user