diff mbox

[net] net: 6lowpan: fix lowpan_header_create non-compression memcpy call

Message ID 1388969150-16041-1-git-send-email-dborkman@redhat.com
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Daniel Borkmann Jan. 6, 2014, 12:45 a.m. UTC
In function lowpan_header_create(), we invoke the following code
construct:

  struct ipv6hdr *hdr;
  ...
  hdr = ipv6_hdr(skb);
  ...
  if (...)
    memcpy(hc06_ptr + 1, &hdr->flow_lbl[1], 2);
  else
    memcpy(hc06_ptr, &hdr, 4);

Where the else path of the condition, that is, non-compression
path, calls memcpy() with a pointer to struct ipv6hdr *hdr as
source, thus two levels of indirection. This cannot be correct,
and likely only one level of pointer was intended as source
buffer for memcpy() here.

Fixes: 44331fe2aa0d ("IEEE802.15.4: 6LoWPAN basic support")
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Cc: Alexander Smirnov <alex.bluesman.smirnov@gmail.com>
Cc: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Cc: Werner Almesberger <werner@almesberger.net>
---
 net/ieee802154/6lowpan.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

David Miller Jan. 6, 2014, 1:25 a.m. UTC | #1
From: Daniel Borkmann <dborkman@redhat.com>
Date: Mon,  6 Jan 2014 01:45:50 +0100

> In function lowpan_header_create(), we invoke the following code
> construct:
> 
>   struct ipv6hdr *hdr;
>   ...
>   hdr = ipv6_hdr(skb);
>   ...
>   if (...)
>     memcpy(hc06_ptr + 1, &hdr->flow_lbl[1], 2);
>   else
>     memcpy(hc06_ptr, &hdr, 4);
> 
> Where the else path of the condition, that is, non-compression
> path, calls memcpy() with a pointer to struct ipv6hdr *hdr as
> source, thus two levels of indirection. This cannot be correct,
> and likely only one level of pointer was intended as source
> buffer for memcpy() here.
> 
> Fixes: 44331fe2aa0d ("IEEE802.15.4: 6LoWPAN basic support")
> Signed-off-by: Daniel Borkmann <dborkman@redhat.com>

Looks good, applied, thanks.
--
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

diff --git a/net/ieee802154/6lowpan.c b/net/ieee802154/6lowpan.c
index 459e200..a2d2456 100644
--- a/net/ieee802154/6lowpan.c
+++ b/net/ieee802154/6lowpan.c
@@ -547,7 +547,7 @@  static int lowpan_header_create(struct sk_buff *skb,
 			hc06_ptr += 3;
 		} else {
 			/* compress nothing */
-			memcpy(hc06_ptr, &hdr, 4);
+			memcpy(hc06_ptr, hdr, 4);
 			/* replace the top byte with new ECN | DSCP format */
 			*hc06_ptr = tmp;
 			hc06_ptr += 4;