1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43#include <linux/module.h>
44#include <linux/stddef.h>
45#include <linux/init.h>
46#include <linux/kmod.h>
47#include <linux/slab.h>
48#include <linux/list.h>
49#include <linux/spinlock.h>
50#include <linux/rcupdate.h>
51#include <linux/uaccess.h>
52#include <linux/net.h>
53#include <linux/netdevice.h>
54#include <linux/socket.h>
55#include <linux/if_ether.h>
56#include <linux/if_arp.h>
57#include <linux/skbuff.h>
58#include <linux/can.h>
59#include <linux/can/core.h>
60#include <linux/ratelimit.h>
61#include <net/net_namespace.h>
62#include <net/sock.h>
63
64#include "af_can.h"
65
66static __initconst const char banner[] = KERN_INFO
67 "can: controller area network core (" CAN_VERSION_STRING ")\n";
68
69MODULE_DESCRIPTION("Controller Area Network PF_CAN core");
70MODULE_LICENSE("Dual BSD/GPL");
71MODULE_AUTHOR("Urs Thuermann <urs.thuermann@volkswagen.de>, "
72 "Oliver Hartkopp <oliver.hartkopp@volkswagen.de>");
73
74MODULE_ALIAS_NETPROTO(PF_CAN);
75
76static int stats_timer __read_mostly = 1;
77module_param(stats_timer, int, S_IRUGO);
78MODULE_PARM_DESC(stats_timer, "enable timer for statistics (default:on)");
79
80
81struct dev_rcv_lists can_rx_alldev_list;
82static DEFINE_SPINLOCK(can_rcvlists_lock);
83
84static struct kmem_cache *rcv_cache __read_mostly;
85
86
87static const struct can_proto *proto_tab[CAN_NPROTO] __read_mostly;
88static DEFINE_MUTEX(proto_tab_lock);
89
90struct timer_list can_stattimer;
91struct s_stats can_stats;
92struct s_pstats can_pstats;
93
94
95
96
97
98int can_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
99{
100 struct sock *sk = sock->sk;
101
102 switch (cmd) {
103
104 case SIOCGSTAMP:
105 return sock_get_timestamp(sk, (struct timeval __user *)arg);
106
107 default:
108 return -ENOIOCTLCMD;
109 }
110}
111EXPORT_SYMBOL(can_ioctl);
112
113static void can_sock_destruct(struct sock *sk)
114{
115 skb_queue_purge(&sk->sk_receive_queue);
116}
117
118static const struct can_proto *can_get_proto(int protocol)
119{
120 const struct can_proto *cp;
121
122 rcu_read_lock();
123 cp = rcu_dereference(proto_tab[protocol]);
124 if (cp && !try_module_get(cp->prot->owner))
125 cp = NULL;
126 rcu_read_unlock();
127
128 return cp;
129}
130
131static inline void can_put_proto(const struct can_proto *cp)
132{
133 module_put(cp->prot->owner);
134}
135
136static int can_create(struct net *net, struct socket *sock, int protocol,
137 int kern)
138{
139 struct sock *sk;
140 const struct can_proto *cp;
141 int err = 0;
142
143 sock->state = SS_UNCONNECTED;
144
145 if (protocol < 0 || protocol >= CAN_NPROTO)
146 return -EINVAL;
147
148 if (!net_eq(net, &init_net))
149 return -EAFNOSUPPORT;
150
151 cp = can_get_proto(protocol);
152
153#ifdef CONFIG_MODULES
154 if (!cp) {
155
156
157 err = request_module("can-proto-%d", protocol);
158
159
160
161
162
163
164 if (err)
165 printk_ratelimited(KERN_ERR "can: request_module "
166 "(can-proto-%d) failed.\n", protocol);
167
168 cp = can_get_proto(protocol);
169 }
170#endif
171
172
173
174 if (!cp)
175 return -EPROTONOSUPPORT;
176
177 if (cp->type != sock->type) {
178 err = -EPROTOTYPE;
179 goto errout;
180 }
181
182 sock->ops = cp->ops;
183
184 sk = sk_alloc(net, PF_CAN, GFP_KERNEL, cp->prot);
185 if (!sk) {
186 err = -ENOMEM;
187 goto errout;
188 }
189
190 sock_init_data(sock, sk);
191 sk->sk_destruct = can_sock_destruct;
192
193 if (sk->sk_prot->init)
194 err = sk->sk_prot->init(sk);
195
196 if (err) {
197
198 sock_orphan(sk);
199 sock_put(sk);
200 }
201
202 errout:
203 can_put_proto(cp);
204 return err;
205}
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227int can_send(struct sk_buff *skb, int loop)
228{
229 struct sk_buff *newskb = NULL;
230 struct canfd_frame *cfd = (struct canfd_frame *)skb->data;
231 int err = -EINVAL;
232
233 if (skb->len == CAN_MTU) {
234 skb->protocol = htons(ETH_P_CAN);
235 if (unlikely(cfd->len > CAN_MAX_DLEN))
236 goto inval_skb;
237 } else if (skb->len == CANFD_MTU) {
238 skb->protocol = htons(ETH_P_CANFD);
239 if (unlikely(cfd->len > CANFD_MAX_DLEN))
240 goto inval_skb;
241 } else
242 goto inval_skb;
243
244
245
246
247
248
249 if (unlikely(skb->len > skb->dev->mtu && cfd->len > CAN_MAX_DLEN)) {
250 err = -EMSGSIZE;
251 goto inval_skb;
252 }
253
254 if (unlikely(skb->dev->type != ARPHRD_CAN)) {
255 err = -EPERM;
256 goto inval_skb;
257 }
258
259 if (unlikely(!(skb->dev->flags & IFF_UP))) {
260 err = -ENETDOWN;
261 goto inval_skb;
262 }
263
264 skb_reset_network_header(skb);
265 skb_reset_transport_header(skb);
266
267 if (loop) {
268
269
270
271 skb->pkt_type = PACKET_LOOPBACK;
272
273
274
275
276
277
278
279
280
281
282 if (!(skb->dev->flags & IFF_ECHO)) {
283
284
285
286
287 newskb = skb_clone(skb, GFP_ATOMIC);
288 if (!newskb) {
289 kfree_skb(skb);
290 return -ENOMEM;
291 }
292
293 newskb->sk = skb->sk;
294 newskb->ip_summed = CHECKSUM_UNNECESSARY;
295 newskb->pkt_type = PACKET_BROADCAST;
296 }
297 } else {
298
299 skb->pkt_type = PACKET_HOST;
300 }
301
302
303 err = dev_queue_xmit(skb);
304 if (err > 0)
305 err = net_xmit_errno(err);
306
307 if (err) {
308 kfree_skb(newskb);
309 return err;
310 }
311
312 if (newskb)
313 netif_rx_ni(newskb);
314
315
316 can_stats.tx_frames++;
317 can_stats.tx_frames_delta++;
318
319 return 0;
320
321inval_skb:
322 kfree_skb(skb);
323 return err;
324}
325EXPORT_SYMBOL(can_send);
326
327
328
329
330
331static struct dev_rcv_lists *find_dev_rcv_lists(struct net_device *dev)
332{
333 if (!dev)
334 return &can_rx_alldev_list;
335 else
336 return (struct dev_rcv_lists *)dev->ml_priv;
337}
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366static struct hlist_head *find_rcv_list(canid_t *can_id, canid_t *mask,
367 struct dev_rcv_lists *d)
368{
369 canid_t inv = *can_id & CAN_INV_FILTER;
370
371
372 if (*mask & CAN_ERR_FLAG) {
373
374 *mask &= CAN_ERR_MASK;
375 return &d->rx[RX_ERR];
376 }
377
378
379
380#define CAN_EFF_RTR_FLAGS (CAN_EFF_FLAG | CAN_RTR_FLAG)
381
382
383 if ((*mask & CAN_EFF_FLAG) && !(*can_id & CAN_EFF_FLAG))
384 *mask &= (CAN_SFF_MASK | CAN_EFF_RTR_FLAGS);
385
386
387 *can_id &= *mask;
388
389
390 if (inv)
391 return &d->rx[RX_INV];
392
393
394 if (!(*mask))
395 return &d->rx[RX_ALL];
396
397
398 if (((*mask & CAN_EFF_RTR_FLAGS) == CAN_EFF_RTR_FLAGS) &&
399 !(*can_id & CAN_RTR_FLAG)) {
400
401 if (*can_id & CAN_EFF_FLAG) {
402 if (*mask == (CAN_EFF_MASK | CAN_EFF_RTR_FLAGS)) {
403
404 return &d->rx[RX_EFF];
405 }
406 } else {
407 if (*mask == (CAN_SFF_MASK | CAN_EFF_RTR_FLAGS))
408 return &d->rx_sff[*can_id];
409 }
410 }
411
412
413 return &d->rx[RX_FIL];
414}
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445int can_rx_register(struct net_device *dev, canid_t can_id, canid_t mask,
446 void (*func)(struct sk_buff *, void *), void *data,
447 char *ident)
448{
449 struct receiver *r;
450 struct hlist_head *rl;
451 struct dev_rcv_lists *d;
452 int err = 0;
453
454
455
456 if (dev && dev->type != ARPHRD_CAN)
457 return -ENODEV;
458
459 r = kmem_cache_alloc(rcv_cache, GFP_KERNEL);
460 if (!r)
461 return -ENOMEM;
462
463 spin_lock(&can_rcvlists_lock);
464
465 d = find_dev_rcv_lists(dev);
466 if (d) {
467 rl = find_rcv_list(&can_id, &mask, d);
468
469 r->can_id = can_id;
470 r->mask = mask;
471 r->matches = 0;
472 r->func = func;
473 r->data = data;
474 r->ident = ident;
475
476 hlist_add_head_rcu(&r->list, rl);
477 d->entries++;
478
479 can_pstats.rcv_entries++;
480 if (can_pstats.rcv_entries_max < can_pstats.rcv_entries)
481 can_pstats.rcv_entries_max = can_pstats.rcv_entries;
482 } else {
483 kmem_cache_free(rcv_cache, r);
484 err = -ENODEV;
485 }
486
487 spin_unlock(&can_rcvlists_lock);
488
489 return err;
490}
491EXPORT_SYMBOL(can_rx_register);
492
493
494
495
496static void can_rx_delete_receiver(struct rcu_head *rp)
497{
498 struct receiver *r = container_of(rp, struct receiver, rcu);
499
500 kmem_cache_free(rcv_cache, r);
501}
502
503
504
505
506
507
508
509
510
511
512
513
514void can_rx_unregister(struct net_device *dev, canid_t can_id, canid_t mask,
515 void (*func)(struct sk_buff *, void *), void *data)
516{
517 struct receiver *r = NULL;
518 struct hlist_head *rl;
519 struct dev_rcv_lists *d;
520
521 if (dev && dev->type != ARPHRD_CAN)
522 return;
523
524 spin_lock(&can_rcvlists_lock);
525
526 d = find_dev_rcv_lists(dev);
527 if (!d) {
528 pr_err("BUG: receive list not found for "
529 "dev %s, id %03X, mask %03X\n",
530 DNAME(dev), can_id, mask);
531 goto out;
532 }
533
534 rl = find_rcv_list(&can_id, &mask, d);
535
536
537
538
539
540
541
542 hlist_for_each_entry_rcu(r, rl, list) {
543 if (r->can_id == can_id && r->mask == mask &&
544 r->func == func && r->data == data)
545 break;
546 }
547
548
549
550
551
552
553 if (!r) {
554 WARN(1, "BUG: receive list entry not found for dev %s, "
555 "id %03X, mask %03X\n", DNAME(dev), can_id, mask);
556 goto out;
557 }
558
559 hlist_del_rcu(&r->list);
560 d->entries--;
561
562 if (can_pstats.rcv_entries > 0)
563 can_pstats.rcv_entries--;
564
565
566 if (d->remove_on_zero_entries && !d->entries) {
567 kfree(d);
568 dev->ml_priv = NULL;
569 }
570
571 out:
572 spin_unlock(&can_rcvlists_lock);
573
574
575 if (r)
576 call_rcu(&r->rcu, can_rx_delete_receiver);
577}
578EXPORT_SYMBOL(can_rx_unregister);
579
580static inline void deliver(struct sk_buff *skb, struct receiver *r)
581{
582 r->func(skb, r->data);
583 r->matches++;
584}
585
586static int can_rcv_filter(struct dev_rcv_lists *d, struct sk_buff *skb)
587{
588 struct receiver *r;
589 int matches = 0;
590 struct can_frame *cf = (struct can_frame *)skb->data;
591 canid_t can_id = cf->can_id;
592
593 if (d->entries == 0)
594 return 0;
595
596 if (can_id & CAN_ERR_FLAG) {
597
598 hlist_for_each_entry_rcu(r, &d->rx[RX_ERR], list) {
599 if (can_id & r->mask) {
600 deliver(skb, r);
601 matches++;
602 }
603 }
604 return matches;
605 }
606
607
608 hlist_for_each_entry_rcu(r, &d->rx[RX_ALL], list) {
609 deliver(skb, r);
610 matches++;
611 }
612
613
614 hlist_for_each_entry_rcu(r, &d->rx[RX_FIL], list) {
615 if ((can_id & r->mask) == r->can_id) {
616 deliver(skb, r);
617 matches++;
618 }
619 }
620
621
622 hlist_for_each_entry_rcu(r, &d->rx[RX_INV], list) {
623 if ((can_id & r->mask) != r->can_id) {
624 deliver(skb, r);
625 matches++;
626 }
627 }
628
629
630 if (can_id & CAN_RTR_FLAG)
631 return matches;
632
633 if (can_id & CAN_EFF_FLAG) {
634 hlist_for_each_entry_rcu(r, &d->rx[RX_EFF], list) {
635 if (r->can_id == can_id) {
636 deliver(skb, r);
637 matches++;
638 }
639 }
640 } else {
641 can_id &= CAN_SFF_MASK;
642 hlist_for_each_entry_rcu(r, &d->rx_sff[can_id], list) {
643 deliver(skb, r);
644 matches++;
645 }
646 }
647
648 return matches;
649}
650
651static void can_receive(struct sk_buff *skb, struct net_device *dev)
652{
653 struct dev_rcv_lists *d;
654 int matches;
655
656
657 can_stats.rx_frames++;
658 can_stats.rx_frames_delta++;
659
660 rcu_read_lock();
661
662
663 matches = can_rcv_filter(&can_rx_alldev_list, skb);
664
665
666 d = find_dev_rcv_lists(dev);
667 if (d)
668 matches += can_rcv_filter(d, skb);
669
670 rcu_read_unlock();
671
672
673 consume_skb(skb);
674
675 if (matches > 0) {
676 can_stats.matches++;
677 can_stats.matches_delta++;
678 }
679}
680
681static int can_rcv(struct sk_buff *skb, struct net_device *dev,
682 struct packet_type *pt, struct net_device *orig_dev)
683{
684 struct canfd_frame *cfd = (struct canfd_frame *)skb->data;
685
686 if (unlikely(!net_eq(dev_net(dev), &init_net)))
687 goto drop;
688
689 if (WARN_ONCE(dev->type != ARPHRD_CAN ||
690 skb->len != CAN_MTU ||
691 cfd->len > CAN_MAX_DLEN,
692 "PF_CAN: dropped non conform CAN skbuf: "
693 "dev type %d, len %d, datalen %d\n",
694 dev->type, skb->len, cfd->len))
695 goto drop;
696
697 can_receive(skb, dev);
698 return NET_RX_SUCCESS;
699
700drop:
701 kfree_skb(skb);
702 return NET_RX_DROP;
703}
704
705static int canfd_rcv(struct sk_buff *skb, struct net_device *dev,
706 struct packet_type *pt, struct net_device *orig_dev)
707{
708 struct canfd_frame *cfd = (struct canfd_frame *)skb->data;
709
710 if (unlikely(!net_eq(dev_net(dev), &init_net)))
711 goto drop;
712
713 if (WARN_ONCE(dev->type != ARPHRD_CAN ||
714 skb->len != CANFD_MTU ||
715 cfd->len > CANFD_MAX_DLEN,
716 "PF_CAN: dropped non conform CAN FD skbuf: "
717 "dev type %d, len %d, datalen %d\n",
718 dev->type, skb->len, cfd->len))
719 goto drop;
720
721 can_receive(skb, dev);
722 return NET_RX_SUCCESS;
723
724drop:
725 kfree_skb(skb);
726 return NET_RX_DROP;
727}
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743int can_proto_register(const struct can_proto *cp)
744{
745 int proto = cp->protocol;
746 int err = 0;
747
748 if (proto < 0 || proto >= CAN_NPROTO) {
749 pr_err("can: protocol number %d out of range\n", proto);
750 return -EINVAL;
751 }
752
753 err = proto_register(cp->prot, 0);
754 if (err < 0)
755 return err;
756
757 mutex_lock(&proto_tab_lock);
758
759 if (proto_tab[proto]) {
760 pr_err("can: protocol %d already registered\n", proto);
761 err = -EBUSY;
762 } else
763 RCU_INIT_POINTER(proto_tab[proto], cp);
764
765 mutex_unlock(&proto_tab_lock);
766
767 if (err < 0)
768 proto_unregister(cp->prot);
769
770 return err;
771}
772EXPORT_SYMBOL(can_proto_register);
773
774
775
776
777
778void can_proto_unregister(const struct can_proto *cp)
779{
780 int proto = cp->protocol;
781
782 mutex_lock(&proto_tab_lock);
783 BUG_ON(proto_tab[proto] != cp);
784 RCU_INIT_POINTER(proto_tab[proto], NULL);
785 mutex_unlock(&proto_tab_lock);
786
787 synchronize_rcu();
788
789 proto_unregister(cp->prot);
790}
791EXPORT_SYMBOL(can_proto_unregister);
792
793
794
795
796static int can_notifier(struct notifier_block *nb, unsigned long msg,
797 void *ptr)
798{
799 struct net_device *dev = netdev_notifier_info_to_dev(ptr);
800 struct dev_rcv_lists *d;
801
802 if (!net_eq(dev_net(dev), &init_net))
803 return NOTIFY_DONE;
804
805 if (dev->type != ARPHRD_CAN)
806 return NOTIFY_DONE;
807
808 switch (msg) {
809
810 case NETDEV_REGISTER:
811
812
813 d = kzalloc(sizeof(*d), GFP_KERNEL);
814 if (!d)
815 return NOTIFY_DONE;
816 BUG_ON(dev->ml_priv);
817 dev->ml_priv = d;
818
819 break;
820
821 case NETDEV_UNREGISTER:
822 spin_lock(&can_rcvlists_lock);
823
824 d = dev->ml_priv;
825 if (d) {
826 if (d->entries)
827 d->remove_on_zero_entries = 1;
828 else {
829 kfree(d);
830 dev->ml_priv = NULL;
831 }
832 } else
833 pr_err("can: notifier: receive list not found for dev "
834 "%s\n", dev->name);
835
836 spin_unlock(&can_rcvlists_lock);
837
838 break;
839 }
840
841 return NOTIFY_DONE;
842}
843
844
845
846
847
848static struct packet_type can_packet __read_mostly = {
849 .type = cpu_to_be16(ETH_P_CAN),
850 .func = can_rcv,
851};
852
853static struct packet_type canfd_packet __read_mostly = {
854 .type = cpu_to_be16(ETH_P_CANFD),
855 .func = canfd_rcv,
856};
857
858static const struct net_proto_family can_family_ops = {
859 .family = PF_CAN,
860 .create = can_create,
861 .owner = THIS_MODULE,
862};
863
864
865static struct notifier_block can_netdev_notifier __read_mostly = {
866 .notifier_call = can_notifier,
867};
868
869static __init int can_init(void)
870{
871
872 BUILD_BUG_ON(offsetof(struct can_frame, can_dlc) !=
873 offsetof(struct canfd_frame, len) ||
874 offsetof(struct can_frame, data) !=
875 offsetof(struct canfd_frame, data));
876
877 printk(banner);
878
879 memset(&can_rx_alldev_list, 0, sizeof(can_rx_alldev_list));
880
881 rcv_cache = kmem_cache_create("can_receiver", sizeof(struct receiver),
882 0, 0, NULL);
883 if (!rcv_cache)
884 return -ENOMEM;
885
886 if (stats_timer) {
887
888 setup_timer(&can_stattimer, can_stat_update, 0);
889 mod_timer(&can_stattimer, round_jiffies(jiffies + HZ));
890 } else
891 can_stattimer.function = NULL;
892
893 can_init_proc();
894
895
896 sock_register(&can_family_ops);
897 register_netdevice_notifier(&can_netdev_notifier);
898 dev_add_pack(&can_packet);
899 dev_add_pack(&canfd_packet);
900
901 return 0;
902}
903
904static __exit void can_exit(void)
905{
906 struct net_device *dev;
907
908 if (stats_timer)
909 del_timer_sync(&can_stattimer);
910
911 can_remove_proc();
912
913
914 dev_remove_pack(&canfd_packet);
915 dev_remove_pack(&can_packet);
916 unregister_netdevice_notifier(&can_netdev_notifier);
917 sock_unregister(PF_CAN);
918
919
920 rcu_read_lock();
921 for_each_netdev_rcu(&init_net, dev) {
922 if (dev->type == ARPHRD_CAN && dev->ml_priv) {
923
924 struct dev_rcv_lists *d = dev->ml_priv;
925
926 BUG_ON(d->entries);
927 kfree(d);
928 dev->ml_priv = NULL;
929 }
930 }
931 rcu_read_unlock();
932
933 rcu_barrier();
934
935 kmem_cache_destroy(rcv_cache);
936}
937
938module_init(can_init);
939module_exit(can_exit);
940