Thread (51 messages) 51 messages, 7 authors, 2016-08-05

Re: [RFC bluetooth-next 18/20] 6lowpan: move multicast flags to generic

flat view

From: Jukka Rissanen <hidden>
Date: 2016-07-13 11:15:45

Hi Alex,

On Tue, 2016-07-12 at 22:34 +0200, Alexander Aring wrote:
Hi,

On 07/11/2016 09:50 PM, Alexander Aring wrote:
quoted
These flags should be all the same for 6LoWPAN so move it to
6LoWPAN generic.

Signed-off-by: Alexander Aring <redacted>
---
 net/6lowpan/core.c            | 1 +
 net/ieee802154/6lowpan/core.c | 1 -
 2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/6lowpan/core.c b/net/6lowpan/core.c
index a978000..6b7de14 100644
--- a/net/6lowpan/core.c
+++ b/net/6lowpan/core.c
@@ -62,6 +62,7 @@ int lowpan_register_netdevice(struct net_device
*dev,
 	dev->type = ARPHRD_6LOWPAN;
 	dev->mtu = IPV6_MIN_MTU;
 	dev->priv_flags |= IFF_NO_QUEUE;
+	dev->flags = IFF_BROADCAST | IFF_MULTICAST;
 
 	dev->header_ops = &header_ops;
 
diff --git a/net/ieee802154/6lowpan/core.c
b/net/ieee802154/6lowpan/core.c
index 228a711..a60abad 100644
--- a/net/ieee802154/6lowpan/core.c
+++ b/net/ieee802154/6lowpan/core.c
@@ -92,7 +92,6 @@ static void lowpan_setup(struct net_device *ldev)
 	memset(ldev->broadcast, 0xff, IEEE802154_ADDR_LEN);
 	/* We need an ipv6hdr as minimum len when calling xmit */
 	ldev->hard_header_len	= sizeof(struct ipv6hdr);
This should be moved to generic 6lowpan as well.

This says at least, the skb->len at xmit callback must be at least a
length of "sizeof(struct ipv6hdr)" which should be correct.

BUT...

I still have (more than years) the use-case that somebody sends an
AF_PACKET raw socket over lowpan interface.
According to packet(7), the "Packet sockets are used to receive or send
raw packets at the device driver (OSI Layer 2) level."
But lowpan0 interface is meant to compress IPv6 header so it is working
on L3 data (or more precisely between L2 and L3).
So I am wondering how this is suppose to work and what kind of use case
you have for this?
I didn't test it yet, but I think this is a simple way to crash the
kernel on all lowpan interfaces. I currently not sure if I can break
something there, but I am sure it will send garbage data.

The xmit callback needs data which is available in skb_headroom, this
data is set by header_create callback which will not called on
AF_PACKET
RAW sockets.

The root of this issue is that we don't have L2 here for creating mac
headers. The header_create callback should do that, but we do 6LoWPAN
adaptation here and the header_create callback will be used by ndisc
to
say "here are the addresses, generate a mac header" and AF_PACKET
_DGRAM_ (for putting mac header in front of AF_PACKET payload).

We use this callback for the first use-case of ndisc only.

AF_PACKET RAW receive make sense, because tcpdump/wireshark needs to
capture data. Sending AF_PACKET RAW makes no sense and will I suppose
crash the kernel and I think every user can do that.

DGRAM sockets maybe makes sense, but I would disable that also for
(receive and transmit). You need to use PF_INET6 socket types for
lowpan
interfaces only. That issue is somehow described at [0].
quoted
-	ldev->flags		= IFF_BROADCAST |
IFF_MULTICAST;
 
 	ldev->netdev_ops	= &lowpan_netdev_ops;
 	ldev->destructor	= free_netdev;
- Alex

[0] http://lxr.free-electrons.com/source/net/ieee802154/6lowpan/tx.c#
L43

Cheers,
Jukka

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help