can: fix multiple delivery of a single CAN frame for overlapping CAN filters
[cascardo/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 uniqframe {
78         ktime_t tstamp;
79         const struct sk_buff *skb;
80 };
81
82 struct raw_sock {
83         struct sock sk;
84         int bound;
85         int ifindex;
86         struct notifier_block notifier;
87         int loopback;
88         int recv_own_msgs;
89         int fd_frames;
90         int count;                 /* number of active filters */
91         struct can_filter dfilter; /* default/single filter */
92         struct can_filter *filter; /* pointer to filter(s) */
93         can_err_mask_t err_mask;
94         struct uniqframe __percpu *uniq;
95 };
96
97 /*
98  * Return pointer to store the extra msg flags for raw_recvmsg().
99  * We use the space of one unsigned int beyond the 'struct sockaddr_can'
100  * in skb->cb.
101  */
102 static inline unsigned int *raw_flags(struct sk_buff *skb)
103 {
104         sock_skb_cb_check_size(sizeof(struct sockaddr_can) +
105                                sizeof(unsigned int));
106
107         /* return pointer after struct sockaddr_can */
108         return (unsigned int *)(&((struct sockaddr_can *)skb->cb)[1]);
109 }
110
111 static inline struct raw_sock *raw_sk(const struct sock *sk)
112 {
113         return (struct raw_sock *)sk;
114 }
115
116 static void raw_rcv(struct sk_buff *oskb, void *data)
117 {
118         struct sock *sk = (struct sock *)data;
119         struct raw_sock *ro = raw_sk(sk);
120         struct sockaddr_can *addr;
121         struct sk_buff *skb;
122         unsigned int *pflags;
123
124         /* check the received tx sock reference */
125         if (!ro->recv_own_msgs && oskb->sk == sk)
126                 return;
127
128         /* do not pass non-CAN2.0 frames to a legacy socket */
129         if (!ro->fd_frames && oskb->len != CAN_MTU)
130                 return;
131
132         /* eliminate multiple filter matches for the same skb */
133         if (this_cpu_ptr(ro->uniq)->skb == oskb &&
134             ktime_equal(this_cpu_ptr(ro->uniq)->tstamp, oskb->tstamp)) {
135                 return;
136         } else {
137                 this_cpu_ptr(ro->uniq)->skb = oskb;
138                 this_cpu_ptr(ro->uniq)->tstamp = oskb->tstamp;
139         }
140
141         /* clone the given skb to be able to enqueue it into the rcv queue */
142         skb = skb_clone(oskb, GFP_ATOMIC);
143         if (!skb)
144                 return;
145
146         /*
147          *  Put the datagram to the queue so that raw_recvmsg() can
148          *  get it from there.  We need to pass the interface index to
149          *  raw_recvmsg().  We pass a whole struct sockaddr_can in skb->cb
150          *  containing the interface index.
151          */
152
153         sock_skb_cb_check_size(sizeof(struct sockaddr_can));
154         addr = (struct sockaddr_can *)skb->cb;
155         memset(addr, 0, sizeof(*addr));
156         addr->can_family  = AF_CAN;
157         addr->can_ifindex = skb->dev->ifindex;
158
159         /* add CAN specific message flags for raw_recvmsg() */
160         pflags = raw_flags(skb);
161         *pflags = 0;
162         if (oskb->sk)
163                 *pflags |= MSG_DONTROUTE;
164         if (oskb->sk == sk)
165                 *pflags |= MSG_CONFIRM;
166
167         if (sock_queue_rcv_skb(sk, skb) < 0)
168                 kfree_skb(skb);
169 }
170
171 static int raw_enable_filters(struct net_device *dev, struct sock *sk,
172                               struct can_filter *filter, int count)
173 {
174         int err = 0;
175         int i;
176
177         for (i = 0; i < count; i++) {
178                 err = can_rx_register(dev, filter[i].can_id,
179                                       filter[i].can_mask,
180                                       raw_rcv, sk, "raw");
181                 if (err) {
182                         /* clean up successfully registered filters */
183                         while (--i >= 0)
184                                 can_rx_unregister(dev, filter[i].can_id,
185                                                   filter[i].can_mask,
186                                                   raw_rcv, sk);
187                         break;
188                 }
189         }
190
191         return err;
192 }
193
194 static int raw_enable_errfilter(struct net_device *dev, struct sock *sk,
195                                 can_err_mask_t err_mask)
196 {
197         int err = 0;
198
199         if (err_mask)
200                 err = can_rx_register(dev, 0, err_mask | CAN_ERR_FLAG,
201                                       raw_rcv, sk, "raw");
202
203         return err;
204 }
205
206 static void raw_disable_filters(struct net_device *dev, struct sock *sk,
207                               struct can_filter *filter, int count)
208 {
209         int i;
210
211         for (i = 0; i < count; i++)
212                 can_rx_unregister(dev, filter[i].can_id, filter[i].can_mask,
213                                   raw_rcv, sk);
214 }
215
216 static inline void raw_disable_errfilter(struct net_device *dev,
217                                          struct sock *sk,
218                                          can_err_mask_t err_mask)
219
220 {
221         if (err_mask)
222                 can_rx_unregister(dev, 0, err_mask | CAN_ERR_FLAG,
223                                   raw_rcv, sk);
224 }
225
226 static inline void raw_disable_allfilters(struct net_device *dev,
227                                           struct sock *sk)
228 {
229         struct raw_sock *ro = raw_sk(sk);
230
231         raw_disable_filters(dev, sk, ro->filter, ro->count);
232         raw_disable_errfilter(dev, sk, ro->err_mask);
233 }
234
235 static int raw_enable_allfilters(struct net_device *dev, struct sock *sk)
236 {
237         struct raw_sock *ro = raw_sk(sk);
238         int err;
239
240         err = raw_enable_filters(dev, sk, ro->filter, ro->count);
241         if (!err) {
242                 err = raw_enable_errfilter(dev, sk, ro->err_mask);
243                 if (err)
244                         raw_disable_filters(dev, sk, ro->filter, ro->count);
245         }
246
247         return err;
248 }
249
250 static int raw_notifier(struct notifier_block *nb,
251                         unsigned long msg, void *ptr)
252 {
253         struct net_device *dev = netdev_notifier_info_to_dev(ptr);
254         struct raw_sock *ro = container_of(nb, struct raw_sock, notifier);
255         struct sock *sk = &ro->sk;
256
257         if (!net_eq(dev_net(dev), &init_net))
258                 return NOTIFY_DONE;
259
260         if (dev->type != ARPHRD_CAN)
261                 return NOTIFY_DONE;
262
263         if (ro->ifindex != dev->ifindex)
264                 return NOTIFY_DONE;
265
266         switch (msg) {
267
268         case NETDEV_UNREGISTER:
269                 lock_sock(sk);
270                 /* remove current filters & unregister */
271                 if (ro->bound)
272                         raw_disable_allfilters(dev, sk);
273
274                 if (ro->count > 1)
275                         kfree(ro->filter);
276
277                 ro->ifindex = 0;
278                 ro->bound   = 0;
279                 ro->count   = 0;
280                 release_sock(sk);
281
282                 sk->sk_err = ENODEV;
283                 if (!sock_flag(sk, SOCK_DEAD))
284                         sk->sk_error_report(sk);
285                 break;
286
287         case NETDEV_DOWN:
288                 sk->sk_err = ENETDOWN;
289                 if (!sock_flag(sk, SOCK_DEAD))
290                         sk->sk_error_report(sk);
291                 break;
292         }
293
294         return NOTIFY_DONE;
295 }
296
297 static int raw_init(struct sock *sk)
298 {
299         struct raw_sock *ro = raw_sk(sk);
300
301         ro->bound            = 0;
302         ro->ifindex          = 0;
303
304         /* set default filter to single entry dfilter */
305         ro->dfilter.can_id   = 0;
306         ro->dfilter.can_mask = MASK_ALL;
307         ro->filter           = &ro->dfilter;
308         ro->count            = 1;
309
310         /* set default loopback behaviour */
311         ro->loopback         = 1;
312         ro->recv_own_msgs    = 0;
313         ro->fd_frames        = 0;
314
315         /* alloc_percpu provides zero'ed memory */
316         ro->uniq = alloc_percpu(struct uniqframe);
317         if (unlikely(!ro->uniq))
318                 return -ENOMEM;
319
320         /* set notifier */
321         ro->notifier.notifier_call = raw_notifier;
322
323         register_netdevice_notifier(&ro->notifier);
324
325         return 0;
326 }
327
328 static int raw_release(struct socket *sock)
329 {
330         struct sock *sk = sock->sk;
331         struct raw_sock *ro;
332
333         if (!sk)
334                 return 0;
335
336         ro = raw_sk(sk);
337
338         unregister_netdevice_notifier(&ro->notifier);
339
340         lock_sock(sk);
341
342         /* remove current filters & unregister */
343         if (ro->bound) {
344                 if (ro->ifindex) {
345                         struct net_device *dev;
346
347                         dev = dev_get_by_index(&init_net, ro->ifindex);
348                         if (dev) {
349                                 raw_disable_allfilters(dev, sk);
350                                 dev_put(dev);
351                         }
352                 } else
353                         raw_disable_allfilters(NULL, sk);
354         }
355
356         if (ro->count > 1)
357                 kfree(ro->filter);
358
359         ro->ifindex = 0;
360         ro->bound   = 0;
361         ro->count   = 0;
362         free_percpu(ro->uniq);
363
364         sock_orphan(sk);
365         sock->sk = NULL;
366
367         release_sock(sk);
368         sock_put(sk);
369
370         return 0;
371 }
372
373 static int raw_bind(struct socket *sock, struct sockaddr *uaddr, int len)
374 {
375         struct sockaddr_can *addr = (struct sockaddr_can *)uaddr;
376         struct sock *sk = sock->sk;
377         struct raw_sock *ro = raw_sk(sk);
378         int ifindex;
379         int err = 0;
380         int notify_enetdown = 0;
381
382         if (len < sizeof(*addr))
383                 return -EINVAL;
384
385         lock_sock(sk);
386
387         if (ro->bound && addr->can_ifindex == ro->ifindex)
388                 goto out;
389
390         if (addr->can_ifindex) {
391                 struct net_device *dev;
392
393                 dev = dev_get_by_index(&init_net, addr->can_ifindex);
394                 if (!dev) {
395                         err = -ENODEV;
396                         goto out;
397                 }
398                 if (dev->type != ARPHRD_CAN) {
399                         dev_put(dev);
400                         err = -ENODEV;
401                         goto out;
402                 }
403                 if (!(dev->flags & IFF_UP))
404                         notify_enetdown = 1;
405
406                 ifindex = dev->ifindex;
407
408                 /* filters set by default/setsockopt */
409                 err = raw_enable_allfilters(dev, sk);
410                 dev_put(dev);
411         } else {
412                 ifindex = 0;
413
414                 /* filters set by default/setsockopt */
415                 err = raw_enable_allfilters(NULL, sk);
416         }
417
418         if (!err) {
419                 if (ro->bound) {
420                         /* unregister old filters */
421                         if (ro->ifindex) {
422                                 struct net_device *dev;
423
424                                 dev = dev_get_by_index(&init_net, ro->ifindex);
425                                 if (dev) {
426                                         raw_disable_allfilters(dev, sk);
427                                         dev_put(dev);
428                                 }
429                         } else
430                                 raw_disable_allfilters(NULL, sk);
431                 }
432                 ro->ifindex = ifindex;
433                 ro->bound = 1;
434         }
435
436  out:
437         release_sock(sk);
438
439         if (notify_enetdown) {
440                 sk->sk_err = ENETDOWN;
441                 if (!sock_flag(sk, SOCK_DEAD))
442                         sk->sk_error_report(sk);
443         }
444
445         return err;
446 }
447
448 static int raw_getname(struct socket *sock, struct sockaddr *uaddr,
449                        int *len, int peer)
450 {
451         struct sockaddr_can *addr = (struct sockaddr_can *)uaddr;
452         struct sock *sk = sock->sk;
453         struct raw_sock *ro = raw_sk(sk);
454
455         if (peer)
456                 return -EOPNOTSUPP;
457
458         memset(addr, 0, sizeof(*addr));
459         addr->can_family  = AF_CAN;
460         addr->can_ifindex = ro->ifindex;
461
462         *len = sizeof(*addr);
463
464         return 0;
465 }
466
467 static int raw_setsockopt(struct socket *sock, int level, int optname,
468                           char __user *optval, unsigned int optlen)
469 {
470         struct sock *sk = sock->sk;
471         struct raw_sock *ro = raw_sk(sk);
472         struct can_filter *filter = NULL;  /* dyn. alloc'ed filters */
473         struct can_filter sfilter;         /* single filter */
474         struct net_device *dev = NULL;
475         can_err_mask_t err_mask = 0;
476         int count = 0;
477         int err = 0;
478
479         if (level != SOL_CAN_RAW)
480                 return -EINVAL;
481
482         switch (optname) {
483
484         case CAN_RAW_FILTER:
485                 if (optlen % sizeof(struct can_filter) != 0)
486                         return -EINVAL;
487
488                 count = optlen / sizeof(struct can_filter);
489
490                 if (count > 1) {
491                         /* filter does not fit into dfilter => alloc space */
492                         filter = memdup_user(optval, optlen);
493                         if (IS_ERR(filter))
494                                 return PTR_ERR(filter);
495                 } else if (count == 1) {
496                         if (copy_from_user(&sfilter, optval, sizeof(sfilter)))
497                                 return -EFAULT;
498                 }
499
500                 lock_sock(sk);
501
502                 if (ro->bound && ro->ifindex)
503                         dev = dev_get_by_index(&init_net, ro->ifindex);
504
505                 if (ro->bound) {
506                         /* (try to) register the new filters */
507                         if (count == 1)
508                                 err = raw_enable_filters(dev, sk, &sfilter, 1);
509                         else
510                                 err = raw_enable_filters(dev, sk, filter,
511                                                          count);
512                         if (err) {
513                                 if (count > 1)
514                                         kfree(filter);
515                                 goto out_fil;
516                         }
517
518                         /* remove old filter registrations */
519                         raw_disable_filters(dev, sk, ro->filter, ro->count);
520                 }
521
522                 /* remove old filter space */
523                 if (ro->count > 1)
524                         kfree(ro->filter);
525
526                 /* link new filters to the socket */
527                 if (count == 1) {
528                         /* copy filter data for single filter */
529                         ro->dfilter = sfilter;
530                         filter = &ro->dfilter;
531                 }
532                 ro->filter = filter;
533                 ro->count  = count;
534
535  out_fil:
536                 if (dev)
537                         dev_put(dev);
538
539                 release_sock(sk);
540
541                 break;
542
543         case CAN_RAW_ERR_FILTER:
544                 if (optlen != sizeof(err_mask))
545                         return -EINVAL;
546
547                 if (copy_from_user(&err_mask, optval, optlen))
548                         return -EFAULT;
549
550                 err_mask &= CAN_ERR_MASK;
551
552                 lock_sock(sk);
553
554                 if (ro->bound && ro->ifindex)
555                         dev = dev_get_by_index(&init_net, ro->ifindex);
556
557                 /* remove current error mask */
558                 if (ro->bound) {
559                         /* (try to) register the new err_mask */
560                         err = raw_enable_errfilter(dev, sk, err_mask);
561
562                         if (err)
563                                 goto out_err;
564
565                         /* remove old err_mask registration */
566                         raw_disable_errfilter(dev, sk, ro->err_mask);
567                 }
568
569                 /* link new err_mask to the socket */
570                 ro->err_mask = err_mask;
571
572  out_err:
573                 if (dev)
574                         dev_put(dev);
575
576                 release_sock(sk);
577
578                 break;
579
580         case CAN_RAW_LOOPBACK:
581                 if (optlen != sizeof(ro->loopback))
582                         return -EINVAL;
583
584                 if (copy_from_user(&ro->loopback, optval, optlen))
585                         return -EFAULT;
586
587                 break;
588
589         case CAN_RAW_RECV_OWN_MSGS:
590                 if (optlen != sizeof(ro->recv_own_msgs))
591                         return -EINVAL;
592
593                 if (copy_from_user(&ro->recv_own_msgs, optval, optlen))
594                         return -EFAULT;
595
596                 break;
597
598         case CAN_RAW_FD_FRAMES:
599                 if (optlen != sizeof(ro->fd_frames))
600                         return -EINVAL;
601
602                 if (copy_from_user(&ro->fd_frames, optval, optlen))
603                         return -EFAULT;
604
605                 break;
606
607         default:
608                 return -ENOPROTOOPT;
609         }
610         return err;
611 }
612
613 static int raw_getsockopt(struct socket *sock, int level, int optname,
614                           char __user *optval, int __user *optlen)
615 {
616         struct sock *sk = sock->sk;
617         struct raw_sock *ro = raw_sk(sk);
618         int len;
619         void *val;
620         int err = 0;
621
622         if (level != SOL_CAN_RAW)
623                 return -EINVAL;
624         if (get_user(len, optlen))
625                 return -EFAULT;
626         if (len < 0)
627                 return -EINVAL;
628
629         switch (optname) {
630
631         case CAN_RAW_FILTER:
632                 lock_sock(sk);
633                 if (ro->count > 0) {
634                         int fsize = ro->count * sizeof(struct can_filter);
635                         if (len > fsize)
636                                 len = fsize;
637                         if (copy_to_user(optval, ro->filter, len))
638                                 err = -EFAULT;
639                 } else
640                         len = 0;
641                 release_sock(sk);
642
643                 if (!err)
644                         err = put_user(len, optlen);
645                 return err;
646
647         case CAN_RAW_ERR_FILTER:
648                 if (len > sizeof(can_err_mask_t))
649                         len = sizeof(can_err_mask_t);
650                 val = &ro->err_mask;
651                 break;
652
653         case CAN_RAW_LOOPBACK:
654                 if (len > sizeof(int))
655                         len = sizeof(int);
656                 val = &ro->loopback;
657                 break;
658
659         case CAN_RAW_RECV_OWN_MSGS:
660                 if (len > sizeof(int))
661                         len = sizeof(int);
662                 val = &ro->recv_own_msgs;
663                 break;
664
665         case CAN_RAW_FD_FRAMES:
666                 if (len > sizeof(int))
667                         len = sizeof(int);
668                 val = &ro->fd_frames;
669                 break;
670
671         default:
672                 return -ENOPROTOOPT;
673         }
674
675         if (put_user(len, optlen))
676                 return -EFAULT;
677         if (copy_to_user(optval, val, len))
678                 return -EFAULT;
679         return 0;
680 }
681
682 static int raw_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
683 {
684         struct sock *sk = sock->sk;
685         struct raw_sock *ro = raw_sk(sk);
686         struct sk_buff *skb;
687         struct net_device *dev;
688         int ifindex;
689         int err;
690
691         if (msg->msg_name) {
692                 DECLARE_SOCKADDR(struct sockaddr_can *, addr, msg->msg_name);
693
694                 if (msg->msg_namelen < sizeof(*addr))
695                         return -EINVAL;
696
697                 if (addr->can_family != AF_CAN)
698                         return -EINVAL;
699
700                 ifindex = addr->can_ifindex;
701         } else
702                 ifindex = ro->ifindex;
703
704         if (ro->fd_frames) {
705                 if (unlikely(size != CANFD_MTU && size != CAN_MTU))
706                         return -EINVAL;
707         } else {
708                 if (unlikely(size != CAN_MTU))
709                         return -EINVAL;
710         }
711
712         dev = dev_get_by_index(&init_net, ifindex);
713         if (!dev)
714                 return -ENXIO;
715
716         skb = sock_alloc_send_skb(sk, size + sizeof(struct can_skb_priv),
717                                   msg->msg_flags & MSG_DONTWAIT, &err);
718         if (!skb)
719                 goto put_dev;
720
721         can_skb_reserve(skb);
722         can_skb_prv(skb)->ifindex = dev->ifindex;
723
724         err = memcpy_from_msg(skb_put(skb, size), msg, size);
725         if (err < 0)
726                 goto free_skb;
727
728         sock_tx_timestamp(sk, &skb_shinfo(skb)->tx_flags);
729
730         skb->dev = dev;
731         skb->sk  = sk;
732         skb->priority = sk->sk_priority;
733
734         err = can_send(skb, ro->loopback);
735
736         dev_put(dev);
737
738         if (err)
739                 goto send_failed;
740
741         return size;
742
743 free_skb:
744         kfree_skb(skb);
745 put_dev:
746         dev_put(dev);
747 send_failed:
748         return err;
749 }
750
751 static int raw_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
752                        int flags)
753 {
754         struct sock *sk = sock->sk;
755         struct sk_buff *skb;
756         int err = 0;
757         int noblock;
758
759         noblock =  flags & MSG_DONTWAIT;
760         flags   &= ~MSG_DONTWAIT;
761
762         skb = skb_recv_datagram(sk, flags, noblock, &err);
763         if (!skb)
764                 return err;
765
766         if (size < skb->len)
767                 msg->msg_flags |= MSG_TRUNC;
768         else
769                 size = skb->len;
770
771         err = memcpy_to_msg(msg, skb->data, size);
772         if (err < 0) {
773                 skb_free_datagram(sk, skb);
774                 return err;
775         }
776
777         sock_recv_ts_and_drops(msg, sk, skb);
778
779         if (msg->msg_name) {
780                 __sockaddr_check_size(sizeof(struct sockaddr_can));
781                 msg->msg_namelen = sizeof(struct sockaddr_can);
782                 memcpy(msg->msg_name, skb->cb, msg->msg_namelen);
783         }
784
785         /* assign the flags that have been recorded in raw_rcv() */
786         msg->msg_flags |= *(raw_flags(skb));
787
788         skb_free_datagram(sk, skb);
789
790         return size;
791 }
792
793 static const struct proto_ops raw_ops = {
794         .family        = PF_CAN,
795         .release       = raw_release,
796         .bind          = raw_bind,
797         .connect       = sock_no_connect,
798         .socketpair    = sock_no_socketpair,
799         .accept        = sock_no_accept,
800         .getname       = raw_getname,
801         .poll          = datagram_poll,
802         .ioctl         = can_ioctl,     /* use can_ioctl() from af_can.c */
803         .listen        = sock_no_listen,
804         .shutdown      = sock_no_shutdown,
805         .setsockopt    = raw_setsockopt,
806         .getsockopt    = raw_getsockopt,
807         .sendmsg       = raw_sendmsg,
808         .recvmsg       = raw_recvmsg,
809         .mmap          = sock_no_mmap,
810         .sendpage      = sock_no_sendpage,
811 };
812
813 static struct proto raw_proto __read_mostly = {
814         .name       = "CAN_RAW",
815         .owner      = THIS_MODULE,
816         .obj_size   = sizeof(struct raw_sock),
817         .init       = raw_init,
818 };
819
820 static const struct can_proto raw_can_proto = {
821         .type       = SOCK_RAW,
822         .protocol   = CAN_RAW,
823         .ops        = &raw_ops,
824         .prot       = &raw_proto,
825 };
826
827 static __init int raw_module_init(void)
828 {
829         int err;
830
831         pr_info("can: raw protocol (rev " CAN_RAW_VERSION ")\n");
832
833         err = can_proto_register(&raw_can_proto);
834         if (err < 0)
835                 printk(KERN_ERR "can: registration of raw protocol failed\n");
836
837         return err;
838 }
839
840 static __exit void raw_module_exit(void)
841 {
842         can_proto_unregister(&raw_can_proto);
843 }
844
845 module_init(raw_module_init);
846 module_exit(raw_module_exit);