socket.c 31 KB

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