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