diff mbox

[RFC] skbuff: skb_mac_header_was_set is always true on >32 bit

Message ID 20090617082327.196eda07@nehalam
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

stephen hemminger June 17, 2009, 3:23 p.m. UTC
Looking at the crash in log_martians(), one suspect is that the check for
mac header being set is not correct.  The value of mac_header defaults to
0 on allocation, therefore skb_mac_header_was_set will always be true on
platforms using NET_SKBUFF_USES_OFFSET.

Arnaldo, is this correct?

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>

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

Comments

Arnaldo Carvalho de Melo June 17, 2009, 4:37 p.m. UTC | #1
Em Wed, Jun 17, 2009 at 08:23:27AM -0700, Stephen Hemminger escreveu:
> Looking at the crash in log_martians(), one suspect is that the check for
> mac header being set is not correct.  The value of mac_header defaults to
> 0 on allocation, therefore skb_mac_header_was_set will always be true on
> platforms using NET_SKBUFF_USES_OFFSET.
> 
> Arnaldo, is this correct?
> 
> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>

Yeah, looks right, I forgot to initialize it to the value I changed the
test in skb_mac_header_was_set when doing the offset patch :-\

Thanks!

Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com>

> --- a/net/core/skbuff.c	2009-06-17 08:16:46.235188728 -0700
> +++ b/net/core/skbuff.c	2009-06-17 08:17:25.810314332 -0700
> @@ -201,6 +201,10 @@ struct sk_buff *__alloc_skb(unsigned int
>  	skb->data = data;
>  	skb_reset_tail_pointer(skb);
>  	skb->end = skb->tail + size;
> +#ifdef NET_SKBUFF_DATA_USES_OFFSET
> +	skb->mac_header = ~0U;
> +#endif
> +
>  	/* make sure we initialize shinfo sequentially */
>  	shinfo = skb_shinfo(skb);
>  	atomic_set(&shinfo->dataref, 1);
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller June 18, 2009, 1:53 a.m. UTC | #2
From: Arnaldo Carvalho de Melo <acme@redhat.com>
Date: Wed, 17 Jun 2009 13:37:16 -0300

> Em Wed, Jun 17, 2009 at 08:23:27AM -0700, Stephen Hemminger escreveu:
>> Looking at the crash in log_martians(), one suspect is that the check for
>> mac header being set is not correct.  The value of mac_header defaults to
>> 0 on allocation, therefore skb_mac_header_was_set will always be true on
>> platforms using NET_SKBUFF_USES_OFFSET.
>> 
>> Arnaldo, is this correct?
>> 
>> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
> 
> Yeah, looks right, I forgot to initialize it to the value I changed the
> test in skb_mac_header_was_set when doing the offset patch :-\
> 
> Thanks!
> 
> Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com>

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

Patch

--- a/net/core/skbuff.c	2009-06-17 08:16:46.235188728 -0700
+++ b/net/core/skbuff.c	2009-06-17 08:17:25.810314332 -0700
@@ -201,6 +201,10 @@  struct sk_buff *__alloc_skb(unsigned int
 	skb->data = data;
 	skb_reset_tail_pointer(skb);
 	skb->end = skb->tail + size;
+#ifdef NET_SKBUFF_DATA_USES_OFFSET
+	skb->mac_header = ~0U;
+#endif
+
 	/* make sure we initialize shinfo sequentially */
 	shinfo = skb_shinfo(skb);
 	atomic_set(&shinfo->dataref, 1);