2019-10-30 09:17:41

by zhong jiang

[permalink] [raw]
Subject: [PATCH] sfc: should check the return value after allocating memory

kcalloc may fails to allocate memory, hence if it is in that case,
We should drop out in time.

Signed-off-by: zhong jiang <[email protected]>
---
drivers/net/ethernet/sfc/efx.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c
index 2fef740..712380a 100644
--- a/drivers/net/ethernet/sfc/efx.c
+++ b/drivers/net/ethernet/sfc/efx.c
@@ -3040,6 +3040,8 @@ static int efx_init_struct(struct efx_nic *efx,
/* Failure to allocate is not fatal, but may degrade ARFS performance */
efx->rps_hash_table = kcalloc(EFX_ARFS_HASH_TABLE_SIZE,
sizeof(*efx->rps_hash_table), GFP_KERNEL);
+ if (!efx->rps_hash_table)
+ goto fail;
#endif
efx->phy_op = &efx_dummy_phy_operations;
efx->mdio.dev = net_dev;
--
1.7.12.4


2019-10-30 19:17:12

by Edward Cree

[permalink] [raw]
Subject: Re: [PATCH] sfc: should check the return value after allocating memory

On 30/10/2019 09:12, zhong jiang wrote:
> kcalloc may fails to allocate memory, hence if it is in that case,
> We should drop out in time.
>
> Signed-off-by: zhong jiang <[email protected]>
> ---
> drivers/net/ethernet/sfc/efx.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c
> index 2fef740..712380a 100644
> --- a/drivers/net/ethernet/sfc/efx.c
> +++ b/drivers/net/ethernet/sfc/efx.c
> @@ -3040,6 +3040,8 @@ static int efx_init_struct(struct efx_nic *efx,
> /* Failure to allocate is not fatal, but may degrade ARFS performance */
> efx->rps_hash_table = kcalloc(EFX_ARFS_HASH_TABLE_SIZE,
> sizeof(*efx->rps_hash_table), GFP_KERNEL);
> + if (!efx->rps_hash_table)
> + goto fail;
NAK.
As per the comment just above the allocation, if this allocation fails we are
able to continue (albeit with possibly reduced performance), since the code
paths that use efx->rps_hash_table all NULL-check it.

-Ed
> #endif
> efx->phy_op = &efx_dummy_phy_operations;
> efx->mdio.dev = net_dev;
>