Displaying 20 results from an estimated 29 matches for "skb_headroom".
2023 Mar 06
0
[RFC PATCH v2 1/4] virtio/vsock: fix 'rx_bytes'/'fwd_cnt' calculation
On Sun, Mar 05, 2023 at 11:06:26PM +0300, Arseniy Krasnov wrote:
>Substraction of 'skb->len' is redundant here: 'skb_headroom()' is delta
>between 'data' and 'head' pointers, e.g. it is number of bytes returned
>to user (of course accounting size of header). 'skb->len' is number of
>bytes rest in buffer.
>
>Fixes: 71dc9ec9ac7d ("virtio/vsock: replace virtio_vsock_pkt with...
2017 Nov 02
2
Possible unsafe usage of skb->cb in virtio-net
...milar
> internally to your driver, rather than changing the SKB data pointers.
What virtio does is this:
can_push = vi->any_header_sg &&
!((unsigned long)skb->data & (__alignof__(*hdr) - 1)) &&
!skb_header_cloned(skb) && skb_headroom(skb) >= hdr_len;
/* Even if we can, don't push here yet as this would skew
* csum_start offset below. */
if (can_push)
hdr = (struct virtio_net_hdr_mrg_rxbuf *)(skb->data - hdr_len);
else
hdr = skb_vnet_hdr(skb);
This does...
2017 Nov 02
2
Possible unsafe usage of skb->cb in virtio-net
...milar
> internally to your driver, rather than changing the SKB data pointers.
What virtio does is this:
can_push = vi->any_header_sg &&
!((unsigned long)skb->data & (__alignof__(*hdr) - 1)) &&
!skb_header_cloned(skb) && skb_headroom(skb) >= hdr_len;
/* Even if we can, don't push here yet as this would skew
* csum_start offset below. */
if (can_push)
hdr = (struct virtio_net_hdr_mrg_rxbuf *)(skb->data - hdr_len);
else
hdr = skb_vnet_hdr(skb);
This does...
2013 Jun 06
4
[PATCH] virtio-net: put virtio net header inline with data
...vi->dev->name, skb, dest);
+ if (vi->mergeable_rx_bufs)
+ hdr_len = sizeof hdr->mhdr;
+ else
+ hdr_len = sizeof hdr->hdr;
+
+ can_push = vi->any_header_sg &&
+ !((unsigned long)skb->data & (__alignof__(*hdr) - 1)) &&
+ !skb_header_cloned(skb) && skb_headroom(skb) >= hdr_len;
+ /* Even if we can, don't push here yet as this would skew
+ * csum_start offset below. */
+ if (can_push)
+ hdr = (struct skb_vnet_hdr *)(skb->data - hdr_len);
+ else
+ hdr = skb_vnet_hdr(skb);
if (skb->ip_summed == CHECKSUM_PARTIAL) {
hdr->hdr.flags = V...
2013 Jun 06
4
[PATCH] virtio-net: put virtio net header inline with data
...vi->dev->name, skb, dest);
+ if (vi->mergeable_rx_bufs)
+ hdr_len = sizeof hdr->mhdr;
+ else
+ hdr_len = sizeof hdr->hdr;
+
+ can_push = vi->any_header_sg &&
+ !((unsigned long)skb->data & (__alignof__(*hdr) - 1)) &&
+ !skb_header_cloned(skb) && skb_headroom(skb) >= hdr_len;
+ /* Even if we can, don't push here yet as this would skew
+ * csum_start offset below. */
+ if (can_push)
+ hdr = (struct skb_vnet_hdr *)(skb->data - hdr_len);
+ else
+ hdr = skb_vnet_hdr(skb);
if (skb->ip_summed == CHECKSUM_PARTIAL) {
hdr->hdr.flags = V...
2013 Jun 07
0
[PATCH] virtio-net: put virtio net header inline with data
...if (vi->mergeable_rx_bufs)
> + hdr_len = sizeof hdr->mhdr;
> + else
> + hdr_len = sizeof hdr->hdr;
> +
> + can_push = vi->any_header_sg &&
> + !((unsigned long)skb->data & (__alignof__(*hdr) - 1)) &&
> + !skb_header_cloned(skb) && skb_headroom(skb) >= hdr_len;
Idle thought: how often does this fail? Would it suck if we copied
headers which didn't let us prepend data? Or could we bump
dev->hard_header_len appropriately?
Thanks,
Rusty.
2013 Jul 15
0
[PATCH] virtio-net: put virtio net header inline with data
...vi->dev->name, skb, dest);
+ if (vi->mergeable_rx_bufs)
+ hdr_len = sizeof hdr->mhdr;
+ else
+ hdr_len = sizeof hdr->hdr;
+
+ can_push = vi->any_header_sg &&
+ !((unsigned long)skb->data & (__alignof__(*hdr) - 1)) &&
+ !skb_header_cloned(skb) && skb_headroom(skb) >= hdr_len;
+ /* Even if we can, don't push here yet as this would skew
+ * csum_start offset below. */
+ if (can_push)
+ hdr = (struct skb_vnet_hdr *)(skb->data - hdr_len);
+ else
+ hdr = skb_vnet_hdr(skb);
if (skb->ip_summed == CHECKSUM_PARTIAL) {
hdr->hdr.flags = V...
2013 Jul 10
2
[PATCH] virtio-net: put virtio net header inline with data
From: Rusty Russell <rusty at rustcorp.com.au>
Date: Tue, 09 Jul 2013 17:38:51 +0930
> If you convince DaveM, I won't object :)
Simplifications are great, but not when the merge window opens up.
Sorry, this isn't appropriate now.
2013 Jul 10
2
[PATCH] virtio-net: put virtio net header inline with data
From: Rusty Russell <rusty at rustcorp.com.au>
Date: Tue, 09 Jul 2013 17:38:51 +0930
> If you convince DaveM, I won't object :)
Simplifications are great, but not when the merge window opens up.
Sorry, this isn't appropriate now.
2013 Jun 07
0
[PATCH] virtio-net: put virtio net header inline with data
...if (vi->mergeable_rx_bufs)
> + hdr_len = sizeof hdr->mhdr;
> + else
> + hdr_len = sizeof hdr->hdr;
> +
> + can_push = vi->any_header_sg &&
> + !((unsigned long)skb->data & (__alignof__(*hdr) - 1)) &&
> + !skb_header_cloned(skb) && skb_headroom(skb) >= hdr_len;
> + /* Even if we can, don't push here yet as this would skew
> + * csum_start offset below. */
> + if (can_push)
> + hdr = (struct skb_vnet_hdr *)(skb->data - hdr_len);
> + else
> + hdr = skb_vnet_hdr(skb);
>
> if (skb->ip_summed == CHEC...
2008 Jan 15
2
[PATCH 1/3] skb_partial_csum_set
...en - 2) ||
+ unlikely((int)start + off > skb->len - 2)) {
+ if (net_ratelimit())
+ printk(KERN_WARNING
+ "bad partial csum: csum=%u/%u len=%u\n",
+ start, off, skb->len);
+ return false;
+ }
+ skb->ip_summed = CHECKSUM_PARTIAL;
+ skb->csum_start = skb_headroom(skb) + start;
+ skb->csum_offset = off;
+ return true;
+}
+
EXPORT_SYMBOL(___pskb_trim);
EXPORT_SYMBOL(__kfree_skb);
EXPORT_SYMBOL(kfree_skb);
@@ -2250,3 +2278,4 @@ EXPORT_SYMBOL(skb_append_datato_frags);
EXPORT_SYMBOL_GPL(skb_to_sgvec);
EXPORT_SYMBOL_GPL(skb_cow_data);
+EXPORT_SYMBOL_GPL...
2008 Jan 15
2
[PATCH 1/3] skb_partial_csum_set
...en - 2) ||
+ unlikely((int)start + off > skb->len - 2)) {
+ if (net_ratelimit())
+ printk(KERN_WARNING
+ "bad partial csum: csum=%u/%u len=%u\n",
+ start, off, skb->len);
+ return false;
+ }
+ skb->ip_summed = CHECKSUM_PARTIAL;
+ skb->csum_start = skb_headroom(skb) + start;
+ skb->csum_offset = off;
+ return true;
+}
+
EXPORT_SYMBOL(___pskb_trim);
EXPORT_SYMBOL(__kfree_skb);
EXPORT_SYMBOL(kfree_skb);
@@ -2250,3 +2278,4 @@ EXPORT_SYMBOL(skb_append_datato_frags);
EXPORT_SYMBOL_GPL(skb_to_sgvec);
EXPORT_SYMBOL_GPL(skb_cow_data);
+EXPORT_SYMBOL_GPL...
2007 Jul 24
0
[PATCH] virtio_net.c gso & feature support
...struct sk_buff *sk
free_old_xmit_skbs(vi);
- num = skb_to_sgvec(skb, sg, 0, skb->len);
+ /* Encode metadata header at front. */
+ hdr = skb_vnet_hdr(skb);
+ if (skb->ip_summed == CHECKSUM_PARTIAL) {
+ hdr->flags = VIRTIO_NET_F_NEEDS_CSUM;
+ hdr->csum_start = skb->csum_start - skb_headroom(skb);
+ hdr->csum_offset = skb->csum_offset;
+ } else {
+ hdr->flags = 0;
+ hdr->csum_offset = hdr->csum_start = 0;
+ }
+
+ if (skb_is_gso(skb)) {
+ printk("xmit: gso size %u len %u (%u/%u/%u)\n",
+ skb_shinfo(skb)->gso_size, skb->len,
+ skb_transp...
2007 Jul 24
0
[PATCH] virtio_net.c gso & feature support
...struct sk_buff *sk
free_old_xmit_skbs(vi);
- num = skb_to_sgvec(skb, sg, 0, skb->len);
+ /* Encode metadata header at front. */
+ hdr = skb_vnet_hdr(skb);
+ if (skb->ip_summed == CHECKSUM_PARTIAL) {
+ hdr->flags = VIRTIO_NET_F_NEEDS_CSUM;
+ hdr->csum_start = skb->csum_start - skb_headroom(skb);
+ hdr->csum_offset = skb->csum_offset;
+ } else {
+ hdr->flags = 0;
+ hdr->csum_offset = hdr->csum_start = 0;
+ }
+
+ if (skb_is_gso(skb)) {
+ printk("xmit: gso size %u len %u (%u/%u/%u)\n",
+ skb_shinfo(skb)->gso_size, skb->len,
+ skb_transp...
2013 Jul 08
3
[PATCH] virtio-net: put virtio net header inline with data
...vi->dev->name, skb, dest);
+ if (vi->mergeable_rx_bufs)
+ hdr_len = sizeof hdr->mhdr;
+ else
+ hdr_len = sizeof hdr->hdr;
+
+ can_push = vi->any_header_sg &&
+ !((unsigned long)skb->data & (__alignof__(*hdr) - 1)) &&
+ !skb_header_cloned(skb) && skb_headroom(skb) >= hdr_len;
+ /* Even if we can, don't push here yet as this would skew
+ * csum_start offset below. */
+ if (can_push)
+ hdr = (struct skb_vnet_hdr *)(skb->data - hdr_len);
+ else
+ hdr = skb_vnet_hdr(skb);
if (skb->ip_summed == CHECKSUM_PARTIAL) {
hdr->hdr.flags = V...
2013 Jul 08
3
[PATCH] virtio-net: put virtio net header inline with data
...vi->dev->name, skb, dest);
+ if (vi->mergeable_rx_bufs)
+ hdr_len = sizeof hdr->mhdr;
+ else
+ hdr_len = sizeof hdr->hdr;
+
+ can_push = vi->any_header_sg &&
+ !((unsigned long)skb->data & (__alignof__(*hdr) - 1)) &&
+ !skb_header_cloned(skb) && skb_headroom(skb) >= hdr_len;
+ /* Even if we can, don't push here yet as this would skew
+ * csum_start offset below. */
+ if (can_push)
+ hdr = (struct skb_vnet_hdr *)(skb->data - hdr_len);
+ else
+ hdr = skb_vnet_hdr(skb);
if (skb->ip_summed == CHECKSUM_PARTIAL) {
hdr->hdr.flags = V...
2003 Mar 04
6
[Bug 22] Linux kernel crashes when incoming/outgoing interfaces differ
https://bugzilla.netfilter.org/cgi-bin/bugzilla/show_bug.cgi?id=22
laforge@netfilter.org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |bowles@ambisys.com
Component|unknown |ip_tables (kernel)
OS/Version|other
2008 Apr 18
4
[0/6] [NET]: virtio SG/TSO patches
Hi:
Here are the patches I used for testing KVM with virtio-net using
TSO. There are three patches for the tun device which are basically
Rusty's patches with the mmap turned into copying (for correctness).
Two patches are for the virtio-net frontend, one required to support
receiving SG/TSO, and the other useful for testing SG per se. The
other patch is to the KVM backend to make all this
2008 Apr 18
4
[0/6] [NET]: virtio SG/TSO patches
Hi:
Here are the patches I used for testing KVM with virtio-net using
TSO. There are three patches for the tun device which are basically
Rusty's patches with the mmap turned into copying (for correctness).
Two patches are for the virtio-net frontend, one required to support
receiving SG/TSO, and the other useful for testing SG per se. The
other patch is to the KVM backend to make all this
2007 Apr 18
5
[Bridge] RFC: [PATCH] bridge vlan integration
...o != htons(ETH_P_8021Q)) {
+ /* add VLAN tag */
+ struct vlan_ethhdr *vhdr;
+ if (skb_cloned(skb) || skb_shared(skb)) {
+ struct sk_buff *new_skb;
+
+ new_skb = skb_copy(skb, GFP_ATOMIC);
+ kfree_skb(skb);
+ if (!new_skb)
+ return 1;
+ *pskb = skb = new_skb;
+ }
+
+ if (skb_headroom(skb) < VLAN_HLEN) {
+ if (pskb_expand_head(skb, VLAN_HLEN, 0,
+ GFP_ATOMIC)) {
+ kfree_skb(skb);
+ return 1;
+ }
+ }
+
+ skb_push(skb, VLAN_HLEN);
+
+ skb->mac.raw -= VLAN_HLEN;
+ memmove(skb->mac.raw, skb->mac.raw + VLAN_HLEN,
+ ETH_ALEN * 2);
+ vhd...