]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/can/raw.c
can: add private data space for CAN sk_buffs
[karo-tx-linux.git] / net / can / raw.c
index 5b0e3e330d97c6f4172bf52db70a4cee6b7f4247..5d860e8dcc522bf9e77ab4bc35d5aaa21536d547 100644 (file)
@@ -50,6 +50,7 @@
 #include <linux/skbuff.h>
 #include <linux/can.h>
 #include <linux/can/core.h>
+#include <linux/can/skb.h>
 #include <linux/can/raw.h>
 #include <net/sock.h>
 #include <net/net_namespace.h>
@@ -699,11 +700,14 @@ static int raw_sendmsg(struct kiocb *iocb, struct socket *sock,
        if (!dev)
                return -ENXIO;
 
-       skb = sock_alloc_send_skb(sk, size, msg->msg_flags & MSG_DONTWAIT,
-                                 &err);
+       skb = sock_alloc_send_skb(sk, size + sizeof(struct can_skb_priv),
+                                 msg->msg_flags & MSG_DONTWAIT, &err);
        if (!skb)
                goto put_dev;
 
+       skb_reserve(skb, sizeof(struct can_skb_priv));
+       ((struct can_skb_priv *)(skb->head))->ifindex = dev->ifindex;
+
        err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size);
        if (err < 0)
                goto free_skb;