* [PATCH] 3c59x: use netdev_alloc_skb
@ 2008-07-25 19:07 Stephen Hemminger
2008-07-26 18:55 ` Steffen Klassert
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Stephen Hemminger @ 2008-07-25 19:07 UTC (permalink / raw)
To: Jeff Garzik, klassert; +Cc: netdev
Fix possible bug where end of receive buffer could be overwritten.
The allocation needs to allow for the reserved space. This would only happen
if device received packet greater than Ethernet standard MTU.
Change this driver to use netdev_alloc_skb rather than setting skb->dev
directly. For the initial allocation it doesn't need to be GFP_ATOMIC.
Compile tested only.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
--- a/drivers/net/3c59x.c 2008-07-25 11:53:43.000000000 -0700
+++ b/drivers/net/3c59x.c 2008-07-25 12:06:00.000000000 -0700
@@ -1692,12 +1692,14 @@ vortex_open(struct net_device *dev)
vp->rx_ring[i].next = cpu_to_le32(vp->rx_ring_dma + sizeof(struct boom_rx_desc) * (i+1));
vp->rx_ring[i].status = 0; /* Clear complete bit. */
vp->rx_ring[i].length = cpu_to_le32(PKT_BUF_SZ | LAST_FRAG);
- skb = dev_alloc_skb(PKT_BUF_SZ);
+
+ skb = __netdev_alloc_skb(dev, PKT_BUF_SZ + NET_IP_ALIGN,
+ GFP_KERNEL);
vp->rx_skbuff[i] = skb;
if (skb == NULL)
break; /* Bad news! */
- skb->dev = dev; /* Mark as being used by this device. */
- skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */
+
+ skb_reserve(skb, NET_IP_ALIGN); /* Align IP on 16 byte boundaries */
vp->rx_ring[i].addr = cpu_to_le32(pci_map_single(VORTEX_PCI(vp), skb->data, PKT_BUF_SZ, PCI_DMA_FROMDEVICE));
}
if (i != RX_RING_SIZE) {
@@ -2538,7 +2540,7 @@ boomerang_rx(struct net_device *dev)
struct sk_buff *skb;
entry = vp->dirty_rx % RX_RING_SIZE;
if (vp->rx_skbuff[entry] == NULL) {
- skb = dev_alloc_skb(PKT_BUF_SZ);
+ skb = netdev_alloc_skb(dev, PKT_BUF_SZ + NET_IP_ALIGN);
if (skb == NULL) {
static unsigned long last_jif;
if (time_after(jiffies, last_jif + 10 * HZ)) {
@@ -2549,8 +2551,8 @@ boomerang_rx(struct net_device *dev)
mod_timer(&vp->rx_oom_timer, RUN_AT(HZ * 1));
break; /* Bad news! */
}
- skb->dev = dev; /* Mark as being used by this device. */
- skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */
+
+ skb_reserve(skb, NET_IP_ALIGN);
vp->rx_ring[entry].addr = cpu_to_le32(pci_map_single(VORTEX_PCI(vp), skb->data, PKT_BUF_SZ, PCI_DMA_FROMDEVICE));
vp->rx_skbuff[entry] = skb;
}
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] 3c59x: use netdev_alloc_skb
2008-07-25 19:07 [PATCH] 3c59x: use netdev_alloc_skb Stephen Hemminger
@ 2008-07-26 18:55 ` Steffen Klassert
2008-07-30 22:12 ` Steffen Klassert
2008-08-07 6:24 ` Jeff Garzik
2 siblings, 0 replies; 4+ messages in thread
From: Steffen Klassert @ 2008-07-26 18:55 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Jeff Garzik, netdev
On Fri, Jul 25, 2008 at 12:07:22PM -0700, Stephen Hemminger wrote:
> Fix possible bug where end of receive buffer could be overwritten.
> The allocation needs to allow for the reserved space. This would only happen
> if device received packet greater than Ethernet standard MTU.
>
> Change this driver to use netdev_alloc_skb rather than setting skb->dev
> directly. For the initial allocation it doesn't need to be GFP_ATOMIC.
>
> Compile tested only.
>
Looks good.
I'll give it a try as soon as I'm back from OLS next week.
Thanks,
Steffen
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] 3c59x: use netdev_alloc_skb
2008-07-25 19:07 [PATCH] 3c59x: use netdev_alloc_skb Stephen Hemminger
2008-07-26 18:55 ` Steffen Klassert
@ 2008-07-30 22:12 ` Steffen Klassert
2008-08-07 6:24 ` Jeff Garzik
2 siblings, 0 replies; 4+ messages in thread
From: Steffen Klassert @ 2008-07-30 22:12 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Jeff Garzik, netdev
On Fri, Jul 25, 2008 at 12:07:22PM -0700, Stephen Hemminger wrote:
> Fix possible bug where end of receive buffer could be overwritten.
> The allocation needs to allow for the reserved space. This would only happen
> if device received packet greater than Ethernet standard MTU.
>
> Change this driver to use netdev_alloc_skb rather than setting skb->dev
> directly. For the initial allocation it doesn't need to be GFP_ATOMIC.
>
> Compile tested only.
>
> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Acked-by: Steffen Klassert <klassert@mathematik.tu-chemnitz.de>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] 3c59x: use netdev_alloc_skb
2008-07-25 19:07 [PATCH] 3c59x: use netdev_alloc_skb Stephen Hemminger
2008-07-26 18:55 ` Steffen Klassert
2008-07-30 22:12 ` Steffen Klassert
@ 2008-08-07 6:24 ` Jeff Garzik
2 siblings, 0 replies; 4+ messages in thread
From: Jeff Garzik @ 2008-08-07 6:24 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: klassert, netdev
Stephen Hemminger wrote:
> Fix possible bug where end of receive buffer could be overwritten.
> The allocation needs to allow for the reserved space. This would only happen
> if device received packet greater than Ethernet standard MTU.
>
> Change this driver to use netdev_alloc_skb rather than setting skb->dev
> directly. For the initial allocation it doesn't need to be GFP_ATOMIC.
>
> Compile tested only.
>
> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
>
> --- a/drivers/net/3c59x.c 2008-07-25 11:53:43.000000000 -0700
> +++ b/drivers/net/3c59x.c 2008-07-25 12:06:00.000000000 -0700
> @@ -1692,12 +1692,14 @@ vortex_open(struct net_device *dev)
> vp->rx_ring[i].next = cpu_to_le32(vp->rx_ring_dma + sizeof(struct boom_rx_desc) * (i+1));
> vp->rx_ring[i].status = 0; /* Clear complete bit. */
> vp->rx_ring[i].length = cpu_to_le32(PKT_BUF_SZ | LAST_FRAG);
> - skb = dev_alloc_skb(PKT_BUF_SZ);
> +
> + skb = __netdev_alloc_skb(dev, PKT_BUF_SZ + NET_IP_ALIGN,
> + GFP_KERNEL);
> vp->rx_skbuff[i] = skb;
> if (skb == NULL)
> break; /* Bad news! */
> - skb->dev = dev; /* Mark as being used by this device. */
> - skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */
> +
> + skb_reserve(skb, NET_IP_ALIGN); /* Align IP on 16 byte boundaries */
> vp->rx_ring[i].addr = cpu_to_le32(pci_map_single(VORTEX_PCI(vp), skb->data, PKT_BUF_SZ, PCI_DMA_FROMDEVICE));
> }
> if (i != RX_RING_SIZE) {
> @@ -2538,7 +2540,7 @@ boomerang_rx(struct net_device *dev)
> struct sk_buff *skb;
> entry = vp->dirty_rx % RX_RING_SIZE;
> if (vp->rx_skbuff[entry] == NULL) {
> - skb = dev_alloc_skb(PKT_BUF_SZ);
> + skb = netdev_alloc_skb(dev, PKT_BUF_SZ + NET_IP_ALIGN);
> if (skb == NULL) {
> static unsigned long last_jif;
> if (time_after(jiffies, last_jif + 10 * HZ)) {
> @@ -2549,8 +2551,8 @@ boomerang_rx(struct net_device *dev)
> mod_timer(&vp->rx_oom_timer, RUN_AT(HZ * 1));
> break; /* Bad news! */
> }
> - skb->dev = dev; /* Mark as being used by this device. */
> - skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */
> +
> + skb_reserve(skb, NET_IP_ALIGN);
> vp->rx_ring[entry].addr = cpu_to_le32(pci_map_single(VORTEX_PCI(vp), skb->data, PKT_BUF_SZ, PCI_DMA_FROMDEVICE));
applied
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2008-08-07 6:24 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-25 19:07 [PATCH] 3c59x: use netdev_alloc_skb Stephen Hemminger
2008-07-26 18:55 ` Steffen Klassert
2008-07-30 22:12 ` Steffen Klassert
2008-08-07 6:24 ` Jeff Garzik
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).