lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20191113080352.55gde2wvsrccf2rp@netronome.com>
Date:   Wed, 13 Nov 2019 09:03:53 +0100
From:   Simon Horman <simon.horman@...ronome.com>
To:     Ioana Ciornei <ioana.ciornei@....com>
Cc:     davem@...emloft.net, netdev@...r.kernel.org
Subject: Re: [PATCH net v3] dpaa2-eth: free already allocated channels on
 probe defer

On Tue, Nov 12, 2019 at 06:21:52PM +0200, Ioana Ciornei wrote:
> The setup_dpio() function tries to allocate a number of channels equal
> to the number of CPUs online. When there are not enough DPCON objects
> already probed, the function will return EPROBE_DEFER. When this
> happens, the already allocated channels are not freed. This results in
> the incapacity of properly probing the next time around.
> Fix this by freeing the channels on the error path.
> 
> Fixes: d7f5a9d89a55 ("dpaa2-eth: defer probe on object allocate")
> Signed-off-by: Ioana Ciornei <ioana.ciornei@....com>

Thanks for the update,

Reviewed-by: Simon Horman <simon.horman@...ronome.com>

> ---
> Changes in v2:
>  - add the proper Fixes tag
> Changes in v3:
>  - cleanup should be done only on EPROBE_DEFER
> 
>  drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
> index 19379bae0144..bf5add954181 100644
> --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
> +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
> @@ -2232,8 +2232,16 @@ static int setup_dpio(struct dpaa2_eth_priv *priv)
>  err_service_reg:
>  	free_channel(priv, channel);
>  err_alloc_ch:
> -	if (err == -EPROBE_DEFER)
> +	if (err == -EPROBE_DEFER) {
> +		for (i = 0; i < priv->num_channels; i++) {
> +			channel = priv->channel[i];
> +			nctx = &channel->nctx;
> +			dpaa2_io_service_deregister(channel->dpio, nctx, dev);
> +			free_channel(priv, channel);
> +		}
> +		priv->num_channels = 0;
>  		return err;
> +	}
>  
>  	if (cpumask_empty(&priv->dpio_cpumask)) {
>  		dev_err(dev, "No cpu with an affine DPIO/DPCON\n");
> -- 
> 1.9.1
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ