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