Search Linux Wireless

Re: [PATCH] p54spi: compensate firmware alignment bug in p54spi_rx

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Friday 27 March 2009 05:50:53 Max Filippov wrote:
> Firmware may insert up to 4 padding bytes after the lmac header,
> but it does not amend the size of SPI data transfer.
> Such packets has correct data size in header, thus referencing
> past the end of allocated skb. Put extra 4 bytes to the end of the
> received skb to compensate for this case.
> 
> Signed-off-by: Max Filippov <jcmvbkbc@xxxxxxxxx>
Acked-by: Christian Lamparter <chunkeey@xxxxxx>

> ---
>  drivers/net/wireless/p54/p54spi.c |   10 +++++++++-
>  1 files changed, 9 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/net/wireless/p54/p54spi.c b/drivers/net/wireless/p54/p54spi.c
> index 5e8011c..35ea0dd 100644
> --- a/drivers/net/wireless/p54/p54spi.c
> +++ b/drivers/net/wireless/p54/p54spi.c
> @@ -381,7 +381,12 @@ static int p54spi_rx(struct p54s_priv *priv)
>  		return 0;
>  	}
>  
> -	skb = dev_alloc_skb(len);
> +
> +	/* Firmware may insert up to 4 padding bytes after the lmac header,
> +	 * but it does not amend the size of SPI data transfer.
> +	 * Such packets has correct data size in header, thus referencing
> +	 * past the end of allocated skb. Reserve extra 4 bytes for this case */
> +	skb = dev_alloc_skb(len + 4);
>  	if (!skb) {
>  		dev_err(&priv->spi->dev, "could not alloc skb");
>  		return 0;
> @@ -389,6 +394,9 @@ static int p54spi_rx(struct p54s_priv *priv)
>  
>  	p54spi_spi_read(priv, SPI_ADRS_DMA_DATA, skb_put(skb, len), len);
>  	p54spi_sleep(priv);
> +	/* Put additional bytes to compensate for the possible
> +	 * alignment-caused truncation */
> +	skb_put(skb, 4);
>  
>  	if (p54_rx(priv->hw, skb) == 0)
>  		dev_kfree_skb(skb);


--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux