xref: /linux/net/can/raw.c (revision 21d2e6737c9789aa9b23c8a4131cbca8260139fd)
1 // SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
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/dev.h> /* for can_is_canxl_dev_mtu() */
54 #include <linux/can/skb.h>
55 #include <linux/can/raw.h>
56 #include <net/sock.h>
57 #include <net/net_namespace.h>
58 
59 MODULE_DESCRIPTION("PF_CAN raw protocol");
60 MODULE_LICENSE("Dual BSD/GPL");
61 MODULE_AUTHOR("Urs Thuermann <urs.thuermann@volkswagen.de>");
62 MODULE_ALIAS("can-proto-1");
63 
64 #define RAW_MIN_NAMELEN CAN_REQUIRED_SIZE(struct sockaddr_can, can_ifindex)
65 
66 #define MASK_ALL 0
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 	int skbcnt;
79 	const struct sk_buff *skb;
80 	unsigned int join_rx_count;
81 };
82 
83 struct raw_sock {
84 	struct sock sk;
85 	int bound;
86 	int ifindex;
87 	struct net_device *dev;
88 	netdevice_tracker dev_tracker;
89 	struct list_head notifier;
90 	int loopback;
91 	int recv_own_msgs;
92 	int fd_frames;
93 	int xl_frames;
94 	struct can_raw_vcid_options raw_vcid_opts;
95 	canid_t tx_vcid_shifted;
96 	canid_t rx_vcid_shifted;
97 	canid_t rx_vcid_mask_shifted;
98 	int join_filters;
99 	int count;                 /* number of active filters */
100 	struct can_filter dfilter; /* default/single filter */
101 	struct can_filter *filter; /* pointer to filter(s) */
102 	can_err_mask_t err_mask;
103 	struct uniqframe __percpu *uniq;
104 };
105 
106 static LIST_HEAD(raw_notifier_list);
107 static DEFINE_SPINLOCK(raw_notifier_lock);
108 static struct raw_sock *raw_busy_notifier;
109 
110 /* Return pointer to store the extra msg flags for raw_recvmsg().
111  * We use the space of one unsigned int beyond the 'struct sockaddr_can'
112  * in skb->cb.
113  */
114 static inline unsigned int *raw_flags(struct sk_buff *skb)
115 {
116 	sock_skb_cb_check_size(sizeof(struct sockaddr_can) +
117 			       sizeof(unsigned int));
118 
119 	/* return pointer after struct sockaddr_can */
120 	return (unsigned int *)(&((struct sockaddr_can *)skb->cb)[1]);
121 }
122 
123 static inline struct raw_sock *raw_sk(const struct sock *sk)
124 {
125 	return (struct raw_sock *)sk;
126 }
127 
128 static void raw_rcv(struct sk_buff *oskb, void *data)
129 {
130 	struct sock *sk = (struct sock *)data;
131 	struct raw_sock *ro = raw_sk(sk);
132 	struct sockaddr_can *addr;
133 	struct sk_buff *skb;
134 	unsigned int *pflags;
135 
136 	/* check the received tx sock reference */
137 	if (!ro->recv_own_msgs && oskb->sk == sk)
138 		return;
139 
140 	/* make sure to not pass oversized frames to the socket */
141 	if (!ro->fd_frames && can_is_canfd_skb(oskb))
142 		return;
143 
144 	if (can_is_canxl_skb(oskb)) {
145 		struct canxl_frame *cxl = (struct canxl_frame *)oskb->data;
146 
147 		/* make sure to not pass oversized frames to the socket */
148 		if (!ro->xl_frames)
149 			return;
150 
151 		/* filter CAN XL VCID content */
152 		if (ro->raw_vcid_opts.flags & CAN_RAW_XL_VCID_RX_FILTER) {
153 			/* apply VCID filter if user enabled the filter */
154 			if ((cxl->prio & ro->rx_vcid_mask_shifted) !=
155 			    (ro->rx_vcid_shifted & ro->rx_vcid_mask_shifted))
156 				return;
157 		} else {
158 			/* no filter => do not forward VCID tagged frames */
159 			if (cxl->prio & CANXL_VCID_MASK)
160 				return;
161 		}
162 	}
163 
164 	/* eliminate multiple filter matches for the same skb */
165 	if (this_cpu_ptr(ro->uniq)->skb == oskb &&
166 	    this_cpu_ptr(ro->uniq)->skbcnt == can_skb_prv(oskb)->skbcnt) {
167 		if (!ro->join_filters)
168 			return;
169 
170 		this_cpu_inc(ro->uniq->join_rx_count);
171 		/* drop frame until all enabled filters matched */
172 		if (this_cpu_ptr(ro->uniq)->join_rx_count < ro->count)
173 			return;
174 	} else {
175 		this_cpu_ptr(ro->uniq)->skb = oskb;
176 		this_cpu_ptr(ro->uniq)->skbcnt = can_skb_prv(oskb)->skbcnt;
177 		this_cpu_ptr(ro->uniq)->join_rx_count = 1;
178 		/* drop first frame to check all enabled filters? */
179 		if (ro->join_filters && ro->count > 1)
180 			return;
181 	}
182 
183 	/* clone the given skb to be able to enqueue it into the rcv queue */
184 	skb = skb_clone(oskb, GFP_ATOMIC);
185 	if (!skb)
186 		return;
187 
188 	/* Put the datagram to the queue so that raw_recvmsg() can get
189 	 * it from there. We need to pass the interface index to
190 	 * raw_recvmsg(). We pass a whole struct sockaddr_can in
191 	 * skb->cb containing the interface index.
192 	 */
193 
194 	sock_skb_cb_check_size(sizeof(struct sockaddr_can));
195 	addr = (struct sockaddr_can *)skb->cb;
196 	memset(addr, 0, sizeof(*addr));
197 	addr->can_family = AF_CAN;
198 	addr->can_ifindex = skb->dev->ifindex;
199 
200 	/* add CAN specific message flags for raw_recvmsg() */
201 	pflags = raw_flags(skb);
202 	*pflags = 0;
203 	if (oskb->sk)
204 		*pflags |= MSG_DONTROUTE;
205 	if (oskb->sk == sk)
206 		*pflags |= MSG_CONFIRM;
207 
208 	if (sock_queue_rcv_skb(sk, skb) < 0)
209 		kfree_skb(skb);
210 }
211 
212 static int raw_enable_filters(struct net *net, struct net_device *dev,
213 			      struct sock *sk, struct can_filter *filter,
214 			      int count)
215 {
216 	int err = 0;
217 	int i;
218 
219 	for (i = 0; i < count; i++) {
220 		err = can_rx_register(net, dev, filter[i].can_id,
221 				      filter[i].can_mask,
222 				      raw_rcv, sk, "raw", sk);
223 		if (err) {
224 			/* clean up successfully registered filters */
225 			while (--i >= 0)
226 				can_rx_unregister(net, dev, filter[i].can_id,
227 						  filter[i].can_mask,
228 						  raw_rcv, sk);
229 			break;
230 		}
231 	}
232 
233 	return err;
234 }
235 
236 static int raw_enable_errfilter(struct net *net, struct net_device *dev,
237 				struct sock *sk, can_err_mask_t err_mask)
238 {
239 	int err = 0;
240 
241 	if (err_mask)
242 		err = can_rx_register(net, dev, 0, err_mask | CAN_ERR_FLAG,
243 				      raw_rcv, sk, "raw", sk);
244 
245 	return err;
246 }
247 
248 static void raw_disable_filters(struct net *net, struct net_device *dev,
249 				struct sock *sk, struct can_filter *filter,
250 				int count)
251 {
252 	int i;
253 
254 	for (i = 0; i < count; i++)
255 		can_rx_unregister(net, dev, filter[i].can_id,
256 				  filter[i].can_mask, raw_rcv, sk);
257 }
258 
259 static inline void raw_disable_errfilter(struct net *net,
260 					 struct net_device *dev,
261 					 struct sock *sk,
262 					 can_err_mask_t err_mask)
263 
264 {
265 	if (err_mask)
266 		can_rx_unregister(net, dev, 0, err_mask | CAN_ERR_FLAG,
267 				  raw_rcv, sk);
268 }
269 
270 static inline void raw_disable_allfilters(struct net *net,
271 					  struct net_device *dev,
272 					  struct sock *sk)
273 {
274 	struct raw_sock *ro = raw_sk(sk);
275 
276 	raw_disable_filters(net, dev, sk, ro->filter, ro->count);
277 	raw_disable_errfilter(net, dev, sk, ro->err_mask);
278 }
279 
280 static int raw_enable_allfilters(struct net *net, struct net_device *dev,
281 				 struct sock *sk)
282 {
283 	struct raw_sock *ro = raw_sk(sk);
284 	int err;
285 
286 	err = raw_enable_filters(net, dev, sk, ro->filter, ro->count);
287 	if (!err) {
288 		err = raw_enable_errfilter(net, dev, sk, ro->err_mask);
289 		if (err)
290 			raw_disable_filters(net, dev, sk, ro->filter,
291 					    ro->count);
292 	}
293 
294 	return err;
295 }
296 
297 static void raw_notify(struct raw_sock *ro, unsigned long msg,
298 		       struct net_device *dev)
299 {
300 	struct sock *sk = &ro->sk;
301 
302 	if (!net_eq(dev_net(dev), sock_net(sk)))
303 		return;
304 
305 	if (ro->dev != dev)
306 		return;
307 
308 	switch (msg) {
309 	case NETDEV_UNREGISTER:
310 		lock_sock(sk);
311 		/* remove current filters & unregister */
312 		if (ro->bound) {
313 			raw_disable_allfilters(dev_net(dev), dev, sk);
314 			netdev_put(dev, &ro->dev_tracker);
315 		}
316 
317 		if (ro->count > 1)
318 			kfree(ro->filter);
319 
320 		ro->ifindex = 0;
321 		ro->bound = 0;
322 		ro->dev = NULL;
323 		ro->count = 0;
324 		release_sock(sk);
325 
326 		sk->sk_err = ENODEV;
327 		if (!sock_flag(sk, SOCK_DEAD))
328 			sk_error_report(sk);
329 		break;
330 
331 	case NETDEV_DOWN:
332 		sk->sk_err = ENETDOWN;
333 		if (!sock_flag(sk, SOCK_DEAD))
334 			sk_error_report(sk);
335 		break;
336 	}
337 }
338 
339 static int raw_notifier(struct notifier_block *nb, unsigned long msg,
340 			void *ptr)
341 {
342 	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
343 
344 	if (dev->type != ARPHRD_CAN)
345 		return NOTIFY_DONE;
346 	if (msg != NETDEV_UNREGISTER && msg != NETDEV_DOWN)
347 		return NOTIFY_DONE;
348 	if (unlikely(raw_busy_notifier)) /* Check for reentrant bug. */
349 		return NOTIFY_DONE;
350 
351 	spin_lock(&raw_notifier_lock);
352 	list_for_each_entry(raw_busy_notifier, &raw_notifier_list, notifier) {
353 		spin_unlock(&raw_notifier_lock);
354 		raw_notify(raw_busy_notifier, msg, dev);
355 		spin_lock(&raw_notifier_lock);
356 	}
357 	raw_busy_notifier = NULL;
358 	spin_unlock(&raw_notifier_lock);
359 	return NOTIFY_DONE;
360 }
361 
362 static int raw_init(struct sock *sk)
363 {
364 	struct raw_sock *ro = raw_sk(sk);
365 
366 	ro->bound            = 0;
367 	ro->ifindex          = 0;
368 	ro->dev              = NULL;
369 
370 	/* set default filter to single entry dfilter */
371 	ro->dfilter.can_id   = 0;
372 	ro->dfilter.can_mask = MASK_ALL;
373 	ro->filter           = &ro->dfilter;
374 	ro->count            = 1;
375 
376 	/* set default loopback behaviour */
377 	ro->loopback         = 1;
378 	ro->recv_own_msgs    = 0;
379 	ro->fd_frames        = 0;
380 	ro->xl_frames        = 0;
381 	ro->join_filters     = 0;
382 
383 	/* alloc_percpu provides zero'ed memory */
384 	ro->uniq = alloc_percpu(struct uniqframe);
385 	if (unlikely(!ro->uniq))
386 		return -ENOMEM;
387 
388 	/* set notifier */
389 	spin_lock(&raw_notifier_lock);
390 	list_add_tail(&ro->notifier, &raw_notifier_list);
391 	spin_unlock(&raw_notifier_lock);
392 
393 	return 0;
394 }
395 
396 static int raw_release(struct socket *sock)
397 {
398 	struct sock *sk = sock->sk;
399 	struct raw_sock *ro;
400 
401 	if (!sk)
402 		return 0;
403 
404 	ro = raw_sk(sk);
405 
406 	spin_lock(&raw_notifier_lock);
407 	while (raw_busy_notifier == ro) {
408 		spin_unlock(&raw_notifier_lock);
409 		schedule_timeout_uninterruptible(1);
410 		spin_lock(&raw_notifier_lock);
411 	}
412 	list_del(&ro->notifier);
413 	spin_unlock(&raw_notifier_lock);
414 
415 	rtnl_lock();
416 	lock_sock(sk);
417 
418 	/* remove current filters & unregister */
419 	if (ro->bound) {
420 		if (ro->dev) {
421 			raw_disable_allfilters(dev_net(ro->dev), ro->dev, sk);
422 			netdev_put(ro->dev, &ro->dev_tracker);
423 		} else {
424 			raw_disable_allfilters(sock_net(sk), NULL, sk);
425 		}
426 	}
427 
428 	if (ro->count > 1)
429 		kfree(ro->filter);
430 
431 	ro->ifindex = 0;
432 	ro->bound = 0;
433 	ro->dev = NULL;
434 	ro->count = 0;
435 	free_percpu(ro->uniq);
436 
437 	sock_orphan(sk);
438 	sock->sk = NULL;
439 
440 	release_sock(sk);
441 	rtnl_unlock();
442 
443 	sock_put(sk);
444 
445 	return 0;
446 }
447 
448 static int raw_bind(struct socket *sock, struct sockaddr *uaddr, int len)
449 {
450 	struct sockaddr_can *addr = (struct sockaddr_can *)uaddr;
451 	struct sock *sk = sock->sk;
452 	struct raw_sock *ro = raw_sk(sk);
453 	struct net_device *dev = NULL;
454 	int ifindex;
455 	int err = 0;
456 	int notify_enetdown = 0;
457 
458 	if (len < RAW_MIN_NAMELEN)
459 		return -EINVAL;
460 	if (addr->can_family != AF_CAN)
461 		return -EINVAL;
462 
463 	rtnl_lock();
464 	lock_sock(sk);
465 
466 	if (ro->bound && addr->can_ifindex == ro->ifindex)
467 		goto out;
468 
469 	if (addr->can_ifindex) {
470 		dev = dev_get_by_index(sock_net(sk), addr->can_ifindex);
471 		if (!dev) {
472 			err = -ENODEV;
473 			goto out;
474 		}
475 		if (dev->type != ARPHRD_CAN) {
476 			err = -ENODEV;
477 			goto out_put_dev;
478 		}
479 
480 		if (!(dev->flags & IFF_UP))
481 			notify_enetdown = 1;
482 
483 		ifindex = dev->ifindex;
484 
485 		/* filters set by default/setsockopt */
486 		err = raw_enable_allfilters(sock_net(sk), dev, sk);
487 		if (err)
488 			goto out_put_dev;
489 
490 	} else {
491 		ifindex = 0;
492 
493 		/* filters set by default/setsockopt */
494 		err = raw_enable_allfilters(sock_net(sk), NULL, sk);
495 	}
496 
497 	if (!err) {
498 		if (ro->bound) {
499 			/* unregister old filters */
500 			if (ro->dev) {
501 				raw_disable_allfilters(dev_net(ro->dev),
502 						       ro->dev, sk);
503 				/* drop reference to old ro->dev */
504 				netdev_put(ro->dev, &ro->dev_tracker);
505 			} else {
506 				raw_disable_allfilters(sock_net(sk), NULL, sk);
507 			}
508 		}
509 		ro->ifindex = ifindex;
510 		ro->bound = 1;
511 		/* bind() ok -> hold a reference for new ro->dev */
512 		ro->dev = dev;
513 		if (ro->dev)
514 			netdev_hold(ro->dev, &ro->dev_tracker, GFP_KERNEL);
515 	}
516 
517 out_put_dev:
518 	/* remove potential reference from dev_get_by_index() */
519 	dev_put(dev);
520 out:
521 	release_sock(sk);
522 	rtnl_unlock();
523 
524 	if (notify_enetdown) {
525 		sk->sk_err = ENETDOWN;
526 		if (!sock_flag(sk, SOCK_DEAD))
527 			sk_error_report(sk);
528 	}
529 
530 	return err;
531 }
532 
533 static int raw_getname(struct socket *sock, struct sockaddr *uaddr,
534 		       int peer)
535 {
536 	struct sockaddr_can *addr = (struct sockaddr_can *)uaddr;
537 	struct sock *sk = sock->sk;
538 	struct raw_sock *ro = raw_sk(sk);
539 
540 	if (peer)
541 		return -EOPNOTSUPP;
542 
543 	memset(addr, 0, RAW_MIN_NAMELEN);
544 	addr->can_family  = AF_CAN;
545 	addr->can_ifindex = ro->ifindex;
546 
547 	return RAW_MIN_NAMELEN;
548 }
549 
550 static int raw_setsockopt(struct socket *sock, int level, int optname,
551 			  sockptr_t optval, unsigned int optlen)
552 {
553 	struct sock *sk = sock->sk;
554 	struct raw_sock *ro = raw_sk(sk);
555 	struct can_filter *filter = NULL;  /* dyn. alloc'ed filters */
556 	struct can_filter sfilter;         /* single filter */
557 	struct net_device *dev = NULL;
558 	can_err_mask_t err_mask = 0;
559 	int fd_frames;
560 	int count = 0;
561 	int err = 0;
562 
563 	if (level != SOL_CAN_RAW)
564 		return -EINVAL;
565 
566 	switch (optname) {
567 	case CAN_RAW_FILTER:
568 		if (optlen % sizeof(struct can_filter) != 0)
569 			return -EINVAL;
570 
571 		if (optlen > CAN_RAW_FILTER_MAX * sizeof(struct can_filter))
572 			return -EINVAL;
573 
574 		count = optlen / sizeof(struct can_filter);
575 
576 		if (count > 1) {
577 			/* filter does not fit into dfilter => alloc space */
578 			filter = memdup_sockptr(optval, optlen);
579 			if (IS_ERR(filter))
580 				return PTR_ERR(filter);
581 		} else if (count == 1) {
582 			if (copy_from_sockptr(&sfilter, optval, sizeof(sfilter)))
583 				return -EFAULT;
584 		}
585 
586 		rtnl_lock();
587 		lock_sock(sk);
588 
589 		dev = ro->dev;
590 		if (ro->bound && dev) {
591 			if (dev->reg_state != NETREG_REGISTERED) {
592 				if (count > 1)
593 					kfree(filter);
594 				err = -ENODEV;
595 				goto out_fil;
596 			}
597 		}
598 
599 		if (ro->bound) {
600 			/* (try to) register the new filters */
601 			if (count == 1)
602 				err = raw_enable_filters(sock_net(sk), dev, sk,
603 							 &sfilter, 1);
604 			else
605 				err = raw_enable_filters(sock_net(sk), dev, sk,
606 							 filter, count);
607 			if (err) {
608 				if (count > 1)
609 					kfree(filter);
610 				goto out_fil;
611 			}
612 
613 			/* remove old filter registrations */
614 			raw_disable_filters(sock_net(sk), dev, sk, ro->filter,
615 					    ro->count);
616 		}
617 
618 		/* remove old filter space */
619 		if (ro->count > 1)
620 			kfree(ro->filter);
621 
622 		/* link new filters to the socket */
623 		if (count == 1) {
624 			/* copy filter data for single filter */
625 			ro->dfilter = sfilter;
626 			filter = &ro->dfilter;
627 		}
628 		ro->filter = filter;
629 		ro->count  = count;
630 
631  out_fil:
632 		release_sock(sk);
633 		rtnl_unlock();
634 
635 		break;
636 
637 	case CAN_RAW_ERR_FILTER:
638 		if (optlen != sizeof(err_mask))
639 			return -EINVAL;
640 
641 		if (copy_from_sockptr(&err_mask, optval, optlen))
642 			return -EFAULT;
643 
644 		err_mask &= CAN_ERR_MASK;
645 
646 		rtnl_lock();
647 		lock_sock(sk);
648 
649 		dev = ro->dev;
650 		if (ro->bound && dev) {
651 			if (dev->reg_state != NETREG_REGISTERED) {
652 				err = -ENODEV;
653 				goto out_err;
654 			}
655 		}
656 
657 		/* remove current error mask */
658 		if (ro->bound) {
659 			/* (try to) register the new err_mask */
660 			err = raw_enable_errfilter(sock_net(sk), dev, sk,
661 						   err_mask);
662 
663 			if (err)
664 				goto out_err;
665 
666 			/* remove old err_mask registration */
667 			raw_disable_errfilter(sock_net(sk), dev, sk,
668 					      ro->err_mask);
669 		}
670 
671 		/* link new err_mask to the socket */
672 		ro->err_mask = err_mask;
673 
674  out_err:
675 		release_sock(sk);
676 		rtnl_unlock();
677 
678 		break;
679 
680 	case CAN_RAW_LOOPBACK:
681 		if (optlen != sizeof(ro->loopback))
682 			return -EINVAL;
683 
684 		if (copy_from_sockptr(&ro->loopback, optval, optlen))
685 			return -EFAULT;
686 
687 		break;
688 
689 	case CAN_RAW_RECV_OWN_MSGS:
690 		if (optlen != sizeof(ro->recv_own_msgs))
691 			return -EINVAL;
692 
693 		if (copy_from_sockptr(&ro->recv_own_msgs, optval, optlen))
694 			return -EFAULT;
695 
696 		break;
697 
698 	case CAN_RAW_FD_FRAMES:
699 		if (optlen != sizeof(fd_frames))
700 			return -EINVAL;
701 
702 		if (copy_from_sockptr(&fd_frames, optval, optlen))
703 			return -EFAULT;
704 
705 		/* Enabling CAN XL includes CAN FD */
706 		if (ro->xl_frames && !fd_frames)
707 			return -EINVAL;
708 
709 		ro->fd_frames = fd_frames;
710 		break;
711 
712 	case CAN_RAW_XL_FRAMES:
713 		if (optlen != sizeof(ro->xl_frames))
714 			return -EINVAL;
715 
716 		if (copy_from_sockptr(&ro->xl_frames, optval, optlen))
717 			return -EFAULT;
718 
719 		/* Enabling CAN XL includes CAN FD */
720 		if (ro->xl_frames)
721 			ro->fd_frames = ro->xl_frames;
722 		break;
723 
724 	case CAN_RAW_XL_VCID_OPTS:
725 		if (optlen != sizeof(ro->raw_vcid_opts))
726 			return -EINVAL;
727 
728 		if (copy_from_sockptr(&ro->raw_vcid_opts, optval, optlen))
729 			return -EFAULT;
730 
731 		/* prepare 32 bit values for handling in hot path */
732 		ro->tx_vcid_shifted = ro->raw_vcid_opts.tx_vcid << CANXL_VCID_OFFSET;
733 		ro->rx_vcid_shifted = ro->raw_vcid_opts.rx_vcid << CANXL_VCID_OFFSET;
734 		ro->rx_vcid_mask_shifted = ro->raw_vcid_opts.rx_vcid_mask << CANXL_VCID_OFFSET;
735 		break;
736 
737 	case CAN_RAW_JOIN_FILTERS:
738 		if (optlen != sizeof(ro->join_filters))
739 			return -EINVAL;
740 
741 		if (copy_from_sockptr(&ro->join_filters, optval, optlen))
742 			return -EFAULT;
743 
744 		break;
745 
746 	default:
747 		return -ENOPROTOOPT;
748 	}
749 	return err;
750 }
751 
752 static int raw_getsockopt(struct socket *sock, int level, int optname,
753 			  char __user *optval, int __user *optlen)
754 {
755 	struct sock *sk = sock->sk;
756 	struct raw_sock *ro = raw_sk(sk);
757 	int len;
758 	void *val;
759 	int err = 0;
760 
761 	if (level != SOL_CAN_RAW)
762 		return -EINVAL;
763 	if (get_user(len, optlen))
764 		return -EFAULT;
765 	if (len < 0)
766 		return -EINVAL;
767 
768 	switch (optname) {
769 	case CAN_RAW_FILTER:
770 		lock_sock(sk);
771 		if (ro->count > 0) {
772 			int fsize = ro->count * sizeof(struct can_filter);
773 
774 			/* user space buffer to small for filter list? */
775 			if (len < fsize) {
776 				/* return -ERANGE and needed space in optlen */
777 				err = -ERANGE;
778 				if (put_user(fsize, optlen))
779 					err = -EFAULT;
780 			} else {
781 				if (len > fsize)
782 					len = fsize;
783 				if (copy_to_user(optval, ro->filter, len))
784 					err = -EFAULT;
785 			}
786 		} else {
787 			len = 0;
788 		}
789 		release_sock(sk);
790 
791 		if (!err)
792 			err = put_user(len, optlen);
793 		return err;
794 
795 	case CAN_RAW_ERR_FILTER:
796 		if (len > sizeof(can_err_mask_t))
797 			len = sizeof(can_err_mask_t);
798 		val = &ro->err_mask;
799 		break;
800 
801 	case CAN_RAW_LOOPBACK:
802 		if (len > sizeof(int))
803 			len = sizeof(int);
804 		val = &ro->loopback;
805 		break;
806 
807 	case CAN_RAW_RECV_OWN_MSGS:
808 		if (len > sizeof(int))
809 			len = sizeof(int);
810 		val = &ro->recv_own_msgs;
811 		break;
812 
813 	case CAN_RAW_FD_FRAMES:
814 		if (len > sizeof(int))
815 			len = sizeof(int);
816 		val = &ro->fd_frames;
817 		break;
818 
819 	case CAN_RAW_XL_FRAMES:
820 		if (len > sizeof(int))
821 			len = sizeof(int);
822 		val = &ro->xl_frames;
823 		break;
824 
825 	case CAN_RAW_XL_VCID_OPTS:
826 		/* user space buffer to small for VCID opts? */
827 		if (len < sizeof(ro->raw_vcid_opts)) {
828 			/* return -ERANGE and needed space in optlen */
829 			err = -ERANGE;
830 			if (put_user(sizeof(ro->raw_vcid_opts), optlen))
831 				err = -EFAULT;
832 		} else {
833 			if (len > sizeof(ro->raw_vcid_opts))
834 				len = sizeof(ro->raw_vcid_opts);
835 			if (copy_to_user(optval, &ro->raw_vcid_opts, len))
836 				err = -EFAULT;
837 		}
838 		break;
839 
840 	case CAN_RAW_JOIN_FILTERS:
841 		if (len > sizeof(int))
842 			len = sizeof(int);
843 		val = &ro->join_filters;
844 		break;
845 
846 	default:
847 		return -ENOPROTOOPT;
848 	}
849 
850 	if (put_user(len, optlen))
851 		return -EFAULT;
852 	if (copy_to_user(optval, val, len))
853 		return -EFAULT;
854 	return 0;
855 }
856 
857 static void raw_put_canxl_vcid(struct raw_sock *ro, struct sk_buff *skb)
858 {
859 	struct canxl_frame *cxl = (struct canxl_frame *)skb->data;
860 
861 	/* sanitize non CAN XL bits */
862 	cxl->prio &= (CANXL_PRIO_MASK | CANXL_VCID_MASK);
863 
864 	/* clear VCID in CAN XL frame if pass through is disabled */
865 	if (!(ro->raw_vcid_opts.flags & CAN_RAW_XL_VCID_TX_PASS))
866 		cxl->prio &= CANXL_PRIO_MASK;
867 
868 	/* set VCID in CAN XL frame if enabled */
869 	if (ro->raw_vcid_opts.flags & CAN_RAW_XL_VCID_TX_SET) {
870 		cxl->prio &= CANXL_PRIO_MASK;
871 		cxl->prio |= ro->tx_vcid_shifted;
872 	}
873 }
874 
875 static unsigned int raw_check_txframe(struct raw_sock *ro, struct sk_buff *skb, int mtu)
876 {
877 	/* Classical CAN -> no checks for flags and device capabilities */
878 	if (can_is_can_skb(skb))
879 		return CAN_MTU;
880 
881 	/* CAN FD -> needs to be enabled and a CAN FD or CAN XL device */
882 	if (ro->fd_frames && can_is_canfd_skb(skb) &&
883 	    (mtu == CANFD_MTU || can_is_canxl_dev_mtu(mtu)))
884 		return CANFD_MTU;
885 
886 	/* CAN XL -> needs to be enabled and a CAN XL device */
887 	if (ro->xl_frames && can_is_canxl_skb(skb) &&
888 	    can_is_canxl_dev_mtu(mtu))
889 		return CANXL_MTU;
890 
891 	return 0;
892 }
893 
894 static int raw_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
895 {
896 	struct sock *sk = sock->sk;
897 	struct raw_sock *ro = raw_sk(sk);
898 	struct sockcm_cookie sockc;
899 	struct sk_buff *skb;
900 	struct net_device *dev;
901 	unsigned int txmtu;
902 	int ifindex;
903 	int err = -EINVAL;
904 
905 	/* check for valid CAN frame sizes */
906 	if (size < CANXL_HDR_SIZE + CANXL_MIN_DLEN || size > CANXL_MTU)
907 		return -EINVAL;
908 
909 	if (msg->msg_name) {
910 		DECLARE_SOCKADDR(struct sockaddr_can *, addr, msg->msg_name);
911 
912 		if (msg->msg_namelen < RAW_MIN_NAMELEN)
913 			return -EINVAL;
914 
915 		if (addr->can_family != AF_CAN)
916 			return -EINVAL;
917 
918 		ifindex = addr->can_ifindex;
919 	} else {
920 		ifindex = ro->ifindex;
921 	}
922 
923 	dev = dev_get_by_index(sock_net(sk), ifindex);
924 	if (!dev)
925 		return -ENXIO;
926 
927 	skb = sock_alloc_send_skb(sk, size + sizeof(struct can_skb_priv),
928 				  msg->msg_flags & MSG_DONTWAIT, &err);
929 	if (!skb)
930 		goto put_dev;
931 
932 	can_skb_reserve(skb);
933 	can_skb_prv(skb)->ifindex = dev->ifindex;
934 	can_skb_prv(skb)->skbcnt = 0;
935 
936 	/* fill the skb before testing for valid CAN frames */
937 	err = memcpy_from_msg(skb_put(skb, size), msg, size);
938 	if (err < 0)
939 		goto free_skb;
940 
941 	err = -EINVAL;
942 
943 	/* check for valid CAN (CC/FD/XL) frame content */
944 	txmtu = raw_check_txframe(ro, skb, dev->mtu);
945 	if (!txmtu)
946 		goto free_skb;
947 
948 	/* only CANXL: clear/forward/set VCID value */
949 	if (txmtu == CANXL_MTU)
950 		raw_put_canxl_vcid(ro, skb);
951 
952 	sockcm_init(&sockc, sk);
953 	if (msg->msg_controllen) {
954 		err = sock_cmsg_send(sk, msg, &sockc);
955 		if (unlikely(err))
956 			goto free_skb;
957 	}
958 
959 	skb->dev = dev;
960 	skb->priority = READ_ONCE(sk->sk_priority);
961 	skb->mark = READ_ONCE(sk->sk_mark);
962 	skb->tstamp = sockc.transmit_time;
963 
964 	skb_setup_tx_timestamp(skb, sockc.tsflags);
965 
966 	err = can_send(skb, ro->loopback);
967 
968 	dev_put(dev);
969 
970 	if (err)
971 		goto send_failed;
972 
973 	return size;
974 
975 free_skb:
976 	kfree_skb(skb);
977 put_dev:
978 	dev_put(dev);
979 send_failed:
980 	return err;
981 }
982 
983 static int raw_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
984 		       int flags)
985 {
986 	struct sock *sk = sock->sk;
987 	struct sk_buff *skb;
988 	int err = 0;
989 
990 	if (flags & MSG_ERRQUEUE)
991 		return sock_recv_errqueue(sk, msg, size,
992 					  SOL_CAN_RAW, SCM_CAN_RAW_ERRQUEUE);
993 
994 	skb = skb_recv_datagram(sk, flags, &err);
995 	if (!skb)
996 		return err;
997 
998 	if (size < skb->len)
999 		msg->msg_flags |= MSG_TRUNC;
1000 	else
1001 		size = skb->len;
1002 
1003 	err = memcpy_to_msg(msg, skb->data, size);
1004 	if (err < 0) {
1005 		skb_free_datagram(sk, skb);
1006 		return err;
1007 	}
1008 
1009 	sock_recv_cmsgs(msg, sk, skb);
1010 
1011 	if (msg->msg_name) {
1012 		__sockaddr_check_size(RAW_MIN_NAMELEN);
1013 		msg->msg_namelen = RAW_MIN_NAMELEN;
1014 		memcpy(msg->msg_name, skb->cb, msg->msg_namelen);
1015 	}
1016 
1017 	/* assign the flags that have been recorded in raw_rcv() */
1018 	msg->msg_flags |= *(raw_flags(skb));
1019 
1020 	skb_free_datagram(sk, skb);
1021 
1022 	return size;
1023 }
1024 
1025 static int raw_sock_no_ioctlcmd(struct socket *sock, unsigned int cmd,
1026 				unsigned long arg)
1027 {
1028 	/* no ioctls for socket layer -> hand it down to NIC layer */
1029 	return -ENOIOCTLCMD;
1030 }
1031 
1032 static const struct proto_ops raw_ops = {
1033 	.family        = PF_CAN,
1034 	.release       = raw_release,
1035 	.bind          = raw_bind,
1036 	.connect       = sock_no_connect,
1037 	.socketpair    = sock_no_socketpair,
1038 	.accept        = sock_no_accept,
1039 	.getname       = raw_getname,
1040 	.poll          = datagram_poll,
1041 	.ioctl         = raw_sock_no_ioctlcmd,
1042 	.gettstamp     = sock_gettstamp,
1043 	.listen        = sock_no_listen,
1044 	.shutdown      = sock_no_shutdown,
1045 	.setsockopt    = raw_setsockopt,
1046 	.getsockopt    = raw_getsockopt,
1047 	.sendmsg       = raw_sendmsg,
1048 	.recvmsg       = raw_recvmsg,
1049 	.mmap          = sock_no_mmap,
1050 };
1051 
1052 static struct proto raw_proto __read_mostly = {
1053 	.name       = "CAN_RAW",
1054 	.owner      = THIS_MODULE,
1055 	.obj_size   = sizeof(struct raw_sock),
1056 	.init       = raw_init,
1057 };
1058 
1059 static const struct can_proto raw_can_proto = {
1060 	.type       = SOCK_RAW,
1061 	.protocol   = CAN_RAW,
1062 	.ops        = &raw_ops,
1063 	.prot       = &raw_proto,
1064 };
1065 
1066 static struct notifier_block canraw_notifier = {
1067 	.notifier_call = raw_notifier
1068 };
1069 
1070 static __init int raw_module_init(void)
1071 {
1072 	int err;
1073 
1074 	pr_info("can: raw protocol\n");
1075 
1076 	err = register_netdevice_notifier(&canraw_notifier);
1077 	if (err)
1078 		return err;
1079 
1080 	err = can_proto_register(&raw_can_proto);
1081 	if (err < 0) {
1082 		pr_err("can: registration of raw protocol failed\n");
1083 		goto register_proto_failed;
1084 	}
1085 
1086 	return 0;
1087 
1088 register_proto_failed:
1089 	unregister_netdevice_notifier(&canraw_notifier);
1090 	return err;
1091 }
1092 
1093 static __exit void raw_module_exit(void)
1094 {
1095 	can_proto_unregister(&raw_can_proto);
1096 	unregister_netdevice_notifier(&canraw_notifier);
1097 }
1098 
1099 module_init(raw_module_init);
1100 module_exit(raw_module_exit);
1101