These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / net / ax25 / af_ax25.c
index 330c1f4..fbd0acf 100644 (file)
@@ -40,7 +40,6 @@
 #include <linux/notifier.h>
 #include <linux/proc_fs.h>
 #include <linux/stat.h>
-#include <linux/netfilter.h>
 #include <linux/sysctl.h>
 #include <linux/init.h>
 #include <linux/spinlock.h>
@@ -58,7 +57,7 @@ static const struct proto_ops ax25_proto_ops;
 
 static void ax25_free_sock(struct sock *sk)
 {
-       ax25_cb_put(ax25_sk(sk));
+       ax25_cb_put(sk_to_ax25(sk));
 }
 
 /*
@@ -307,7 +306,7 @@ void ax25_destroy_socket(ax25_cb *ax25)
                while ((skb = skb_dequeue(&ax25->sk->sk_receive_queue)) != NULL) {
                        if (skb->sk != ax25->sk) {
                                /* A pending connection */
-                               ax25_cb *sax25 = ax25_sk(skb->sk);
+                               ax25_cb *sax25 = sk_to_ax25(skb->sk);
 
                                /* Queue the unaccepted socket for death */
                                sock_orphan(skb->sk);
@@ -552,7 +551,7 @@ static int ax25_setsockopt(struct socket *sock, int level, int optname,
                return -EFAULT;
 
        lock_sock(sk);
-       ax25 = ax25_sk(sk);
+       ax25 = sk_to_ax25(sk);
 
        switch (optname) {
        case AX25_WINDOW:
@@ -698,7 +697,7 @@ static int ax25_getsockopt(struct socket *sock, int level, int optname,
        length = min_t(unsigned int, maxlen, sizeof(int));
 
        lock_sock(sk);
-       ax25 = ax25_sk(sk);
+       ax25 = sk_to_ax25(sk);
 
        switch (optname) {
        case AX25_WINDOW:
@@ -797,7 +796,7 @@ out:
 static struct proto ax25_proto = {
        .name     = "AX25",
        .owner    = THIS_MODULE,
-       .obj_size = sizeof(struct sock),
+       .obj_size = sizeof(struct ax25_sock),
 };
 
 static int ax25_create(struct net *net, struct socket *sock, int protocol,
@@ -806,6 +805,9 @@ static int ax25_create(struct net *net, struct socket *sock, int protocol,
        struct sock *sk;
        ax25_cb *ax25;
 
+       if (protocol < 0 || protocol > SK_PROTOCOL_MAX)
+               return -EINVAL;
+
        if (!net_eq(net, &init_net))
                return -EAFNOSUPPORT;
 
@@ -855,11 +857,11 @@ static int ax25_create(struct net *net, struct socket *sock, int protocol,
                return -ESOCKTNOSUPPORT;
        }
 
-       sk = sk_alloc(net, PF_AX25, GFP_ATOMIC, &ax25_proto);
+       sk = sk_alloc(net, PF_AX25, GFP_ATOMIC, &ax25_proto, kern);
        if (sk == NULL)
                return -ENOMEM;
 
-       ax25 = sk->sk_protinfo = ax25_create_cb();
+       ax25 = ax25_sk(sk)->cb = ax25_create_cb();
        if (!ax25) {
                sk_free(sk);
                return -ENOMEM;
@@ -881,7 +883,7 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
        struct sock *sk;
        ax25_cb *ax25, *oax25;
 
-       sk = sk_alloc(sock_net(osk), PF_AX25, GFP_ATOMIC,       osk->sk_prot);
+       sk = sk_alloc(sock_net(osk), PF_AX25, GFP_ATOMIC, osk->sk_prot, 0);
        if (sk == NULL)
                return NULL;
 
@@ -911,7 +913,7 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
        sk->sk_state    = TCP_ESTABLISHED;
        sock_copy_flags(sk, osk);
 
-       oax25 = ax25_sk(osk);
+       oax25 = sk_to_ax25(osk);
 
        ax25->modulus = oax25->modulus;
        ax25->backoff = oax25->backoff;
@@ -939,7 +941,7 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
                }
        }
 
-       sk->sk_protinfo = ax25;
+       ax25_sk(sk)->cb = ax25;
        sk->sk_destruct = ax25_free_sock;
        ax25->sk    = sk;
 
@@ -957,7 +959,7 @@ static int ax25_release(struct socket *sock)
        sock_hold(sk);
        sock_orphan(sk);
        lock_sock(sk);
-       ax25 = ax25_sk(sk);
+       ax25 = sk_to_ax25(sk);
 
        if (sk->sk_type == SOCK_SEQPACKET) {
                switch (ax25->state) {
@@ -1067,7 +1069,7 @@ static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 
        lock_sock(sk);
 
-       ax25 = ax25_sk(sk);
+       ax25 = sk_to_ax25(sk);
        if (!sock_flag(sk, SOCK_ZAPPED)) {
                err = -EINVAL;
                goto out;
@@ -1114,7 +1116,7 @@ static int __must_check ax25_connect(struct socket *sock,
        struct sockaddr *uaddr, int addr_len, int flags)
 {
        struct sock *sk = sock->sk;
-       ax25_cb *ax25 = ax25_sk(sk), *ax25t;
+       ax25_cb *ax25 = sk_to_ax25(sk), *ax25t;
        struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
        ax25_digi *digi = NULL;
        int ct = 0, err = 0;
@@ -1395,7 +1397,7 @@ static int ax25_getname(struct socket *sock, struct sockaddr *uaddr,
 
        memset(fsa, 0, sizeof(*fsa));
        lock_sock(sk);
-       ax25 = ax25_sk(sk);
+       ax25 = sk_to_ax25(sk);
 
        if (peer != 0) {
                if (sk->sk_state != TCP_ESTABLISHED) {
@@ -1447,7 +1449,7 @@ static int ax25_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
                return -EINVAL;
 
        lock_sock(sk);
-       ax25 = ax25_sk(sk);
+       ax25 = sk_to_ax25(sk);
 
        if (sock_flag(sk, SOCK_ZAPPED)) {
                err = -EADDRNOTAVAIL;
@@ -1622,7 +1624,7 @@ static int ax25_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
        if (skb == NULL)
                goto out;
 
-       if (!ax25_sk(sk)->pidincl)
+       if (!sk_to_ax25(sk)->pidincl)
                skb_pull(skb, 1);               /* Remove PID */
 
        skb_reset_transport_header(skb);
@@ -1763,7 +1765,7 @@ static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 
        case SIOCAX25GETINFO:
        case SIOCAX25GETINFOOLD: {
-               ax25_cb *ax25 = ax25_sk(sk);
+               ax25_cb *ax25 = sk_to_ax25(sk);
                struct ax25_info_struct ax25_info;
 
                ax25_info.t1        = ax25->t1   / HZ;