diff options
-rw-r--r-- | drivers/net/can/dev.c | 4 | ||||
-rw-r--r-- | drivers/net/can/slcan.c | 4 | ||||
-rw-r--r-- | include/linux/can/skb.h | 10 | ||||
-rw-r--r-- | net/can/bcm.c | 8 | ||||
-rw-r--r-- | net/can/gw.c | 4 | ||||
-rw-r--r-- | net/can/raw.c | 4 |
6 files changed, 21 insertions, 13 deletions
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c index 59ada082a994..f9cba4123c66 100644 --- a/drivers/net/can/dev.c +++ b/drivers/net/can/dev.c | |||
@@ -512,8 +512,8 @@ struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf) | |||
512 | skb->pkt_type = PACKET_BROADCAST; | 512 | skb->pkt_type = PACKET_BROADCAST; |
513 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 513 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
514 | 514 | ||
515 | skb_reserve(skb, sizeof(struct can_skb_priv)); | 515 | can_skb_reserve(skb); |
516 | ((struct can_skb_priv *)(skb->head))->ifindex = dev->ifindex; | 516 | can_skb_prv(skb)->ifindex = dev->ifindex; |
517 | 517 | ||
518 | *cf = (struct can_frame *)skb_put(skb, sizeof(struct can_frame)); | 518 | *cf = (struct can_frame *)skb_put(skb, sizeof(struct can_frame)); |
519 | memset(*cf, 0, sizeof(struct can_frame)); | 519 | memset(*cf, 0, sizeof(struct can_frame)); |
diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c index e79a8d10e0fc..06b7e097d36e 100644 --- a/drivers/net/can/slcan.c +++ b/drivers/net/can/slcan.c | |||
@@ -195,8 +195,8 @@ static void slc_bump(struct slcan *sl) | |||
195 | skb->pkt_type = PACKET_BROADCAST; | 195 | skb->pkt_type = PACKET_BROADCAST; |
196 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 196 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
197 | 197 | ||
198 | skb_reserve(skb, sizeof(struct can_skb_priv)); | 198 | can_skb_reserve(skb); |
199 | ((struct can_skb_priv *)(skb->head))->ifindex = sl->dev->ifindex; | 199 | can_skb_prv(skb)->ifindex = sl->dev->ifindex; |
200 | 200 | ||
201 | memcpy(skb_put(skb, sizeof(struct can_frame)), | 201 | memcpy(skb_put(skb, sizeof(struct can_frame)), |
202 | &cf, sizeof(struct can_frame)); | 202 | &cf, sizeof(struct can_frame)); |
diff --git a/include/linux/can/skb.h b/include/linux/can/skb.h index 4b0f24d3a878..2f0543f7510c 100644 --- a/include/linux/can/skb.h +++ b/include/linux/can/skb.h | |||
@@ -32,4 +32,14 @@ struct can_skb_priv { | |||
32 | struct can_frame cf[0]; | 32 | struct can_frame cf[0]; |
33 | }; | 33 | }; |
34 | 34 | ||
35 | static inline struct can_skb_priv *can_skb_prv(struct sk_buff *skb) | ||
36 | { | ||
37 | return (struct can_skb_priv *)(skb->head); | ||
38 | } | ||
39 | |||
40 | static inline void can_skb_reserve(struct sk_buff *skb) | ||
41 | { | ||
42 | skb_reserve(skb, sizeof(struct can_skb_priv)); | ||
43 | } | ||
44 | |||
35 | #endif /* CAN_SKB_H */ | 45 | #endif /* CAN_SKB_H */ |
diff --git a/net/can/bcm.c b/net/can/bcm.c index ccc27b9e8384..28e12d18f0f1 100644 --- a/net/can/bcm.c +++ b/net/can/bcm.c | |||
@@ -261,8 +261,8 @@ static void bcm_can_tx(struct bcm_op *op) | |||
261 | if (!skb) | 261 | if (!skb) |
262 | goto out; | 262 | goto out; |
263 | 263 | ||
264 | skb_reserve(skb, sizeof(struct can_skb_priv)); | 264 | can_skb_reserve(skb); |
265 | ((struct can_skb_priv *)(skb->head))->ifindex = dev->ifindex; | 265 | can_skb_prv(skb)->ifindex = dev->ifindex; |
266 | 266 | ||
267 | memcpy(skb_put(skb, CFSIZ), cf, CFSIZ); | 267 | memcpy(skb_put(skb, CFSIZ), cf, CFSIZ); |
268 | 268 | ||
@@ -1207,7 +1207,7 @@ static int bcm_tx_send(struct msghdr *msg, int ifindex, struct sock *sk) | |||
1207 | if (!skb) | 1207 | if (!skb) |
1208 | return -ENOMEM; | 1208 | return -ENOMEM; |
1209 | 1209 | ||
1210 | skb_reserve(skb, sizeof(struct can_skb_priv)); | 1210 | can_skb_reserve(skb); |
1211 | 1211 | ||
1212 | err = memcpy_fromiovec(skb_put(skb, CFSIZ), msg->msg_iov, CFSIZ); | 1212 | err = memcpy_fromiovec(skb_put(skb, CFSIZ), msg->msg_iov, CFSIZ); |
1213 | if (err < 0) { | 1213 | if (err < 0) { |
@@ -1221,7 +1221,7 @@ static int bcm_tx_send(struct msghdr *msg, int ifindex, struct sock *sk) | |||
1221 | return -ENODEV; | 1221 | return -ENODEV; |
1222 | } | 1222 | } |
1223 | 1223 | ||
1224 | ((struct can_skb_priv *)(skb->head))->ifindex = dev->ifindex; | 1224 | can_skb_prv(skb)->ifindex = dev->ifindex; |
1225 | skb->dev = dev; | 1225 | skb->dev = dev; |
1226 | skb->sk = sk; | 1226 | skb->sk = sk; |
1227 | err = can_send(skb, 1); /* send with loopback */ | 1227 | err = can_send(skb, 1); /* send with loopback */ |
diff --git a/net/can/gw.c b/net/can/gw.c index acdd4656cc3b..c185fcd5e828 100644 --- a/net/can/gw.c +++ b/net/can/gw.c | |||
@@ -381,9 +381,7 @@ static void can_can_gw_rcv(struct sk_buff *skb, void *data) | |||
381 | 381 | ||
382 | /* is sending the skb back to the incoming interface not allowed? */ | 382 | /* is sending the skb back to the incoming interface not allowed? */ |
383 | if (!(gwj->flags & CGW_FLAGS_CAN_IIF_TX_OK) && | 383 | if (!(gwj->flags & CGW_FLAGS_CAN_IIF_TX_OK) && |
384 | skb_headroom(skb) == sizeof(struct can_skb_priv) && | 384 | can_skb_prv(skb)->ifindex == gwj->dst.dev->ifindex) |
385 | (((struct can_skb_priv *)(skb->head))->ifindex == | ||
386 | gwj->dst.dev->ifindex)) | ||
387 | return; | 385 | return; |
388 | 386 | ||
389 | /* | 387 | /* |
diff --git a/net/can/raw.c b/net/can/raw.c index 5d860e8dcc52..c1764e41ddaf 100644 --- a/net/can/raw.c +++ b/net/can/raw.c | |||
@@ -705,8 +705,8 @@ static int raw_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
705 | if (!skb) | 705 | if (!skb) |
706 | goto put_dev; | 706 | goto put_dev; |
707 | 707 | ||
708 | skb_reserve(skb, sizeof(struct can_skb_priv)); | 708 | can_skb_reserve(skb); |
709 | ((struct can_skb_priv *)(skb->head))->ifindex = dev->ifindex; | 709 | can_skb_prv(skb)->ifindex = dev->ifindex; |
710 | 710 | ||
711 | err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size); | 711 | err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size); |
712 | if (err < 0) | 712 | if (err < 0) |