]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - net/netrom/af_netrom.c
[SK_BUFF]: Introduce skb_copy_from_linear_data{_offset}
[mirror_ubuntu-artful-kernel.git] / net / netrom / af_netrom.c
index bf9837dd95c4505642b99f93e9b96403d055685e..5dc7448925db92cf24376caa770c069025113806 100644 (file)
@@ -878,7 +878,7 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev)
        if (frametype == NR_PROTOEXT &&
            circuit_index == NR_PROTO_IP && circuit_id == NR_PROTO_IP) {
                skb_pull(skb, NR_NETWORK_LEN + NR_TRANSPORT_LEN);
-               skb->h.raw = skb->data;
+               skb_reset_transport_header(skb);
 
                return nr_rx_ip(skb, dev);
        }
@@ -904,7 +904,7 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev)
        }
 
        if (sk != NULL) {
-               skb->h.raw = skb->data;
+               skb_reset_transport_header(skb);
 
                if (frametype == NR_CONNACK && skb->len == 22)
                        nr_sk(sk)->bpqext = 1;
@@ -1074,6 +1074,7 @@ static int nr_sendmsg(struct kiocb *iocb, struct socket *sock,
                goto out;
 
        skb_reserve(skb, size - len);
+       skb_reset_transport_header(skb);
 
        /*
         *      Push down the NET/ROM header
@@ -1094,14 +1095,12 @@ static int nr_sendmsg(struct kiocb *iocb, struct socket *sock,
        /*
         *      Put the data on the end
         */
+       skb_put(skb, len);
 
-       skb->h.raw = skb_put(skb, len);
-
-       asmptr = skb->h.raw;
        SOCK_DEBUG(sk, "NET/ROM: Appending user data\n");
 
        /* User data follows immediately after the NET/ROM transport header */
-       if (memcpy_fromiovec(asmptr, msg->msg_iov, len)) {
+       if (memcpy_fromiovec(skb_transport_header(skb), msg->msg_iov, len)) {
                kfree_skb(skb);
                err = -EFAULT;
                goto out;
@@ -1149,7 +1148,7 @@ static int nr_recvmsg(struct kiocb *iocb, struct socket *sock,
                return er;
        }
 
-       skb->h.raw = skb->data;
+       skb_reset_transport_header(skb);
        copied     = skb->len;
 
        if (copied > size) {
@@ -1161,7 +1160,8 @@ static int nr_recvmsg(struct kiocb *iocb, struct socket *sock,
 
        if (sax != NULL) {
                sax->sax25_family = AF_NETROM;
-               memcpy(sax->sax25_call.ax25_call, skb->data + 7, AX25_ADDR_LEN);
+               skb_copy_from_linear_data_offset(skb, 7, sax->sax25_call.ax25_call,
+                             AX25_ADDR_LEN);
        }
 
        msg->msg_namelen = sizeof(*sax);
@@ -1209,6 +1209,12 @@ static int nr_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
                release_sock(sk);
                return ret;
 
+       case SIOCGSTAMPNS:
+               lock_sock(sk);
+               ret = sock_get_timestampns(sk, argp);
+               release_sock(sk);
+               return ret;
+
        case SIOCGIFADDR:
        case SIOCSIFADDR:
        case SIOCGIFDSTADDR: