]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - net/can/raw.c
Merge tag 'master-2014-12-08' of git://git.kernel.org/pub/scm/linux/kernel/git/linvil...
[karo-tx-linux.git] / net / can / raw.c
1 /*
2  * raw.c - Raw sockets for protocol family CAN
3  *
4  * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. Neither the name of Volkswagen nor the names of its contributors
16  *    may be used to endorse or promote products derived from this software
17  *    without specific prior written permission.
18  *
19  * Alternatively, provided that this notice is retained in full, this
20  * software may be distributed under the terms of the GNU General
21  * Public License ("GPL") version 2, in which case the provisions of the
22  * GPL apply INSTEAD OF those given above.
23  *
24  * The provided data structures and external interfaces from this code
25  * are not restricted to be used by modules with a GPL compatible license.
26  *
27  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
38  * DAMAGE.
39  *
40  */
41
42 #include <linux/module.h>
43 #include <linux/init.h>
44 #include <linux/uio.h>
45 #include <linux/net.h>
46 #include <linux/slab.h>
47 #include <linux/netdevice.h>
48 #include <linux/socket.h>
49 #include <linux/if_arp.h>
50 #include <linux/skbuff.h>
51 #include <linux/can.h>
52 #include <linux/can/core.h>
53 #include <linux/can/skb.h>
54 #include <linux/can/raw.h>
55 #include <net/sock.h>
56 #include <net/net_namespace.h>
57
58 #define CAN_RAW_VERSION CAN_VERSION
59
60 MODULE_DESCRIPTION("PF_CAN raw protocol");
61 MODULE_LICENSE("Dual BSD/GPL");
62 MODULE_AUTHOR("Urs Thuermann <urs.thuermann@volkswagen.de>");
63 MODULE_ALIAS("can-proto-1");
64
65 #define MASK_ALL 0
66
67 /*
68  * A raw socket has a list of can_filters attached to it, each receiving
69  * the CAN frames matching that filter.  If the filter list is empty,
70  * no CAN frames will be received by the socket.  The default after
71  * opening the socket, is to have one filter which receives all frames.
72  * The filter list is allocated dynamically with the exception of the
73  * list containing only one item.  This common case is optimized by
74  * storing the single filter in dfilter, to avoid using dynamic memory.
75  */
76
77 struct raw_sock {
78         struct sock sk;
79         int bound;
80         int ifindex;
81         struct notifier_block notifier;
82         int loopback;
83         int recv_own_msgs;
84         int fd_frames;
85         int count;                 /* number of active filters */
86         struct can_filter dfilter; /* default/single filter */
87         struct can_filter *filter; /* pointer to filter(s) */
88         can_err_mask_t err_mask;
89 };
90
91 /*
92  * Return pointer to store the extra msg flags for raw_recvmsg().
93  * We use the space of one unsigned int beyond the 'struct sockaddr_can'
94  * in skb->cb.
95  */
96 static inline unsigned int *raw_flags(struct sk_buff *skb)
97 {
98         BUILD_BUG_ON(sizeof(skb->cb) <= (sizeof(struct sockaddr_can) +
99                                          sizeof(unsigned int)));
100
101         /* return pointer after struct sockaddr_can */
102         return (unsigned int *)(&((struct sockaddr_can *)skb->cb)[1]);
103 }
104
105 static inline struct raw_sock *raw_sk(const struct sock *sk)
106 {
107         return (struct raw_sock *)sk;
108 }
109
110 static void raw_rcv(struct sk_buff *oskb, void *data)
111 {
112         struct sock *sk = (struct sock *)data;
113         struct raw_sock *ro = raw_sk(sk);
114         struct sockaddr_can *addr;
115         struct sk_buff *skb;
116         unsigned int *pflags;
117
118         /* check the received tx sock reference */
119         if (!ro->recv_own_msgs && oskb->sk == sk)
120                 return;
121
122         /* do not pass non-CAN2.0 frames to a legacy socket */
123         if (!ro->fd_frames && oskb->len != CAN_MTU)
124                 return;
125
126         /* clone the given skb to be able to enqueue it into the rcv queue */
127         skb = skb_clone(oskb, GFP_ATOMIC);
128         if (!skb)
129                 return;
130
131         /*
132          *  Put the datagram to the queue so that raw_recvmsg() can
133          *  get it from there.  We need to pass the interface index to
134          *  raw_recvmsg().  We pass a whole struct sockaddr_can in skb->cb
135          *  containing the interface index.
136          */
137
138         BUILD_BUG_ON(sizeof(skb->cb) < sizeof(struct sockaddr_can));
139         addr = (struct sockaddr_can *)skb->cb;
140         memset(addr, 0, sizeof(*addr));
141         addr->can_family  = AF_CAN;
142         addr->can_ifindex = skb->dev->ifindex;
143
144         /* add CAN specific message flags for raw_recvmsg() */
145         pflags = raw_flags(skb);
146         *pflags = 0;
147         if (oskb->sk)
148                 *pflags |= MSG_DONTROUTE;
149         if (oskb->sk == sk)
150                 *pflags |= MSG_CONFIRM;
151
152         if (sock_queue_rcv_skb(sk, skb) < 0)
153                 kfree_skb(skb);
154 }
155
156 static int raw_enable_filters(struct net_device *dev, struct sock *sk,
157                               struct can_filter *filter, int count)
158 {
159         int err = 0;
160         int i;
161
162         for (i = 0; i < count; i++) {
163                 err = can_rx_register(dev, filter[i].can_id,
164                                       filter[i].can_mask,
165                                       raw_rcv, sk, "raw");
166                 if (err) {
167                         /* clean up successfully registered filters */
168                         while (--i >= 0)
169                                 can_rx_unregister(dev, filter[i].can_id,
170                                                   filter[i].can_mask,
171                                                   raw_rcv, sk);
172                         break;
173                 }
174         }
175
176         return err;
177 }
178
179 static int raw_enable_errfilter(struct net_device *dev, struct sock *sk,
180                                 can_err_mask_t err_mask)
181 {
182         int err = 0;
183
184         if (err_mask)
185                 err = can_rx_register(dev, 0, err_mask | CAN_ERR_FLAG,
186                                       raw_rcv, sk, "raw");
187
188         return err;
189 }
190
191 static void raw_disable_filters(struct net_device *dev, struct sock *sk,
192                               struct can_filter *filter, int count)
193 {
194         int i;
195
196         for (i = 0; i < count; i++)
197                 can_rx_unregister(dev, filter[i].can_id, filter[i].can_mask,
198                                   raw_rcv, sk);
199 }
200
201 static inline void raw_disable_errfilter(struct net_device *dev,
202                                          struct sock *sk,
203                                          can_err_mask_t err_mask)
204
205 {
206         if (err_mask)
207                 can_rx_unregister(dev, 0, err_mask | CAN_ERR_FLAG,
208                                   raw_rcv, sk);
209 }
210
211 static inline void raw_disable_allfilters(struct net_device *dev,
212                                           struct sock *sk)
213 {
214         struct raw_sock *ro = raw_sk(sk);
215
216         raw_disable_filters(dev, sk, ro->filter, ro->count);
217         raw_disable_errfilter(dev, sk, ro->err_mask);
218 }
219
220 static int raw_enable_allfilters(struct net_device *dev, struct sock *sk)
221 {
222         struct raw_sock *ro = raw_sk(sk);
223         int err;
224
225         err = raw_enable_filters(dev, sk, ro->filter, ro->count);
226         if (!err) {
227                 err = raw_enable_errfilter(dev, sk, ro->err_mask);
228                 if (err)
229                         raw_disable_filters(dev, sk, ro->filter, ro->count);
230         }
231
232         return err;
233 }
234
235 static int raw_notifier(struct notifier_block *nb,
236                         unsigned long msg, void *ptr)
237 {
238         struct net_device *dev = netdev_notifier_info_to_dev(ptr);
239         struct raw_sock *ro = container_of(nb, struct raw_sock, notifier);
240         struct sock *sk = &ro->sk;
241
242         if (!net_eq(dev_net(dev), &init_net))
243                 return NOTIFY_DONE;
244
245         if (dev->type != ARPHRD_CAN)
246                 return NOTIFY_DONE;
247
248         if (ro->ifindex != dev->ifindex)
249                 return NOTIFY_DONE;
250
251         switch (msg) {
252
253         case NETDEV_UNREGISTER:
254                 lock_sock(sk);
255                 /* remove current filters & unregister */
256                 if (ro->bound)
257                         raw_disable_allfilters(dev, sk);
258
259                 if (ro->count > 1)
260                         kfree(ro->filter);
261
262                 ro->ifindex = 0;
263                 ro->bound   = 0;
264                 ro->count   = 0;
265                 release_sock(sk);
266
267                 sk->sk_err = ENODEV;
268                 if (!sock_flag(sk, SOCK_DEAD))
269                         sk->sk_error_report(sk);
270                 break;
271
272         case NETDEV_DOWN:
273                 sk->sk_err = ENETDOWN;
274                 if (!sock_flag(sk, SOCK_DEAD))
275                         sk->sk_error_report(sk);
276                 break;
277         }
278
279         return NOTIFY_DONE;
280 }
281
282 static int raw_init(struct sock *sk)
283 {
284         struct raw_sock *ro = raw_sk(sk);
285
286         ro->bound            = 0;
287         ro->ifindex          = 0;
288
289         /* set default filter to single entry dfilter */
290         ro->dfilter.can_id   = 0;
291         ro->dfilter.can_mask = MASK_ALL;
292         ro->filter           = &ro->dfilter;
293         ro->count            = 1;
294
295         /* set default loopback behaviour */
296         ro->loopback         = 1;
297         ro->recv_own_msgs    = 0;
298         ro->fd_frames        = 0;
299
300         /* set notifier */
301         ro->notifier.notifier_call = raw_notifier;
302
303         register_netdevice_notifier(&ro->notifier);
304
305         return 0;
306 }
307
308 static int raw_release(struct socket *sock)
309 {
310         struct sock *sk = sock->sk;
311         struct raw_sock *ro;
312
313         if (!sk)
314                 return 0;
315
316         ro = raw_sk(sk);
317
318         unregister_netdevice_notifier(&ro->notifier);
319
320         lock_sock(sk);
321
322         /* remove current filters & unregister */
323         if (ro->bound) {
324                 if (ro->ifindex) {
325                         struct net_device *dev;
326
327                         dev = dev_get_by_index(&init_net, ro->ifindex);
328                         if (dev) {
329                                 raw_disable_allfilters(dev, sk);
330                                 dev_put(dev);
331                         }
332                 } else
333                         raw_disable_allfilters(NULL, sk);
334         }
335
336         if (ro->count > 1)
337                 kfree(ro->filter);
338
339         ro->ifindex = 0;
340         ro->bound   = 0;
341         ro->count   = 0;
342
343         sock_orphan(sk);
344         sock->sk = NULL;
345
346         release_sock(sk);
347         sock_put(sk);
348
349         return 0;
350 }
351
352 static int raw_bind(struct socket *sock, struct sockaddr *uaddr, int len)
353 {
354         struct sockaddr_can *addr = (struct sockaddr_can *)uaddr;
355         struct sock *sk = sock->sk;
356         struct raw_sock *ro = raw_sk(sk);
357         int ifindex;
358         int err = 0;
359         int notify_enetdown = 0;
360
361         if (len < sizeof(*addr))
362                 return -EINVAL;
363
364         lock_sock(sk);
365
366         if (ro->bound && addr->can_ifindex == ro->ifindex)
367                 goto out;
368
369         if (addr->can_ifindex) {
370                 struct net_device *dev;
371
372                 dev = dev_get_by_index(&init_net, addr->can_ifindex);
373                 if (!dev) {
374                         err = -ENODEV;
375                         goto out;
376                 }
377                 if (dev->type != ARPHRD_CAN) {
378                         dev_put(dev);
379                         err = -ENODEV;
380                         goto out;
381                 }
382                 if (!(dev->flags & IFF_UP))
383                         notify_enetdown = 1;
384
385                 ifindex = dev->ifindex;
386
387                 /* filters set by default/setsockopt */
388                 err = raw_enable_allfilters(dev, sk);
389                 dev_put(dev);
390         } else {
391                 ifindex = 0;
392
393                 /* filters set by default/setsockopt */
394                 err = raw_enable_allfilters(NULL, sk);
395         }
396
397         if (!err) {
398                 if (ro->bound) {
399                         /* unregister old filters */
400                         if (ro->ifindex) {
401                                 struct net_device *dev;
402
403                                 dev = dev_get_by_index(&init_net, ro->ifindex);
404                                 if (dev) {
405                                         raw_disable_allfilters(dev, sk);
406                                         dev_put(dev);
407                                 }
408                         } else
409                                 raw_disable_allfilters(NULL, sk);
410                 }
411                 ro->ifindex = ifindex;
412                 ro->bound = 1;
413         }
414
415  out:
416         release_sock(sk);
417
418         if (notify_enetdown) {
419                 sk->sk_err = ENETDOWN;
420                 if (!sock_flag(sk, SOCK_DEAD))
421                         sk->sk_error_report(sk);
422         }
423
424         return err;
425 }
426
427 static int raw_getname(struct socket *sock, struct sockaddr *uaddr,
428                        int *len, int peer)
429 {
430         struct sockaddr_can *addr = (struct sockaddr_can *)uaddr;
431         struct sock *sk = sock->sk;
432         struct raw_sock *ro = raw_sk(sk);
433
434         if (peer)
435                 return -EOPNOTSUPP;
436
437         memset(addr, 0, sizeof(*addr));
438         addr->can_family  = AF_CAN;
439         addr->can_ifindex = ro->ifindex;
440
441         *len = sizeof(*addr);
442
443         return 0;
444 }
445
446 static int raw_setsockopt(struct socket *sock, int level, int optname,
447                           char __user *optval, unsigned int optlen)
448 {
449         struct sock *sk = sock->sk;
450         struct raw_sock *ro = raw_sk(sk);
451         struct can_filter *filter = NULL;  /* dyn. alloc'ed filters */
452         struct can_filter sfilter;         /* single filter */
453         struct net_device *dev = NULL;
454         can_err_mask_t err_mask = 0;
455         int count = 0;
456         int err = 0;
457
458         if (level != SOL_CAN_RAW)
459                 return -EINVAL;
460
461         switch (optname) {
462
463         case CAN_RAW_FILTER:
464                 if (optlen % sizeof(struct can_filter) != 0)
465                         return -EINVAL;
466
467                 count = optlen / sizeof(struct can_filter);
468
469                 if (count > 1) {
470                         /* filter does not fit into dfilter => alloc space */
471                         filter = memdup_user(optval, optlen);
472                         if (IS_ERR(filter))
473                                 return PTR_ERR(filter);
474                 } else if (count == 1) {
475                         if (copy_from_user(&sfilter, optval, sizeof(sfilter)))
476                                 return -EFAULT;
477                 }
478
479                 lock_sock(sk);
480
481                 if (ro->bound && ro->ifindex)
482                         dev = dev_get_by_index(&init_net, ro->ifindex);
483
484                 if (ro->bound) {
485                         /* (try to) register the new filters */
486                         if (count == 1)
487                                 err = raw_enable_filters(dev, sk, &sfilter, 1);
488                         else
489                                 err = raw_enable_filters(dev, sk, filter,
490                                                          count);
491                         if (err) {
492                                 if (count > 1)
493                                         kfree(filter);
494                                 goto out_fil;
495                         }
496
497                         /* remove old filter registrations */
498                         raw_disable_filters(dev, sk, ro->filter, ro->count);
499                 }
500
501                 /* remove old filter space */
502                 if (ro->count > 1)
503                         kfree(ro->filter);
504
505                 /* link new filters to the socket */
506                 if (count == 1) {
507                         /* copy filter data for single filter */
508                         ro->dfilter = sfilter;
509                         filter = &ro->dfilter;
510                 }
511                 ro->filter = filter;
512                 ro->count  = count;
513
514  out_fil:
515                 if (dev)
516                         dev_put(dev);
517
518                 release_sock(sk);
519
520                 break;
521
522         case CAN_RAW_ERR_FILTER:
523                 if (optlen != sizeof(err_mask))
524                         return -EINVAL;
525
526                 if (copy_from_user(&err_mask, optval, optlen))
527                         return -EFAULT;
528
529                 err_mask &= CAN_ERR_MASK;
530
531                 lock_sock(sk);
532
533                 if (ro->bound && ro->ifindex)
534                         dev = dev_get_by_index(&init_net, ro->ifindex);
535
536                 /* remove current error mask */
537                 if (ro->bound) {
538                         /* (try to) register the new err_mask */
539                         err = raw_enable_errfilter(dev, sk, err_mask);
540
541                         if (err)
542                                 goto out_err;
543
544                         /* remove old err_mask registration */
545                         raw_disable_errfilter(dev, sk, ro->err_mask);
546                 }
547
548                 /* link new err_mask to the socket */
549                 ro->err_mask = err_mask;
550
551  out_err:
552                 if (dev)
553                         dev_put(dev);
554
555                 release_sock(sk);
556
557                 break;
558
559         case CAN_RAW_LOOPBACK:
560                 if (optlen != sizeof(ro->loopback))
561                         return -EINVAL;
562
563                 if (copy_from_user(&ro->loopback, optval, optlen))
564                         return -EFAULT;
565
566                 break;
567
568         case CAN_RAW_RECV_OWN_MSGS:
569                 if (optlen != sizeof(ro->recv_own_msgs))
570                         return -EINVAL;
571
572                 if (copy_from_user(&ro->recv_own_msgs, optval, optlen))
573                         return -EFAULT;
574
575                 break;
576
577         case CAN_RAW_FD_FRAMES:
578                 if (optlen != sizeof(ro->fd_frames))
579                         return -EINVAL;
580
581                 if (copy_from_user(&ro->fd_frames, optval, optlen))
582                         return -EFAULT;
583
584                 break;
585
586         default:
587                 return -ENOPROTOOPT;
588         }
589         return err;
590 }
591
592 static int raw_getsockopt(struct socket *sock, int level, int optname,
593                           char __user *optval, int __user *optlen)
594 {
595         struct sock *sk = sock->sk;
596         struct raw_sock *ro = raw_sk(sk);
597         int len;
598         void *val;
599         int err = 0;
600
601         if (level != SOL_CAN_RAW)
602                 return -EINVAL;
603         if (get_user(len, optlen))
604                 return -EFAULT;
605         if (len < 0)
606                 return -EINVAL;
607
608         switch (optname) {
609
610         case CAN_RAW_FILTER:
611                 lock_sock(sk);
612                 if (ro->count > 0) {
613                         int fsize = ro->count * sizeof(struct can_filter);
614                         if (len > fsize)
615                                 len = fsize;
616                         if (copy_to_user(optval, ro->filter, len))
617                                 err = -EFAULT;
618                 } else
619                         len = 0;
620                 release_sock(sk);
621
622                 if (!err)
623                         err = put_user(len, optlen);
624                 return err;
625
626         case CAN_RAW_ERR_FILTER:
627                 if (len > sizeof(can_err_mask_t))
628                         len = sizeof(can_err_mask_t);
629                 val = &ro->err_mask;
630                 break;
631
632         case CAN_RAW_LOOPBACK:
633                 if (len > sizeof(int))
634                         len = sizeof(int);
635                 val = &ro->loopback;
636                 break;
637
638         case CAN_RAW_RECV_OWN_MSGS:
639                 if (len > sizeof(int))
640                         len = sizeof(int);
641                 val = &ro->recv_own_msgs;
642                 break;
643
644         case CAN_RAW_FD_FRAMES:
645                 if (len > sizeof(int))
646                         len = sizeof(int);
647                 val = &ro->fd_frames;
648                 break;
649
650         default:
651                 return -ENOPROTOOPT;
652         }
653
654         if (put_user(len, optlen))
655                 return -EFAULT;
656         if (copy_to_user(optval, val, len))
657                 return -EFAULT;
658         return 0;
659 }
660
661 static int raw_sendmsg(struct kiocb *iocb, struct socket *sock,
662                        struct msghdr *msg, size_t size)
663 {
664         struct sock *sk = sock->sk;
665         struct raw_sock *ro = raw_sk(sk);
666         struct sk_buff *skb;
667         struct net_device *dev;
668         int ifindex;
669         int err;
670
671         if (msg->msg_name) {
672                 DECLARE_SOCKADDR(struct sockaddr_can *, addr, msg->msg_name);
673
674                 if (msg->msg_namelen < sizeof(*addr))
675                         return -EINVAL;
676
677                 if (addr->can_family != AF_CAN)
678                         return -EINVAL;
679
680                 ifindex = addr->can_ifindex;
681         } else
682                 ifindex = ro->ifindex;
683
684         if (ro->fd_frames) {
685                 if (unlikely(size != CANFD_MTU && size != CAN_MTU))
686                         return -EINVAL;
687         } else {
688                 if (unlikely(size != CAN_MTU))
689                         return -EINVAL;
690         }
691
692         dev = dev_get_by_index(&init_net, ifindex);
693         if (!dev)
694                 return -ENXIO;
695
696         skb = sock_alloc_send_skb(sk, size + sizeof(struct can_skb_priv),
697                                   msg->msg_flags & MSG_DONTWAIT, &err);
698         if (!skb)
699                 goto put_dev;
700
701         can_skb_reserve(skb);
702         can_skb_prv(skb)->ifindex = dev->ifindex;
703
704         err = memcpy_from_msg(skb_put(skb, size), msg, size);
705         if (err < 0)
706                 goto free_skb;
707
708         sock_tx_timestamp(sk, &skb_shinfo(skb)->tx_flags);
709
710         skb->dev = dev;
711         skb->sk  = sk;
712         skb->priority = sk->sk_priority;
713
714         err = can_send(skb, ro->loopback);
715
716         dev_put(dev);
717
718         if (err)
719                 goto send_failed;
720
721         return size;
722
723 free_skb:
724         kfree_skb(skb);
725 put_dev:
726         dev_put(dev);
727 send_failed:
728         return err;
729 }
730
731 static int raw_recvmsg(struct kiocb *iocb, struct socket *sock,
732                        struct msghdr *msg, size_t size, int flags)
733 {
734         struct sock *sk = sock->sk;
735         struct sk_buff *skb;
736         int err = 0;
737         int noblock;
738
739         noblock =  flags & MSG_DONTWAIT;
740         flags   &= ~MSG_DONTWAIT;
741
742         skb = skb_recv_datagram(sk, flags, noblock, &err);
743         if (!skb)
744                 return err;
745
746         if (size < skb->len)
747                 msg->msg_flags |= MSG_TRUNC;
748         else
749                 size = skb->len;
750
751         err = memcpy_to_msg(msg, skb->data, size);
752         if (err < 0) {
753                 skb_free_datagram(sk, skb);
754                 return err;
755         }
756
757         sock_recv_ts_and_drops(msg, sk, skb);
758
759         if (msg->msg_name) {
760                 __sockaddr_check_size(sizeof(struct sockaddr_can));
761                 msg->msg_namelen = sizeof(struct sockaddr_can);
762                 memcpy(msg->msg_name, skb->cb, msg->msg_namelen);
763         }
764
765         /* assign the flags that have been recorded in raw_rcv() */
766         msg->msg_flags |= *(raw_flags(skb));
767
768         skb_free_datagram(sk, skb);
769
770         return size;
771 }
772
773 static const struct proto_ops raw_ops = {
774         .family        = PF_CAN,
775         .release       = raw_release,
776         .bind          = raw_bind,
777         .connect       = sock_no_connect,
778         .socketpair    = sock_no_socketpair,
779         .accept        = sock_no_accept,
780         .getname       = raw_getname,
781         .poll          = datagram_poll,
782         .ioctl         = can_ioctl,     /* use can_ioctl() from af_can.c */
783         .listen        = sock_no_listen,
784         .shutdown      = sock_no_shutdown,
785         .setsockopt    = raw_setsockopt,
786         .getsockopt    = raw_getsockopt,
787         .sendmsg       = raw_sendmsg,
788         .recvmsg       = raw_recvmsg,
789         .mmap          = sock_no_mmap,
790         .sendpage      = sock_no_sendpage,
791 };
792
793 static struct proto raw_proto __read_mostly = {
794         .name       = "CAN_RAW",
795         .owner      = THIS_MODULE,
796         .obj_size   = sizeof(struct raw_sock),
797         .init       = raw_init,
798 };
799
800 static const struct can_proto raw_can_proto = {
801         .type       = SOCK_RAW,
802         .protocol   = CAN_RAW,
803         .ops        = &raw_ops,
804         .prot       = &raw_proto,
805 };
806
807 static __init int raw_module_init(void)
808 {
809         int err;
810
811         pr_info("can: raw protocol (rev " CAN_RAW_VERSION ")\n");
812
813         err = can_proto_register(&raw_can_proto);
814         if (err < 0)
815                 printk(KERN_ERR "can: registration of raw protocol failed\n");
816
817         return err;
818 }
819
820 static __exit void raw_module_exit(void)
821 {
822         can_proto_unregister(&raw_can_proto);
823 }
824
825 module_init(raw_module_init);
826 module_exit(raw_module_exit);