1 // SPDX-License-Identifier: GPL-2.0 2 // Copyright (c) 2010-2011 EIA Electronics, 3 // Pieter Beyens <pieter.beyens@eia.be> 4 // Copyright (c) 2010-2011 EIA Electronics, 5 // Kurt Van Dijck <kurt.van.dijck@eia.be> 6 // Copyright (c) 2018 Protonic, 7 // Robin van der Gracht <robin@protonic.nl> 8 // Copyright (c) 2017-2019 Pengutronix, 9 // Marc Kleine-Budde <kernel@pengutronix.de> 10 // Copyright (c) 2017-2019 Pengutronix, 11 // Oleksij Rempel <kernel@pengutronix.de> 12 13 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 14 15 #include <linux/can/can-ml.h> 16 #include <linux/can/core.h> 17 #include <linux/can/skb.h> 18 #include <linux/errqueue.h> 19 #include <linux/if_arp.h> 20 21 #include "j1939-priv.h" 22 23 #define J1939_MIN_NAMELEN CAN_REQUIRED_SIZE(struct sockaddr_can, can_addr.j1939) 24 25 /* conversion function between struct sock::sk_priority from linux and 26 * j1939 priority field 27 */ 28 static inline priority_t j1939_prio(u32 sk_priority) 29 { 30 sk_priority = min(sk_priority, 7U); 31 32 return 7 - sk_priority; 33 } 34 35 static inline u32 j1939_to_sk_priority(priority_t prio) 36 { 37 return 7 - prio; 38 } 39 40 /* function to see if pgn is to be evaluated */ 41 static inline bool j1939_pgn_is_valid(pgn_t pgn) 42 { 43 return pgn <= J1939_PGN_MAX; 44 } 45 46 /* test function to avoid non-zero DA placeholder for pdu1 pgn's */ 47 static inline bool j1939_pgn_is_clean_pdu(pgn_t pgn) 48 { 49 if (j1939_pgn_is_pdu1(pgn)) 50 return !(pgn & 0xff); 51 else 52 return true; 53 } 54 55 static inline void j1939_sock_pending_add(struct sock *sk) 56 { 57 struct j1939_sock *jsk = j1939_sk(sk); 58 59 atomic_inc(&jsk->skb_pending); 60 } 61 62 static int j1939_sock_pending_get(struct sock *sk) 63 { 64 struct j1939_sock *jsk = j1939_sk(sk); 65 66 return atomic_read(&jsk->skb_pending); 67 } 68 69 void j1939_sock_pending_del(struct sock *sk) 70 { 71 struct j1939_sock *jsk = j1939_sk(sk); 72 73 /* atomic_dec_return returns the new value */ 74 if (!atomic_dec_return(&jsk->skb_pending)) 75 wake_up(&jsk->waitq); /* no pending SKB's */ 76 } 77 78 static void j1939_jsk_add(struct j1939_priv *priv, struct j1939_sock *jsk) 79 { 80 jsk->state |= J1939_SOCK_BOUND; 81 j1939_priv_get(priv); 82 83 write_lock_bh(&priv->j1939_socks_lock); 84 list_add_tail(&jsk->list, &priv->j1939_socks); 85 write_unlock_bh(&priv->j1939_socks_lock); 86 } 87 88 static void j1939_jsk_del(struct j1939_priv *priv, struct j1939_sock *jsk) 89 { 90 write_lock_bh(&priv->j1939_socks_lock); 91 list_del_init(&jsk->list); 92 write_unlock_bh(&priv->j1939_socks_lock); 93 94 j1939_priv_put(priv); 95 jsk->state &= ~J1939_SOCK_BOUND; 96 } 97 98 static bool j1939_sk_queue_session(struct j1939_session *session) 99 { 100 struct j1939_sock *jsk = j1939_sk(session->sk); 101 bool empty; 102 103 spin_lock_bh(&jsk->sk_session_queue_lock); 104 empty = list_empty(&jsk->sk_session_queue); 105 j1939_session_get(session); 106 list_add_tail(&session->sk_session_queue_entry, &jsk->sk_session_queue); 107 spin_unlock_bh(&jsk->sk_session_queue_lock); 108 j1939_sock_pending_add(&jsk->sk); 109 110 return empty; 111 } 112 113 static struct 114 j1939_session *j1939_sk_get_incomplete_session(struct j1939_sock *jsk) 115 { 116 struct j1939_session *session = NULL; 117 118 spin_lock_bh(&jsk->sk_session_queue_lock); 119 if (!list_empty(&jsk->sk_session_queue)) { 120 session = list_last_entry(&jsk->sk_session_queue, 121 struct j1939_session, 122 sk_session_queue_entry); 123 if (session->total_queued_size == session->total_message_size) 124 session = NULL; 125 else 126 j1939_session_get(session); 127 } 128 spin_unlock_bh(&jsk->sk_session_queue_lock); 129 130 return session; 131 } 132 133 static void j1939_sk_queue_drop_all(struct j1939_priv *priv, 134 struct j1939_sock *jsk, int err) 135 { 136 struct j1939_session *session, *tmp; 137 138 netdev_dbg(priv->ndev, "%s: err: %i\n", __func__, err); 139 spin_lock_bh(&jsk->sk_session_queue_lock); 140 list_for_each_entry_safe(session, tmp, &jsk->sk_session_queue, 141 sk_session_queue_entry) { 142 list_del_init(&session->sk_session_queue_entry); 143 session->err = err; 144 j1939_session_put(session); 145 } 146 spin_unlock_bh(&jsk->sk_session_queue_lock); 147 } 148 149 static void j1939_sk_queue_activate_next_locked(struct j1939_session *session) 150 { 151 struct j1939_sock *jsk; 152 struct j1939_session *first; 153 int err; 154 155 /* RX-Session don't have a socket (yet) */ 156 if (!session->sk) 157 return; 158 159 jsk = j1939_sk(session->sk); 160 lockdep_assert_held(&jsk->sk_session_queue_lock); 161 162 err = session->err; 163 164 first = list_first_entry_or_null(&jsk->sk_session_queue, 165 struct j1939_session, 166 sk_session_queue_entry); 167 168 /* Some else has already activated the next session */ 169 if (first != session) 170 return; 171 172 activate_next: 173 list_del_init(&first->sk_session_queue_entry); 174 j1939_session_put(first); 175 first = list_first_entry_or_null(&jsk->sk_session_queue, 176 struct j1939_session, 177 sk_session_queue_entry); 178 if (!first) 179 return; 180 181 if (j1939_session_activate(first)) { 182 netdev_warn_once(first->priv->ndev, 183 "%s: 0x%p: Identical session is already activated.\n", 184 __func__, first); 185 first->err = -EBUSY; 186 goto activate_next; 187 } else { 188 /* Give receiver some time (arbitrary chosen) to recover */ 189 int time_ms = 0; 190 191 if (err) 192 time_ms = 10 + get_random_u32_below(16); 193 194 j1939_tp_schedule_txtimer(first, time_ms); 195 } 196 } 197 198 void j1939_sk_queue_activate_next(struct j1939_session *session) 199 { 200 struct j1939_sock *jsk; 201 202 if (!session->sk) 203 return; 204 205 jsk = j1939_sk(session->sk); 206 207 spin_lock_bh(&jsk->sk_session_queue_lock); 208 j1939_sk_queue_activate_next_locked(session); 209 spin_unlock_bh(&jsk->sk_session_queue_lock); 210 } 211 212 static bool j1939_sk_match_dst(struct j1939_sock *jsk, 213 const struct j1939_sk_buff_cb *skcb) 214 { 215 if ((jsk->state & J1939_SOCK_PROMISC)) 216 return true; 217 218 /* Destination address filter */ 219 if (jsk->addr.src_name && skcb->addr.dst_name) { 220 if (jsk->addr.src_name != skcb->addr.dst_name) 221 return false; 222 } else { 223 /* receive (all sockets) if 224 * - all packages that match our bind() address 225 * - all broadcast on a socket if SO_BROADCAST 226 * is set 227 */ 228 if (j1939_address_is_unicast(skcb->addr.da)) { 229 if (jsk->addr.sa != skcb->addr.da) 230 return false; 231 } else if (!sock_flag(&jsk->sk, SOCK_BROADCAST)) { 232 /* receiving broadcast without SO_BROADCAST 233 * flag is not allowed 234 */ 235 return false; 236 } 237 } 238 239 /* Source address filter */ 240 if (jsk->state & J1939_SOCK_CONNECTED) { 241 /* receive (all sockets) if 242 * - all packages that match our connect() name or address 243 */ 244 if (jsk->addr.dst_name && skcb->addr.src_name) { 245 if (jsk->addr.dst_name != skcb->addr.src_name) 246 return false; 247 } else { 248 if (jsk->addr.da != skcb->addr.sa) 249 return false; 250 } 251 } 252 253 /* PGN filter */ 254 if (j1939_pgn_is_valid(jsk->pgn_rx_filter) && 255 jsk->pgn_rx_filter != skcb->addr.pgn) 256 return false; 257 258 return true; 259 } 260 261 /* matches skb control buffer (addr) with a j1939 filter */ 262 static bool j1939_sk_match_filter(struct j1939_sock *jsk, 263 const struct j1939_sk_buff_cb *skcb) 264 { 265 const struct j1939_filter *f; 266 int nfilter; 267 268 spin_lock_bh(&jsk->filters_lock); 269 270 f = jsk->filters; 271 nfilter = jsk->nfilters; 272 273 if (!nfilter) 274 /* receive all when no filters are assigned */ 275 goto filter_match_found; 276 277 for (; nfilter; ++f, --nfilter) { 278 if ((skcb->addr.pgn & f->pgn_mask) != f->pgn) 279 continue; 280 if ((skcb->addr.sa & f->addr_mask) != f->addr) 281 continue; 282 if ((skcb->addr.src_name & f->name_mask) != f->name) 283 continue; 284 goto filter_match_found; 285 } 286 287 spin_unlock_bh(&jsk->filters_lock); 288 return false; 289 290 filter_match_found: 291 spin_unlock_bh(&jsk->filters_lock); 292 return true; 293 } 294 295 static bool j1939_sk_recv_match_one(struct j1939_sock *jsk, 296 const struct j1939_sk_buff_cb *skcb) 297 { 298 if (!(jsk->state & J1939_SOCK_BOUND)) 299 return false; 300 301 if (!j1939_sk_match_dst(jsk, skcb)) 302 return false; 303 304 if (!j1939_sk_match_filter(jsk, skcb)) 305 return false; 306 307 return true; 308 } 309 310 static void j1939_sk_recv_one(struct j1939_sock *jsk, struct sk_buff *oskb) 311 { 312 const struct j1939_sk_buff_cb *oskcb = j1939_skb_to_cb(oskb); 313 struct j1939_sk_buff_cb *skcb; 314 struct sk_buff *skb; 315 316 if (oskb->sk == &jsk->sk) 317 return; 318 319 if (!j1939_sk_recv_match_one(jsk, oskcb)) 320 return; 321 322 skb = skb_clone(oskb, GFP_ATOMIC); 323 if (!skb) { 324 pr_warn("skb clone failed\n"); 325 return; 326 } 327 can_skb_set_owner(skb, oskb->sk); 328 329 skcb = j1939_skb_to_cb(skb); 330 skcb->msg_flags &= ~(MSG_DONTROUTE); 331 if (skb->sk) 332 skcb->msg_flags |= MSG_DONTROUTE; 333 334 if (sock_queue_rcv_skb(&jsk->sk, skb) < 0) 335 kfree_skb(skb); 336 } 337 338 bool j1939_sk_recv_match(struct j1939_priv *priv, struct j1939_sk_buff_cb *skcb) 339 { 340 struct j1939_sock *jsk; 341 bool match = false; 342 343 read_lock_bh(&priv->j1939_socks_lock); 344 list_for_each_entry(jsk, &priv->j1939_socks, list) { 345 match = j1939_sk_recv_match_one(jsk, skcb); 346 if (match) 347 break; 348 } 349 read_unlock_bh(&priv->j1939_socks_lock); 350 351 return match; 352 } 353 354 void j1939_sk_recv(struct j1939_priv *priv, struct sk_buff *skb) 355 { 356 struct j1939_sock *jsk; 357 358 read_lock_bh(&priv->j1939_socks_lock); 359 list_for_each_entry(jsk, &priv->j1939_socks, list) { 360 j1939_sk_recv_one(jsk, skb); 361 } 362 read_unlock_bh(&priv->j1939_socks_lock); 363 } 364 365 static void j1939_sk_sock_destruct(struct sock *sk) 366 { 367 struct j1939_sock *jsk = j1939_sk(sk); 368 369 /* This function will be called by the generic networking code, when 370 * the socket is ultimately closed (sk->sk_destruct). 371 * 372 * The race between 373 * - processing a received CAN frame 374 * (can_receive -> j1939_can_recv) 375 * and accessing j1939_priv 376 * ... and ... 377 * - closing a socket 378 * (j1939_can_rx_unregister -> can_rx_unregister) 379 * and calling the final j1939_priv_put() 380 * 381 * is avoided by calling the final j1939_priv_put() from this 382 * RCU deferred cleanup call. 383 */ 384 if (jsk->priv) { 385 j1939_priv_put(jsk->priv); 386 jsk->priv = NULL; 387 } 388 389 /* call generic CAN sock destruct */ 390 can_sock_destruct(sk); 391 } 392 393 static int j1939_sk_init(struct sock *sk) 394 { 395 struct j1939_sock *jsk = j1939_sk(sk); 396 397 /* Ensure that "sk" is first member in "struct j1939_sock", so that we 398 * can skip it during memset(). 399 */ 400 BUILD_BUG_ON(offsetof(struct j1939_sock, sk) != 0); 401 memset((void *)jsk + sizeof(jsk->sk), 0x0, 402 sizeof(*jsk) - sizeof(jsk->sk)); 403 404 INIT_LIST_HEAD(&jsk->list); 405 init_waitqueue_head(&jsk->waitq); 406 jsk->sk.sk_priority = j1939_to_sk_priority(6); 407 jsk->sk.sk_reuse = 1; /* per default */ 408 jsk->addr.sa = J1939_NO_ADDR; 409 jsk->addr.da = J1939_NO_ADDR; 410 jsk->addr.pgn = J1939_NO_PGN; 411 jsk->pgn_rx_filter = J1939_NO_PGN; 412 atomic_set(&jsk->skb_pending, 0); 413 spin_lock_init(&jsk->sk_session_queue_lock); 414 INIT_LIST_HEAD(&jsk->sk_session_queue); 415 spin_lock_init(&jsk->filters_lock); 416 417 /* j1939_sk_sock_destruct() depends on SOCK_RCU_FREE flag */ 418 sock_set_flag(sk, SOCK_RCU_FREE); 419 sk->sk_destruct = j1939_sk_sock_destruct; 420 sk->sk_protocol = CAN_J1939; 421 422 return 0; 423 } 424 425 static int j1939_sk_sanity_check(struct sockaddr_can *addr, int len) 426 { 427 if (!addr) 428 return -EDESTADDRREQ; 429 if (len < J1939_MIN_NAMELEN) 430 return -EINVAL; 431 if (addr->can_family != AF_CAN) 432 return -EINVAL; 433 if (!addr->can_ifindex) 434 return -ENODEV; 435 if (j1939_pgn_is_valid(addr->can_addr.j1939.pgn) && 436 !j1939_pgn_is_clean_pdu(addr->can_addr.j1939.pgn)) 437 return -EINVAL; 438 439 return 0; 440 } 441 442 static int j1939_sk_bind(struct socket *sock, struct sockaddr *uaddr, int len) 443 { 444 struct sockaddr_can *addr = (struct sockaddr_can *)uaddr; 445 struct j1939_sock *jsk = j1939_sk(sock->sk); 446 struct j1939_priv *priv; 447 struct sock *sk; 448 struct net *net; 449 int ret = 0; 450 451 ret = j1939_sk_sanity_check(addr, len); 452 if (ret) 453 return ret; 454 455 lock_sock(sock->sk); 456 457 priv = jsk->priv; 458 sk = sock->sk; 459 net = sock_net(sk); 460 461 /* Already bound to an interface? */ 462 if (jsk->state & J1939_SOCK_BOUND) { 463 /* A re-bind() to a different interface is not 464 * supported. 465 */ 466 if (jsk->ifindex != addr->can_ifindex) { 467 ret = -EINVAL; 468 goto out_release_sock; 469 } 470 471 /* drop old references */ 472 j1939_jsk_del(priv, jsk); 473 j1939_local_ecu_put(priv, jsk->addr.src_name, jsk->addr.sa); 474 } else { 475 struct can_ml_priv *can_ml; 476 struct net_device *ndev; 477 478 ndev = dev_get_by_index(net, addr->can_ifindex); 479 if (!ndev) { 480 ret = -ENODEV; 481 goto out_release_sock; 482 } 483 484 can_ml = can_get_ml_priv(ndev); 485 if (!can_ml) { 486 dev_put(ndev); 487 ret = -ENODEV; 488 goto out_release_sock; 489 } 490 491 if (!(ndev->flags & IFF_UP)) { 492 dev_put(ndev); 493 ret = -ENETDOWN; 494 goto out_release_sock; 495 } 496 497 priv = j1939_netdev_start(ndev); 498 dev_put(ndev); 499 if (IS_ERR(priv)) { 500 ret = PTR_ERR(priv); 501 goto out_release_sock; 502 } 503 504 jsk->ifindex = addr->can_ifindex; 505 506 /* the corresponding j1939_priv_put() is called via 507 * sk->sk_destruct, which points to j1939_sk_sock_destruct() 508 */ 509 j1939_priv_get(priv); 510 jsk->priv = priv; 511 } 512 513 /* set default transmit pgn */ 514 if (j1939_pgn_is_valid(addr->can_addr.j1939.pgn)) 515 jsk->pgn_rx_filter = addr->can_addr.j1939.pgn; 516 jsk->addr.src_name = addr->can_addr.j1939.name; 517 jsk->addr.sa = addr->can_addr.j1939.addr; 518 519 /* get new references */ 520 ret = j1939_local_ecu_get(priv, jsk->addr.src_name, jsk->addr.sa); 521 if (ret) { 522 j1939_netdev_stop(priv); 523 goto out_release_sock; 524 } 525 526 j1939_jsk_add(priv, jsk); 527 528 out_release_sock: /* fall through */ 529 release_sock(sock->sk); 530 531 return ret; 532 } 533 534 static int j1939_sk_connect(struct socket *sock, struct sockaddr *uaddr, 535 int len, int flags) 536 { 537 struct sockaddr_can *addr = (struct sockaddr_can *)uaddr; 538 struct j1939_sock *jsk = j1939_sk(sock->sk); 539 int ret = 0; 540 541 ret = j1939_sk_sanity_check(addr, len); 542 if (ret) 543 return ret; 544 545 lock_sock(sock->sk); 546 547 /* bind() before connect() is mandatory */ 548 if (!(jsk->state & J1939_SOCK_BOUND)) { 549 ret = -EINVAL; 550 goto out_release_sock; 551 } 552 553 /* A connect() to a different interface is not supported. */ 554 if (jsk->ifindex != addr->can_ifindex) { 555 ret = -EINVAL; 556 goto out_release_sock; 557 } 558 559 if (!addr->can_addr.j1939.name && 560 addr->can_addr.j1939.addr == J1939_NO_ADDR && 561 !sock_flag(&jsk->sk, SOCK_BROADCAST)) { 562 /* broadcast, but SO_BROADCAST not set */ 563 ret = -EACCES; 564 goto out_release_sock; 565 } 566 567 jsk->addr.dst_name = addr->can_addr.j1939.name; 568 jsk->addr.da = addr->can_addr.j1939.addr; 569 570 if (j1939_pgn_is_valid(addr->can_addr.j1939.pgn)) 571 jsk->addr.pgn = addr->can_addr.j1939.pgn; 572 573 jsk->state |= J1939_SOCK_CONNECTED; 574 575 out_release_sock: /* fall through */ 576 release_sock(sock->sk); 577 578 return ret; 579 } 580 581 static void j1939_sk_sock2sockaddr_can(struct sockaddr_can *addr, 582 const struct j1939_sock *jsk, int peer) 583 { 584 /* There are two holes (2 bytes and 3 bytes) to clear to avoid 585 * leaking kernel information to user space. 586 */ 587 memset(addr, 0, J1939_MIN_NAMELEN); 588 589 addr->can_family = AF_CAN; 590 addr->can_ifindex = jsk->ifindex; 591 addr->can_addr.j1939.pgn = jsk->addr.pgn; 592 if (peer) { 593 addr->can_addr.j1939.name = jsk->addr.dst_name; 594 addr->can_addr.j1939.addr = jsk->addr.da; 595 } else { 596 addr->can_addr.j1939.name = jsk->addr.src_name; 597 addr->can_addr.j1939.addr = jsk->addr.sa; 598 } 599 } 600 601 static int j1939_sk_getname(struct socket *sock, struct sockaddr *uaddr, 602 int peer) 603 { 604 struct sockaddr_can *addr = (struct sockaddr_can *)uaddr; 605 struct sock *sk = sock->sk; 606 struct j1939_sock *jsk = j1939_sk(sk); 607 int ret = 0; 608 609 lock_sock(sk); 610 611 if (peer && !(jsk->state & J1939_SOCK_CONNECTED)) { 612 ret = -EADDRNOTAVAIL; 613 goto failure; 614 } 615 616 j1939_sk_sock2sockaddr_can(addr, jsk, peer); 617 ret = J1939_MIN_NAMELEN; 618 619 failure: 620 release_sock(sk); 621 622 return ret; 623 } 624 625 static int j1939_sk_release(struct socket *sock) 626 { 627 struct sock *sk = sock->sk; 628 struct j1939_sock *jsk; 629 630 if (!sk) 631 return 0; 632 633 lock_sock(sk); 634 jsk = j1939_sk(sk); 635 636 if (jsk->state & J1939_SOCK_BOUND) { 637 struct j1939_priv *priv = jsk->priv; 638 639 if (wait_event_interruptible(jsk->waitq, 640 !j1939_sock_pending_get(&jsk->sk))) { 641 j1939_cancel_active_session(priv, sk); 642 j1939_sk_queue_drop_all(priv, jsk, ESHUTDOWN); 643 } 644 645 j1939_jsk_del(priv, jsk); 646 647 j1939_local_ecu_put(priv, jsk->addr.src_name, 648 jsk->addr.sa); 649 650 j1939_netdev_stop(priv); 651 } 652 653 kfree(jsk->filters); 654 sock_orphan(sk); 655 sock->sk = NULL; 656 657 release_sock(sk); 658 sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); 659 sock_put(sk); 660 661 return 0; 662 } 663 664 static int j1939_sk_setsockopt_flag(struct j1939_sock *jsk, sockptr_t optval, 665 unsigned int optlen, int flag) 666 { 667 int tmp; 668 669 if (optlen != sizeof(tmp)) 670 return -EINVAL; 671 if (copy_from_sockptr(&tmp, optval, optlen)) 672 return -EFAULT; 673 lock_sock(&jsk->sk); 674 if (tmp) 675 jsk->state |= flag; 676 else 677 jsk->state &= ~flag; 678 release_sock(&jsk->sk); 679 return tmp; 680 } 681 682 static int j1939_sk_setsockopt(struct socket *sock, int level, int optname, 683 sockptr_t optval, unsigned int optlen) 684 { 685 struct sock *sk = sock->sk; 686 struct j1939_sock *jsk = j1939_sk(sk); 687 int tmp, count = 0, ret = 0; 688 struct j1939_filter *filters = NULL, *ofilters; 689 690 if (level != SOL_CAN_J1939) 691 return -EINVAL; 692 693 switch (optname) { 694 case SO_J1939_FILTER: 695 if (!sockptr_is_null(optval) && optlen != 0) { 696 struct j1939_filter *f; 697 int c; 698 699 if (optlen % sizeof(*filters) != 0) 700 return -EINVAL; 701 702 if (optlen > J1939_FILTER_MAX * 703 sizeof(struct j1939_filter)) 704 return -EINVAL; 705 706 count = optlen / sizeof(*filters); 707 filters = memdup_sockptr(optval, optlen); 708 if (IS_ERR(filters)) 709 return PTR_ERR(filters); 710 711 for (f = filters, c = count; c; f++, c--) { 712 f->name &= f->name_mask; 713 f->pgn &= f->pgn_mask; 714 f->addr &= f->addr_mask; 715 } 716 } 717 718 lock_sock(&jsk->sk); 719 spin_lock_bh(&jsk->filters_lock); 720 ofilters = jsk->filters; 721 jsk->filters = filters; 722 jsk->nfilters = count; 723 spin_unlock_bh(&jsk->filters_lock); 724 release_sock(&jsk->sk); 725 kfree(ofilters); 726 return 0; 727 case SO_J1939_PROMISC: 728 return j1939_sk_setsockopt_flag(jsk, optval, optlen, 729 J1939_SOCK_PROMISC); 730 case SO_J1939_ERRQUEUE: 731 ret = j1939_sk_setsockopt_flag(jsk, optval, optlen, 732 J1939_SOCK_ERRQUEUE); 733 if (ret < 0) 734 return ret; 735 736 if (!(jsk->state & J1939_SOCK_ERRQUEUE)) 737 skb_queue_purge(&sk->sk_error_queue); 738 return ret; 739 case SO_J1939_SEND_PRIO: 740 if (optlen != sizeof(tmp)) 741 return -EINVAL; 742 if (copy_from_sockptr(&tmp, optval, optlen)) 743 return -EFAULT; 744 if (tmp < 0 || tmp > 7) 745 return -EDOM; 746 if (tmp < 2 && !capable(CAP_NET_ADMIN)) 747 return -EPERM; 748 lock_sock(&jsk->sk); 749 jsk->sk.sk_priority = j1939_to_sk_priority(tmp); 750 release_sock(&jsk->sk); 751 return 0; 752 default: 753 return -ENOPROTOOPT; 754 } 755 } 756 757 static int j1939_sk_getsockopt(struct socket *sock, int level, int optname, 758 char __user *optval, int __user *optlen) 759 { 760 struct sock *sk = sock->sk; 761 struct j1939_sock *jsk = j1939_sk(sk); 762 int ret, ulen; 763 /* set defaults for using 'int' properties */ 764 int tmp = 0; 765 int len = sizeof(tmp); 766 void *val = &tmp; 767 768 if (level != SOL_CAN_J1939) 769 return -EINVAL; 770 if (get_user(ulen, optlen)) 771 return -EFAULT; 772 if (ulen < 0) 773 return -EINVAL; 774 775 lock_sock(&jsk->sk); 776 switch (optname) { 777 case SO_J1939_PROMISC: 778 tmp = (jsk->state & J1939_SOCK_PROMISC) ? 1 : 0; 779 break; 780 case SO_J1939_ERRQUEUE: 781 tmp = (jsk->state & J1939_SOCK_ERRQUEUE) ? 1 : 0; 782 break; 783 case SO_J1939_SEND_PRIO: 784 tmp = j1939_prio(jsk->sk.sk_priority); 785 break; 786 default: 787 ret = -ENOPROTOOPT; 788 goto no_copy; 789 } 790 791 /* copy to user, based on 'len' & 'val' 792 * but most sockopt's are 'int' properties, and have 'len' & 'val' 793 * left unchanged, but instead modified 'tmp' 794 */ 795 if (len > ulen) 796 ret = -EFAULT; 797 else if (put_user(len, optlen)) 798 ret = -EFAULT; 799 else if (copy_to_user(optval, val, len)) 800 ret = -EFAULT; 801 else 802 ret = 0; 803 no_copy: 804 release_sock(&jsk->sk); 805 return ret; 806 } 807 808 static int j1939_sk_recvmsg(struct socket *sock, struct msghdr *msg, 809 size_t size, int flags) 810 { 811 struct sock *sk = sock->sk; 812 struct sk_buff *skb; 813 struct j1939_sk_buff_cb *skcb; 814 int ret = 0; 815 816 if (flags & ~(MSG_DONTWAIT | MSG_ERRQUEUE | MSG_CMSG_COMPAT)) 817 return -EINVAL; 818 819 if (flags & MSG_ERRQUEUE) 820 return sock_recv_errqueue(sock->sk, msg, size, SOL_CAN_J1939, 821 SCM_J1939_ERRQUEUE); 822 823 skb = skb_recv_datagram(sk, flags, &ret); 824 if (!skb) 825 return ret; 826 827 if (size < skb->len) 828 msg->msg_flags |= MSG_TRUNC; 829 else 830 size = skb->len; 831 832 ret = memcpy_to_msg(msg, skb->data, size); 833 if (ret < 0) { 834 skb_free_datagram(sk, skb); 835 return ret; 836 } 837 838 skcb = j1939_skb_to_cb(skb); 839 if (j1939_address_is_valid(skcb->addr.da)) 840 put_cmsg(msg, SOL_CAN_J1939, SCM_J1939_DEST_ADDR, 841 sizeof(skcb->addr.da), &skcb->addr.da); 842 843 if (skcb->addr.dst_name) 844 put_cmsg(msg, SOL_CAN_J1939, SCM_J1939_DEST_NAME, 845 sizeof(skcb->addr.dst_name), &skcb->addr.dst_name); 846 847 put_cmsg(msg, SOL_CAN_J1939, SCM_J1939_PRIO, 848 sizeof(skcb->priority), &skcb->priority); 849 850 if (msg->msg_name) { 851 struct sockaddr_can *paddr = msg->msg_name; 852 853 msg->msg_namelen = J1939_MIN_NAMELEN; 854 memset(msg->msg_name, 0, msg->msg_namelen); 855 paddr->can_family = AF_CAN; 856 paddr->can_ifindex = skb->skb_iif; 857 paddr->can_addr.j1939.name = skcb->addr.src_name; 858 paddr->can_addr.j1939.addr = skcb->addr.sa; 859 paddr->can_addr.j1939.pgn = skcb->addr.pgn; 860 } 861 862 sock_recv_cmsgs(msg, sk, skb); 863 msg->msg_flags |= skcb->msg_flags; 864 skb_free_datagram(sk, skb); 865 866 return size; 867 } 868 869 static struct sk_buff *j1939_sk_alloc_skb(struct net_device *ndev, 870 struct sock *sk, 871 struct msghdr *msg, size_t size, 872 int *errcode) 873 { 874 struct j1939_sock *jsk = j1939_sk(sk); 875 struct j1939_sk_buff_cb *skcb; 876 struct sk_buff *skb; 877 int ret; 878 879 skb = sock_alloc_send_skb(sk, 880 size + 881 sizeof(struct can_frame) - 882 sizeof(((struct can_frame *)NULL)->data) + 883 sizeof(struct can_skb_priv), 884 msg->msg_flags & MSG_DONTWAIT, &ret); 885 if (!skb) 886 goto failure; 887 888 can_skb_reserve(skb); 889 can_skb_prv(skb)->ifindex = ndev->ifindex; 890 can_skb_prv(skb)->skbcnt = 0; 891 skb_reserve(skb, offsetof(struct can_frame, data)); 892 893 ret = memcpy_from_msg(skb_put(skb, size), msg, size); 894 if (ret < 0) 895 goto free_skb; 896 897 skb->dev = ndev; 898 899 skcb = j1939_skb_to_cb(skb); 900 memset(skcb, 0, sizeof(*skcb)); 901 skcb->addr = jsk->addr; 902 skcb->priority = j1939_prio(READ_ONCE(sk->sk_priority)); 903 904 if (msg->msg_name) { 905 struct sockaddr_can *addr = msg->msg_name; 906 907 if (addr->can_addr.j1939.name || 908 addr->can_addr.j1939.addr != J1939_NO_ADDR) { 909 skcb->addr.dst_name = addr->can_addr.j1939.name; 910 skcb->addr.da = addr->can_addr.j1939.addr; 911 } 912 if (j1939_pgn_is_valid(addr->can_addr.j1939.pgn)) 913 skcb->addr.pgn = addr->can_addr.j1939.pgn; 914 } 915 916 *errcode = ret; 917 return skb; 918 919 free_skb: 920 kfree_skb(skb); 921 failure: 922 *errcode = ret; 923 return NULL; 924 } 925 926 static size_t j1939_sk_opt_stats_get_size(enum j1939_sk_errqueue_type type) 927 { 928 switch (type) { 929 case J1939_ERRQUEUE_RX_RTS: 930 return 931 nla_total_size(sizeof(u32)) + /* J1939_NLA_TOTAL_SIZE */ 932 nla_total_size(sizeof(u32)) + /* J1939_NLA_PGN */ 933 nla_total_size(sizeof(u64)) + /* J1939_NLA_SRC_NAME */ 934 nla_total_size(sizeof(u64)) + /* J1939_NLA_DEST_NAME */ 935 nla_total_size(sizeof(u8)) + /* J1939_NLA_SRC_ADDR */ 936 nla_total_size(sizeof(u8)) + /* J1939_NLA_DEST_ADDR */ 937 0; 938 default: 939 return 940 nla_total_size(sizeof(u32)) + /* J1939_NLA_BYTES_ACKED */ 941 0; 942 } 943 } 944 945 static struct sk_buff * 946 j1939_sk_get_timestamping_opt_stats(struct j1939_session *session, 947 enum j1939_sk_errqueue_type type) 948 { 949 struct sk_buff *stats; 950 u32 size; 951 952 stats = alloc_skb(j1939_sk_opt_stats_get_size(type), GFP_ATOMIC); 953 if (!stats) 954 return NULL; 955 956 if (session->skcb.addr.type == J1939_SIMPLE) 957 size = session->total_message_size; 958 else 959 size = min(session->pkt.tx_acked * 7, 960 session->total_message_size); 961 962 switch (type) { 963 case J1939_ERRQUEUE_RX_RTS: 964 nla_put_u32(stats, J1939_NLA_TOTAL_SIZE, 965 session->total_message_size); 966 nla_put_u32(stats, J1939_NLA_PGN, 967 session->skcb.addr.pgn); 968 nla_put_u64_64bit(stats, J1939_NLA_SRC_NAME, 969 session->skcb.addr.src_name, J1939_NLA_PAD); 970 nla_put_u64_64bit(stats, J1939_NLA_DEST_NAME, 971 session->skcb.addr.dst_name, J1939_NLA_PAD); 972 nla_put_u8(stats, J1939_NLA_SRC_ADDR, 973 session->skcb.addr.sa); 974 nla_put_u8(stats, J1939_NLA_DEST_ADDR, 975 session->skcb.addr.da); 976 break; 977 default: 978 nla_put_u32(stats, J1939_NLA_BYTES_ACKED, size); 979 } 980 981 return stats; 982 } 983 984 static void __j1939_sk_errqueue(struct j1939_session *session, struct sock *sk, 985 enum j1939_sk_errqueue_type type) 986 { 987 struct j1939_priv *priv = session->priv; 988 struct j1939_sock *jsk; 989 struct sock_exterr_skb *serr; 990 struct sk_buff *skb; 991 char *state = "UNK"; 992 u32 tsflags; 993 int err; 994 995 jsk = j1939_sk(sk); 996 997 if (!(jsk->state & J1939_SOCK_ERRQUEUE)) 998 return; 999 1000 tsflags = READ_ONCE(sk->sk_tsflags); 1001 switch (type) { 1002 case J1939_ERRQUEUE_TX_ACK: 1003 if (!(tsflags & SOF_TIMESTAMPING_TX_ACK)) 1004 return; 1005 break; 1006 case J1939_ERRQUEUE_TX_SCHED: 1007 if (!(tsflags & SOF_TIMESTAMPING_TX_SCHED)) 1008 return; 1009 break; 1010 case J1939_ERRQUEUE_TX_ABORT: 1011 break; 1012 case J1939_ERRQUEUE_RX_RTS: 1013 fallthrough; 1014 case J1939_ERRQUEUE_RX_DPO: 1015 fallthrough; 1016 case J1939_ERRQUEUE_RX_ABORT: 1017 if (!(tsflags & SOF_TIMESTAMPING_RX_SOFTWARE)) 1018 return; 1019 break; 1020 default: 1021 netdev_err(priv->ndev, "Unknown errqueue type %i\n", type); 1022 } 1023 1024 skb = j1939_sk_get_timestamping_opt_stats(session, type); 1025 if (!skb) 1026 return; 1027 1028 skb->tstamp = ktime_get_real(); 1029 1030 BUILD_BUG_ON(sizeof(struct sock_exterr_skb) > sizeof(skb->cb)); 1031 1032 serr = SKB_EXT_ERR(skb); 1033 memset(serr, 0, sizeof(*serr)); 1034 switch (type) { 1035 case J1939_ERRQUEUE_TX_ACK: 1036 serr->ee.ee_errno = ENOMSG; 1037 serr->ee.ee_origin = SO_EE_ORIGIN_TIMESTAMPING; 1038 serr->ee.ee_info = SCM_TSTAMP_ACK; 1039 state = "TX ACK"; 1040 break; 1041 case J1939_ERRQUEUE_TX_SCHED: 1042 serr->ee.ee_errno = ENOMSG; 1043 serr->ee.ee_origin = SO_EE_ORIGIN_TIMESTAMPING; 1044 serr->ee.ee_info = SCM_TSTAMP_SCHED; 1045 state = "TX SCH"; 1046 break; 1047 case J1939_ERRQUEUE_TX_ABORT: 1048 serr->ee.ee_errno = session->err; 1049 serr->ee.ee_origin = SO_EE_ORIGIN_LOCAL; 1050 serr->ee.ee_info = J1939_EE_INFO_TX_ABORT; 1051 state = "TX ABT"; 1052 break; 1053 case J1939_ERRQUEUE_RX_RTS: 1054 serr->ee.ee_errno = ENOMSG; 1055 serr->ee.ee_origin = SO_EE_ORIGIN_LOCAL; 1056 serr->ee.ee_info = J1939_EE_INFO_RX_RTS; 1057 state = "RX RTS"; 1058 break; 1059 case J1939_ERRQUEUE_RX_DPO: 1060 serr->ee.ee_errno = ENOMSG; 1061 serr->ee.ee_origin = SO_EE_ORIGIN_LOCAL; 1062 serr->ee.ee_info = J1939_EE_INFO_RX_DPO; 1063 state = "RX DPO"; 1064 break; 1065 case J1939_ERRQUEUE_RX_ABORT: 1066 serr->ee.ee_errno = session->err; 1067 serr->ee.ee_origin = SO_EE_ORIGIN_LOCAL; 1068 serr->ee.ee_info = J1939_EE_INFO_RX_ABORT; 1069 state = "RX ABT"; 1070 break; 1071 } 1072 1073 serr->opt_stats = true; 1074 if (tsflags & SOF_TIMESTAMPING_OPT_ID) 1075 serr->ee.ee_data = session->tskey; 1076 1077 netdev_dbg(session->priv->ndev, "%s: 0x%p tskey: %i, state: %s\n", 1078 __func__, session, session->tskey, state); 1079 err = sock_queue_err_skb(sk, skb); 1080 1081 if (err) 1082 kfree_skb(skb); 1083 }; 1084 1085 void j1939_sk_errqueue(struct j1939_session *session, 1086 enum j1939_sk_errqueue_type type) 1087 { 1088 struct j1939_priv *priv = session->priv; 1089 struct j1939_sock *jsk; 1090 1091 if (session->sk) { 1092 /* send TX notifications to the socket of origin */ 1093 __j1939_sk_errqueue(session, session->sk, type); 1094 return; 1095 } 1096 1097 /* spread RX notifications to all sockets subscribed to this session */ 1098 read_lock_bh(&priv->j1939_socks_lock); 1099 list_for_each_entry(jsk, &priv->j1939_socks, list) { 1100 if (j1939_sk_recv_match_one(jsk, &session->skcb)) 1101 __j1939_sk_errqueue(session, &jsk->sk, type); 1102 } 1103 read_unlock_bh(&priv->j1939_socks_lock); 1104 }; 1105 1106 void j1939_sk_send_loop_abort(struct sock *sk, int err) 1107 { 1108 struct j1939_sock *jsk = j1939_sk(sk); 1109 1110 if (jsk->state & J1939_SOCK_ERRQUEUE) 1111 return; 1112 1113 sk->sk_err = err; 1114 1115 sk_error_report(sk); 1116 } 1117 1118 static int j1939_sk_send_loop(struct j1939_priv *priv, struct sock *sk, 1119 struct msghdr *msg, size_t size) 1120 1121 { 1122 struct j1939_sock *jsk = j1939_sk(sk); 1123 struct j1939_session *session = j1939_sk_get_incomplete_session(jsk); 1124 struct sk_buff *skb; 1125 size_t segment_size, todo_size; 1126 int ret = 0; 1127 1128 if (session && 1129 session->total_message_size != session->total_queued_size + size) { 1130 j1939_session_put(session); 1131 return -EIO; 1132 } 1133 1134 todo_size = size; 1135 1136 do { 1137 struct j1939_sk_buff_cb *skcb; 1138 1139 segment_size = min_t(size_t, J1939_MAX_TP_PACKET_SIZE, 1140 todo_size); 1141 1142 /* Allocate skb for one segment */ 1143 skb = j1939_sk_alloc_skb(priv->ndev, sk, msg, segment_size, 1144 &ret); 1145 if (ret) 1146 break; 1147 1148 skcb = j1939_skb_to_cb(skb); 1149 1150 if (!session) { 1151 /* at this point the size should be full size 1152 * of the session 1153 */ 1154 skcb->offset = 0; 1155 session = j1939_tp_send(priv, skb, size); 1156 if (IS_ERR(session)) { 1157 ret = PTR_ERR(session); 1158 goto kfree_skb; 1159 } 1160 if (j1939_sk_queue_session(session)) { 1161 /* try to activate session if we a 1162 * fist in the queue 1163 */ 1164 if (!j1939_session_activate(session)) { 1165 j1939_tp_schedule_txtimer(session, 0); 1166 } else { 1167 ret = -EBUSY; 1168 session->err = ret; 1169 j1939_sk_queue_drop_all(priv, jsk, 1170 EBUSY); 1171 break; 1172 } 1173 } 1174 } else { 1175 skcb->offset = session->total_queued_size; 1176 j1939_session_skb_queue(session, skb); 1177 } 1178 1179 todo_size -= segment_size; 1180 session->total_queued_size += segment_size; 1181 } while (todo_size); 1182 1183 switch (ret) { 1184 case 0: /* OK */ 1185 if (todo_size) 1186 netdev_warn(priv->ndev, 1187 "no error found and not completely queued?! %zu\n", 1188 todo_size); 1189 ret = size; 1190 break; 1191 case -ERESTARTSYS: 1192 ret = -EINTR; 1193 fallthrough; 1194 case -EAGAIN: /* OK */ 1195 if (todo_size != size) 1196 ret = size - todo_size; 1197 break; 1198 default: /* ERROR */ 1199 break; 1200 } 1201 1202 if (session) 1203 j1939_session_put(session); 1204 1205 return ret; 1206 1207 kfree_skb: 1208 kfree_skb(skb); 1209 return ret; 1210 } 1211 1212 static int j1939_sk_sendmsg(struct socket *sock, struct msghdr *msg, 1213 size_t size) 1214 { 1215 struct sock *sk = sock->sk; 1216 struct j1939_sock *jsk = j1939_sk(sk); 1217 struct j1939_priv *priv; 1218 int ifindex; 1219 int ret; 1220 1221 lock_sock(sock->sk); 1222 /* various socket state tests */ 1223 if (!(jsk->state & J1939_SOCK_BOUND)) { 1224 ret = -EBADFD; 1225 goto sendmsg_done; 1226 } 1227 1228 priv = jsk->priv; 1229 ifindex = jsk->ifindex; 1230 1231 if (!jsk->addr.src_name && jsk->addr.sa == J1939_NO_ADDR) { 1232 /* no source address assigned yet */ 1233 ret = -EBADFD; 1234 goto sendmsg_done; 1235 } 1236 1237 /* deal with provided destination address info */ 1238 if (msg->msg_name) { 1239 struct sockaddr_can *addr = msg->msg_name; 1240 1241 if (msg->msg_namelen < J1939_MIN_NAMELEN) { 1242 ret = -EINVAL; 1243 goto sendmsg_done; 1244 } 1245 1246 if (addr->can_family != AF_CAN) { 1247 ret = -EINVAL; 1248 goto sendmsg_done; 1249 } 1250 1251 if (addr->can_ifindex && addr->can_ifindex != ifindex) { 1252 ret = -EBADFD; 1253 goto sendmsg_done; 1254 } 1255 1256 if (j1939_pgn_is_valid(addr->can_addr.j1939.pgn) && 1257 !j1939_pgn_is_clean_pdu(addr->can_addr.j1939.pgn)) { 1258 ret = -EINVAL; 1259 goto sendmsg_done; 1260 } 1261 1262 if (!addr->can_addr.j1939.name && 1263 addr->can_addr.j1939.addr == J1939_NO_ADDR && 1264 !sock_flag(sk, SOCK_BROADCAST)) { 1265 /* broadcast, but SO_BROADCAST not set */ 1266 ret = -EACCES; 1267 goto sendmsg_done; 1268 } 1269 } else { 1270 if (!jsk->addr.dst_name && jsk->addr.da == J1939_NO_ADDR && 1271 !sock_flag(sk, SOCK_BROADCAST)) { 1272 /* broadcast, but SO_BROADCAST not set */ 1273 ret = -EACCES; 1274 goto sendmsg_done; 1275 } 1276 } 1277 1278 ret = j1939_sk_send_loop(priv, sk, msg, size); 1279 1280 sendmsg_done: 1281 release_sock(sock->sk); 1282 1283 return ret; 1284 } 1285 1286 void j1939_sk_netdev_event_netdown(struct j1939_priv *priv) 1287 { 1288 struct j1939_sock *jsk; 1289 int error_code = ENETDOWN; 1290 1291 read_lock_bh(&priv->j1939_socks_lock); 1292 list_for_each_entry(jsk, &priv->j1939_socks, list) { 1293 jsk->sk.sk_err = error_code; 1294 if (!sock_flag(&jsk->sk, SOCK_DEAD)) 1295 sk_error_report(&jsk->sk); 1296 1297 j1939_sk_queue_drop_all(priv, jsk, error_code); 1298 } 1299 read_unlock_bh(&priv->j1939_socks_lock); 1300 } 1301 1302 static int j1939_sk_no_ioctlcmd(struct socket *sock, unsigned int cmd, 1303 unsigned long arg) 1304 { 1305 /* no ioctls for socket layer -> hand it down to NIC layer */ 1306 return -ENOIOCTLCMD; 1307 } 1308 1309 static const struct proto_ops j1939_ops = { 1310 .family = PF_CAN, 1311 .release = j1939_sk_release, 1312 .bind = j1939_sk_bind, 1313 .connect = j1939_sk_connect, 1314 .socketpair = sock_no_socketpair, 1315 .accept = sock_no_accept, 1316 .getname = j1939_sk_getname, 1317 .poll = datagram_poll, 1318 .ioctl = j1939_sk_no_ioctlcmd, 1319 .listen = sock_no_listen, 1320 .shutdown = sock_no_shutdown, 1321 .setsockopt = j1939_sk_setsockopt, 1322 .getsockopt = j1939_sk_getsockopt, 1323 .sendmsg = j1939_sk_sendmsg, 1324 .recvmsg = j1939_sk_recvmsg, 1325 .mmap = sock_no_mmap, 1326 }; 1327 1328 static struct proto j1939_proto __read_mostly = { 1329 .name = "CAN_J1939", 1330 .owner = THIS_MODULE, 1331 .obj_size = sizeof(struct j1939_sock), 1332 .init = j1939_sk_init, 1333 }; 1334 1335 const struct can_proto j1939_can_proto = { 1336 .type = SOCK_DGRAM, 1337 .protocol = CAN_J1939, 1338 .ops = &j1939_ops, 1339 .prot = &j1939_proto, 1340 }; 1341