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: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Sun, 19 Jun 2011 13:53:41 +0200
From:	Eric Dumazet <eric.dumazet@...il.com>
To:	Richard Cochran <richardcochran@...il.com>
Cc:	netdev@...r.kernel.org, David Miller <davem@...emloft.net>,
	John Linn <john.linn@...inx.com>
Subject: Re: [PATCH 03/11] emaclite: enable transmit and receive time
 stamping.

Le dimanche 19 juin 2011 à 13:19 +0200, Richard Cochran a écrit :
> This patch enables software (and phy device) time stamping. Since this
> MAC uses phylib, adding the hooks make hardware time stamping in the phy
> possible.
> 
> Compile tested only.
> 
> Cc: John Linn <john.linn@...inx.com>
> Signed-off-by: Richard Cochran <richard.cochran@...cron.at>
> ---
>  drivers/net/xilinx_emaclite.c |    9 +++++++--
>  1 files changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/xilinx_emaclite.c b/drivers/net/xilinx_emaclite.c
> index 372572c..ae029d0 100644
> --- a/drivers/net/xilinx_emaclite.c
> +++ b/drivers/net/xilinx_emaclite.c
> @@ -647,7 +647,8 @@ static void xemaclite_rx_handler(struct net_device *dev)
>  	dev->stats.rx_packets++;
>  	dev->stats.rx_bytes += len;
>  
> -	netif_rx(skb);		/* Send the packet upstream */
> +	if (!skb_defer_rx_timestamp(skb))
> +		netif_rx(skb);	/* Send the packet upstream */
>  }
>  
>  /**
> @@ -1029,15 +1030,19 @@ static int xemaclite_send(struct sk_buff *orig_skb, struct net_device *dev)
>  	spin_lock_irqsave(&lp->reset_lock, flags);
>  	if (xemaclite_send_data(lp, (u8 *) new_skb->data, len) != 0) {
>  		/* If the Emaclite Tx buffer is busy, stop the Tx queue and
> -		 * defer the skb for transmission at a later point when the
> +		 * defer the skb for transmission during the ISR, after the
>  		 * current transmission is complete */
>  		netif_stop_queue(dev);
>  		lp->deferred_skb = new_skb;
>  		spin_unlock_irqrestore(&lp->reset_lock, flags);

Since you unlock reset_lock right here, there is no guarantee something
wont eat 'deferred_skb', so you might manipulate a freed skb after this
point.

> +		/* Take the time stamp now, since we can't do this in an ISR. */
> +		skb_tx_timestamp(new_skb);
>  		return 0;
>  	}
>  	spin_unlock_irqrestore(&lp->reset_lock, flags);
>  
> +	skb_tx_timestamp(new_skb);
> +

this one is ok.

>  	dev->stats.tx_bytes += len;
>  	dev_kfree_skb(new_skb);
>  



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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ