Re: [RFC bluetooth-next 18/20] 6lowpan: move multicast flags to generic
flat view
From: Alexander Aring <hidden>
Date: 2016-07-12 20:34:49
Hi, On 07/11/2016 09:50 PM, Alexander Aring wrote:
quoted hunk ↗ jump to hunk
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. 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 hunk ↗ jump to hunk
- 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