Merge tag 'mlx5-fixes-2021-02-01' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / net / can / raw.c
index 94a9405..6ec8aa1 100644 (file)
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
+// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
 /* raw.c - Raw sockets for protocol family CAN
  *
  * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
@@ -55,8 +55,6 @@
 #include <net/sock.h>
 #include <net/net_namespace.h>
 
-#define CAN_RAW_VERSION CAN_VERSION
-
 MODULE_DESCRIPTION("PF_CAN raw protocol");
 MODULE_LICENSE("Dual BSD/GPL");
 MODULE_AUTHOR("Urs Thuermann <urs.thuermann@volkswagen.de>");
@@ -154,16 +152,16 @@ static void raw_rcv(struct sk_buff *oskb, void *data)
        if (!skb)
                return;
 
-       /*  Put the datagram to the queue so that raw_recvmsg() can
-        *  get it from there.  We need to pass the interface index to
-        *  raw_recvmsg().  We pass a whole struct sockaddr_can in skb->cb
-        *  containing the interface index.
+       /* Put the datagram to the queue so that raw_recvmsg() can get
+        * it from there. We need to pass the interface index to
+        * raw_recvmsg(). We pass a whole struct sockaddr_can in
+        * skb->cb containing the interface index.
         */
 
        sock_skb_cb_check_size(sizeof(struct sockaddr_can));
        addr = (struct sockaddr_can *)skb->cb;
        memset(addr, 0, sizeof(*addr));
-       addr->can_family  = AF_CAN;
+       addr->can_family = AF_CAN;
        addr->can_ifindex = skb->dev->ifindex;
 
        /* add CAN specific message flags for raw_recvmsg() */
@@ -290,8 +288,8 @@ static int raw_notifier(struct notifier_block *nb,
                        kfree(ro->filter);
 
                ro->ifindex = 0;
-               ro->bound   = 0;
-               ro->count   = 0;
+               ro->bound = 0;
+               ro->count = 0;
                release_sock(sk);
 
                sk->sk_err = ENODEV;
@@ -374,8 +372,8 @@ static int raw_release(struct socket *sock)
                kfree(ro->filter);
 
        ro->ifindex = 0;
-       ro->bound   = 0;
-       ro->count   = 0;
+       ro->bound = 0;
+       ro->count = 0;
        free_percpu(ro->uniq);
 
        sock_orphan(sk);
@@ -773,7 +771,7 @@ static int raw_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
        skb_setup_tx_timestamp(skb, sk->sk_tsflags);
 
        skb->dev = dev;
-       skb->sk  = sk;
+       skb->sk = sk;
        skb->priority = sk->sk_priority;
 
        err = can_send(skb, ro->loopback);
@@ -801,8 +799,12 @@ static int raw_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
        int err = 0;
        int noblock;
 
-       noblock =  flags & MSG_DONTWAIT;
-       flags   &= ~MSG_DONTWAIT;
+       noblock = flags & MSG_DONTWAIT;
+       flags &= ~MSG_DONTWAIT;
+
+       if (flags & MSG_ERRQUEUE)
+               return sock_recv_errqueue(sk, msg, size,
+                                         SOL_CAN_RAW, SCM_CAN_RAW_ERRQUEUE);
 
        skb = skb_recv_datagram(sk, flags, noblock, &err);
        if (!skb)
@@ -881,7 +883,7 @@ static __init int raw_module_init(void)
 {
        int err;
 
-       pr_info("can: raw protocol (rev " CAN_RAW_VERSION ")\n");
+       pr_info("can: raw protocol\n");
 
        err = can_proto_register(&raw_can_proto);
        if (err < 0)