aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/config.c2
-rw-r--r--net/tipc/eth_media.c20
-rw-r--r--net/tipc/link.c48
-rw-r--r--net/tipc/msg.h18
-rw-r--r--net/tipc/netlink.c2
-rw-r--r--net/tipc/port.c8
-rw-r--r--net/tipc/socket.c2
7 files changed, 54 insertions, 46 deletions
diff --git a/net/tipc/config.c b/net/tipc/config.c
index 14789a82de53..c71337a22d33 100644
--- a/net/tipc/config.c
+++ b/net/tipc/config.c
@@ -89,7 +89,7 @@ struct sk_buff *tipc_cfg_reply_alloc(int payload_size)
89int tipc_cfg_append_tlv(struct sk_buff *buf, int tlv_type, 89int tipc_cfg_append_tlv(struct sk_buff *buf, int tlv_type,
90 void *tlv_data, int tlv_data_size) 90 void *tlv_data, int tlv_data_size)
91{ 91{
92 struct tlv_desc *tlv = (struct tlv_desc *)buf->tail; 92 struct tlv_desc *tlv = (struct tlv_desc *)skb_tail_pointer(buf);
93 int new_tlv_space = TLV_SPACE(tlv_data_size); 93 int new_tlv_space = TLV_SPACE(tlv_data_size);
94 94
95 if (skb_tailroom(buf) < new_tlv_space) { 95 if (skb_tailroom(buf) < new_tlv_space) {
diff --git a/net/tipc/eth_media.c b/net/tipc/eth_media.c
index 9be4839e32c5..0ee6ded18f3a 100644
--- a/net/tipc/eth_media.c
+++ b/net/tipc/eth_media.c
@@ -73,7 +73,7 @@ static int send_msg(struct sk_buff *buf, struct tipc_bearer *tb_ptr,
73 73
74 clone = skb_clone(buf, GFP_ATOMIC); 74 clone = skb_clone(buf, GFP_ATOMIC);
75 if (clone) { 75 if (clone) {
76 clone->nh.raw = clone->data; 76 skb_reset_network_header(clone);
77 dev = ((struct eth_bearer *)(tb_ptr->usr_handle))->dev; 77 dev = ((struct eth_bearer *)(tb_ptr->usr_handle))->dev;
78 clone->dev = dev; 78 clone->dev = dev;
79 dev->hard_header(clone, dev, ETH_P_TIPC, 79 dev->hard_header(clone, dev, ETH_P_TIPC,
@@ -99,8 +99,8 @@ static int recv_msg(struct sk_buff *buf, struct net_device *dev,
99 99
100 if (likely(eb_ptr->bearer)) { 100 if (likely(eb_ptr->bearer)) {
101 if (likely(!dev->promiscuity) || 101 if (likely(!dev->promiscuity) ||
102 !memcmp(buf->mac.raw,dev->dev_addr,ETH_ALEN) || 102 !memcmp(skb_mac_header(buf), dev->dev_addr, ETH_ALEN) ||
103 !memcmp(buf->mac.raw,dev->broadcast,ETH_ALEN)) { 103 !memcmp(skb_mac_header(buf), dev->broadcast, ETH_ALEN)) {
104 size = msg_size((struct tipc_msg *)buf->data); 104 size = msg_size((struct tipc_msg *)buf->data);
105 skb_trim(buf, size); 105 skb_trim(buf, size);
106 if (likely(buf->len == size)) { 106 if (likely(buf->len == size)) {
@@ -120,16 +120,18 @@ static int recv_msg(struct sk_buff *buf, struct net_device *dev,
120 120
121static int enable_bearer(struct tipc_bearer *tb_ptr) 121static int enable_bearer(struct tipc_bearer *tb_ptr)
122{ 122{
123 struct net_device *dev = dev_base; 123 struct net_device *dev, *pdev;
124 struct eth_bearer *eb_ptr = &eth_bearers[0]; 124 struct eth_bearer *eb_ptr = &eth_bearers[0];
125 struct eth_bearer *stop = &eth_bearers[MAX_ETH_BEARERS]; 125 struct eth_bearer *stop = &eth_bearers[MAX_ETH_BEARERS];
126 char *driver_name = strchr((const char *)tb_ptr->name, ':') + 1; 126 char *driver_name = strchr((const char *)tb_ptr->name, ':') + 1;
127 127
128 /* Find device with specified name */ 128 /* Find device with specified name */
129 129 dev = NULL;
130 while (dev && dev->name && strncmp(dev->name, driver_name, IFNAMSIZ)) { 130 for_each_netdev(pdev)
131 dev = dev->next; 131 if (!strncmp(dev->name, driver_name, IFNAMSIZ)) {
132 } 132 dev = pdev;
133 break;
134 }
133 if (!dev) 135 if (!dev)
134 return -ENODEV; 136 return -ENODEV;
135 137
@@ -140,7 +142,7 @@ static int enable_bearer(struct tipc_bearer *tb_ptr)
140 return -EDQUOT; 142 return -EDQUOT;
141 if (!eb_ptr->dev) { 143 if (!eb_ptr->dev) {
142 eb_ptr->dev = dev; 144 eb_ptr->dev = dev;
143 eb_ptr->tipc_packet_type.type = __constant_htons(ETH_P_TIPC); 145 eb_ptr->tipc_packet_type.type = htons(ETH_P_TIPC);
144 eb_ptr->tipc_packet_type.dev = dev; 146 eb_ptr->tipc_packet_type.dev = dev;
145 eb_ptr->tipc_packet_type.func = recv_msg; 147 eb_ptr->tipc_packet_type.func = recv_msg;
146 eb_ptr->tipc_packet_type.af_packet_priv = eb_ptr; 148 eb_ptr->tipc_packet_type.af_packet_priv = eb_ptr;
diff --git a/net/tipc/link.c b/net/tipc/link.c
index 71c2f2fd405c..2124f32ef29f 100644
--- a/net/tipc/link.c
+++ b/net/tipc/link.c
@@ -1001,7 +1001,7 @@ static int link_bundle_buf(struct link *l_ptr,
1001 return 0; 1001 return 0;
1002 1002
1003 skb_put(bundler, pad + size); 1003 skb_put(bundler, pad + size);
1004 memcpy(bundler->data + to_pos, buf->data, size); 1004 skb_copy_to_linear_data_offset(bundler, to_pos, buf->data, size);
1005 msg_set_size(bundler_msg, to_pos + size); 1005 msg_set_size(bundler_msg, to_pos + size);
1006 msg_set_msgcnt(bundler_msg, msg_msgcnt(bundler_msg) + 1); 1006 msg_set_msgcnt(bundler_msg, msg_msgcnt(bundler_msg) + 1);
1007 dbg("Packed msg # %u(%u octets) into pos %u in buf(#%u)\n", 1007 dbg("Packed msg # %u(%u octets) into pos %u in buf(#%u)\n",
@@ -1109,8 +1109,8 @@ int tipc_link_send_buf(struct link *l_ptr, struct sk_buff *buf)
1109 if (bundler) { 1109 if (bundler) {
1110 msg_init(&bundler_hdr, MSG_BUNDLER, OPEN_MSG, 1110 msg_init(&bundler_hdr, MSG_BUNDLER, OPEN_MSG,
1111 TIPC_OK, INT_H_SIZE, l_ptr->addr); 1111 TIPC_OK, INT_H_SIZE, l_ptr->addr);
1112 memcpy(bundler->data, (unchar *)&bundler_hdr, 1112 skb_copy_to_linear_data(bundler, &bundler_hdr,
1113 INT_H_SIZE); 1113 INT_H_SIZE);
1114 skb_trim(bundler, INT_H_SIZE); 1114 skb_trim(bundler, INT_H_SIZE);
1115 link_bundle_buf(l_ptr, bundler, buf); 1115 link_bundle_buf(l_ptr, bundler, buf);
1116 buf = bundler; 1116 buf = bundler;
@@ -1383,9 +1383,9 @@ again:
1383 if (!buf) 1383 if (!buf)
1384 return -ENOMEM; 1384 return -ENOMEM;
1385 buf->next = NULL; 1385 buf->next = NULL;
1386 memcpy(buf->data, (unchar *)&fragm_hdr, INT_H_SIZE); 1386 skb_copy_to_linear_data(buf, &fragm_hdr, INT_H_SIZE);
1387 hsz = msg_hdr_sz(hdr); 1387 hsz = msg_hdr_sz(hdr);
1388 memcpy(buf->data + INT_H_SIZE, (unchar *)hdr, hsz); 1388 skb_copy_to_linear_data_offset(buf, INT_H_SIZE, hdr, hsz);
1389 msg_dbg(buf_msg(buf), ">BUILD>"); 1389 msg_dbg(buf_msg(buf), ">BUILD>");
1390 1390
1391 /* Chop up message: */ 1391 /* Chop up message: */
@@ -1416,8 +1416,8 @@ error:
1416 return -EFAULT; 1416 return -EFAULT;
1417 } 1417 }
1418 } else 1418 } else
1419 memcpy(buf->data + fragm_crs, sect_crs, sz); 1419 skb_copy_to_linear_data_offset(buf, fragm_crs,
1420 1420 sect_crs, sz);
1421 sect_crs += sz; 1421 sect_crs += sz;
1422 sect_rest -= sz; 1422 sect_rest -= sz;
1423 fragm_crs += sz; 1423 fragm_crs += sz;
@@ -1442,7 +1442,7 @@ error:
1442 1442
1443 buf->next = NULL; 1443 buf->next = NULL;
1444 prev->next = buf; 1444 prev->next = buf;
1445 memcpy(buf->data, (unchar *)&fragm_hdr, INT_H_SIZE); 1445 skb_copy_to_linear_data(buf, &fragm_hdr, INT_H_SIZE);
1446 fragm_crs = INT_H_SIZE; 1446 fragm_crs = INT_H_SIZE;
1447 fragm_rest = fragm_sz; 1447 fragm_rest = fragm_sz;
1448 msg_dbg(buf_msg(buf)," >BUILD>"); 1448 msg_dbg(buf_msg(buf)," >BUILD>");
@@ -2130,7 +2130,7 @@ void tipc_link_send_proto_msg(struct link *l_ptr, u32 msg_typ, int probe_msg,
2130 buf = l_ptr->proto_msg_queue; 2130 buf = l_ptr->proto_msg_queue;
2131 if (!buf) 2131 if (!buf)
2132 return; 2132 return;
2133 memcpy(buf->data, (unchar *)msg, sizeof(l_ptr->proto_msg)); 2133 skb_copy_to_linear_data(buf, msg, sizeof(l_ptr->proto_msg));
2134 return; 2134 return;
2135 } 2135 }
2136 msg_set_timestamp(msg, jiffies_to_msecs(jiffies)); 2136 msg_set_timestamp(msg, jiffies_to_msecs(jiffies));
@@ -2143,7 +2143,7 @@ void tipc_link_send_proto_msg(struct link *l_ptr, u32 msg_typ, int probe_msg,
2143 if (!buf) 2143 if (!buf)
2144 return; 2144 return;
2145 2145
2146 memcpy(buf->data, (unchar *)msg, sizeof(l_ptr->proto_msg)); 2146 skb_copy_to_linear_data(buf, msg, sizeof(l_ptr->proto_msg));
2147 msg_set_size(buf_msg(buf), msg_size); 2147 msg_set_size(buf_msg(buf), msg_size);
2148 2148
2149 if (tipc_bearer_send(l_ptr->b_ptr, buf, &l_ptr->media_addr)) { 2149 if (tipc_bearer_send(l_ptr->b_ptr, buf, &l_ptr->media_addr)) {
@@ -2319,8 +2319,8 @@ void tipc_link_tunnel(struct link *l_ptr,
2319 "unable to send tunnel msg\n"); 2319 "unable to send tunnel msg\n");
2320 return; 2320 return;
2321 } 2321 }
2322 memcpy(buf->data, (unchar *)tunnel_hdr, INT_H_SIZE); 2322 skb_copy_to_linear_data(buf, tunnel_hdr, INT_H_SIZE);
2323 memcpy(buf->data + INT_H_SIZE, (unchar *)msg, length); 2323 skb_copy_to_linear_data_offset(buf, INT_H_SIZE, msg, length);
2324 dbg("%c->%c:", l_ptr->b_ptr->net_plane, tunnel->b_ptr->net_plane); 2324 dbg("%c->%c:", l_ptr->b_ptr->net_plane, tunnel->b_ptr->net_plane);
2325 msg_dbg(buf_msg(buf), ">SEND>"); 2325 msg_dbg(buf_msg(buf), ">SEND>");
2326 tipc_link_send_buf(tunnel, buf); 2326 tipc_link_send_buf(tunnel, buf);
@@ -2361,7 +2361,7 @@ void tipc_link_changeover(struct link *l_ptr)
2361 2361
2362 buf = buf_acquire(INT_H_SIZE); 2362 buf = buf_acquire(INT_H_SIZE);
2363 if (buf) { 2363 if (buf) {
2364 memcpy(buf->data, (unchar *)&tunnel_hdr, INT_H_SIZE); 2364 skb_copy_to_linear_data(buf, &tunnel_hdr, INT_H_SIZE);
2365 msg_set_size(&tunnel_hdr, INT_H_SIZE); 2365 msg_set_size(&tunnel_hdr, INT_H_SIZE);
2366 dbg("%c->%c:", l_ptr->b_ptr->net_plane, 2366 dbg("%c->%c:", l_ptr->b_ptr->net_plane,
2367 tunnel->b_ptr->net_plane); 2367 tunnel->b_ptr->net_plane);
@@ -2426,8 +2426,9 @@ void tipc_link_send_duplicate(struct link *l_ptr, struct link *tunnel)
2426 "unable to send duplicate msg\n"); 2426 "unable to send duplicate msg\n");
2427 return; 2427 return;
2428 } 2428 }
2429 memcpy(outbuf->data, (unchar *)&tunnel_hdr, INT_H_SIZE); 2429 skb_copy_to_linear_data(outbuf, &tunnel_hdr, INT_H_SIZE);
2430 memcpy(outbuf->data + INT_H_SIZE, iter->data, length); 2430 skb_copy_to_linear_data_offset(outbuf, INT_H_SIZE, iter->data,
2431 length);
2431 dbg("%c->%c:", l_ptr->b_ptr->net_plane, 2432 dbg("%c->%c:", l_ptr->b_ptr->net_plane,
2432 tunnel->b_ptr->net_plane); 2433 tunnel->b_ptr->net_plane);
2433 msg_dbg(buf_msg(outbuf), ">SEND>"); 2434 msg_dbg(buf_msg(outbuf), ">SEND>");
@@ -2457,7 +2458,7 @@ static struct sk_buff *buf_extract(struct sk_buff *skb, u32 from_pos)
2457 2458
2458 eb = buf_acquire(size); 2459 eb = buf_acquire(size);
2459 if (eb) 2460 if (eb)
2460 memcpy(eb->data, (unchar *)msg, size); 2461 skb_copy_to_linear_data(eb, msg, size);
2461 return eb; 2462 return eb;
2462} 2463}
2463 2464
@@ -2569,7 +2570,7 @@ void tipc_link_recv_bundle(struct sk_buff *buf)
2569 if (obuf == NULL) { 2570 if (obuf == NULL) {
2570 warn("Link unable to unbundle message(s)\n"); 2571 warn("Link unable to unbundle message(s)\n");
2571 break; 2572 break;
2572 }; 2573 }
2573 pos += align(msg_size(buf_msg(obuf))); 2574 pos += align(msg_size(buf_msg(obuf)));
2574 msg_dbg(buf_msg(obuf), " /"); 2575 msg_dbg(buf_msg(obuf), " /");
2575 tipc_net_route_msg(obuf); 2576 tipc_net_route_msg(obuf);
@@ -2631,9 +2632,9 @@ int tipc_link_send_long_buf(struct link *l_ptr, struct sk_buff *buf)
2631 goto exit; 2632 goto exit;
2632 } 2633 }
2633 msg_set_size(&fragm_hdr, fragm_sz + INT_H_SIZE); 2634 msg_set_size(&fragm_hdr, fragm_sz + INT_H_SIZE);
2634 memcpy(fragm->data, (unchar *)&fragm_hdr, INT_H_SIZE); 2635 skb_copy_to_linear_data(fragm, &fragm_hdr, INT_H_SIZE);
2635 memcpy(fragm->data + INT_H_SIZE, crs, fragm_sz); 2636 skb_copy_to_linear_data_offset(fragm, INT_H_SIZE, crs,
2636 2637 fragm_sz);
2637 /* Send queued messages first, if any: */ 2638 /* Send queued messages first, if any: */
2638 2639
2639 l_ptr->stats.sent_fragments++; 2640 l_ptr->stats.sent_fragments++;
@@ -2733,8 +2734,8 @@ int tipc_link_recv_fragment(struct sk_buff **pending, struct sk_buff **fb,
2733 if (pbuf != NULL) { 2734 if (pbuf != NULL) {
2734 pbuf->next = *pending; 2735 pbuf->next = *pending;
2735 *pending = pbuf; 2736 *pending = pbuf;
2736 memcpy(pbuf->data, (unchar *)imsg, msg_data_sz(fragm)); 2737 skb_copy_to_linear_data(pbuf, imsg,
2737 2738 msg_data_sz(fragm));
2738 /* Prepare buffer for subsequent fragments. */ 2739 /* Prepare buffer for subsequent fragments. */
2739 2740
2740 set_long_msg_seqno(pbuf, long_msg_seq_no); 2741 set_long_msg_seqno(pbuf, long_msg_seq_no);
@@ -2750,7 +2751,8 @@ int tipc_link_recv_fragment(struct sk_buff **pending, struct sk_buff **fb,
2750 u32 fsz = get_fragm_size(pbuf); 2751 u32 fsz = get_fragm_size(pbuf);
2751 u32 crs = ((msg_fragm_no(fragm) - 1) * fsz); 2752 u32 crs = ((msg_fragm_no(fragm) - 1) * fsz);
2752 u32 exp_frags = get_expected_frags(pbuf) - 1; 2753 u32 exp_frags = get_expected_frags(pbuf) - 1;
2753 memcpy(pbuf->data + crs, msg_data(fragm), dsz); 2754 skb_copy_to_linear_data_offset(pbuf, crs,
2755 msg_data(fragm), dsz);
2754 buf_discard(fbuf); 2756 buf_discard(fbuf);
2755 2757
2756 /* Is message complete? */ 2758 /* Is message complete? */
diff --git a/net/tipc/msg.h b/net/tipc/msg.h
index 62d549063604..35d5ba1d4f42 100644
--- a/net/tipc/msg.h
+++ b/net/tipc/msg.h
@@ -1,8 +1,8 @@
1/* 1/*
2 * net/tipc/msg.h: Include file for TIPC message header routines 2 * net/tipc/msg.h: Include file for TIPC message header routines
3 * 3 *
4 * Copyright (c) 2000-2006, Ericsson AB 4 * Copyright (c) 2000-2007, Ericsson AB
5 * Copyright (c) 2005, Wind River Systems 5 * Copyright (c) 2005-2007, Wind River Systems
6 * All rights reserved. 6 * All rights reserved.
7 * 7 *
8 * Redistribution and use in source and binary forms, with or without 8 * Redistribution and use in source and binary forms, with or without
@@ -71,8 +71,11 @@ static inline void msg_set_word(struct tipc_msg *m, u32 w, u32 val)
71static inline void msg_set_bits(struct tipc_msg *m, u32 w, 71static inline void msg_set_bits(struct tipc_msg *m, u32 w,
72 u32 pos, u32 mask, u32 val) 72 u32 pos, u32 mask, u32 val)
73{ 73{
74 u32 word = msg_word(m,w) & ~(mask << pos); 74 val = (val & mask) << pos;
75 msg_set_word(m, w, (word |= (val << pos))); 75 val = htonl(val);
76 mask = htonl(mask << pos);
77 m->hdr[w] &= ~mask;
78 m->hdr[w] |= val;
76} 79}
77 80
78/* 81/*
@@ -786,15 +789,16 @@ static inline int msg_build(struct tipc_msg *hdr,
786 *buf = buf_acquire(sz); 789 *buf = buf_acquire(sz);
787 if (!(*buf)) 790 if (!(*buf))
788 return -ENOMEM; 791 return -ENOMEM;
789 memcpy((*buf)->data, (unchar *)hdr, hsz); 792 skb_copy_to_linear_data(*buf, hdr, hsz);
790 for (res = 1, cnt = 0; res && (cnt < num_sect); cnt++) { 793 for (res = 1, cnt = 0; res && (cnt < num_sect); cnt++) {
791 if (likely(usrmem)) 794 if (likely(usrmem))
792 res = !copy_from_user((*buf)->data + pos, 795 res = !copy_from_user((*buf)->data + pos,
793 msg_sect[cnt].iov_base, 796 msg_sect[cnt].iov_base,
794 msg_sect[cnt].iov_len); 797 msg_sect[cnt].iov_len);
795 else 798 else
796 memcpy((*buf)->data + pos, msg_sect[cnt].iov_base, 799 skb_copy_to_linear_data_offset(*buf, pos,
797 msg_sect[cnt].iov_len); 800 msg_sect[cnt].iov_base,
801 msg_sect[cnt].iov_len);
798 pos += msg_sect[cnt].iov_len; 802 pos += msg_sect[cnt].iov_len;
799 } 803 }
800 if (likely(res)) 804 if (likely(res))
diff --git a/net/tipc/netlink.c b/net/tipc/netlink.c
index b8e1edc2badc..4cdafa2d1d4d 100644
--- a/net/tipc/netlink.c
+++ b/net/tipc/netlink.c
@@ -57,7 +57,7 @@ static int handle_cmd(struct sk_buff *skb, struct genl_info *info)
57 57
58 if (rep_buf) { 58 if (rep_buf) {
59 skb_push(rep_buf, hdr_space); 59 skb_push(rep_buf, hdr_space);
60 rep_nlh = (struct nlmsghdr *)rep_buf->data; 60 rep_nlh = nlmsg_hdr(rep_buf);
61 memcpy(rep_nlh, req_nlh, hdr_space); 61 memcpy(rep_nlh, req_nlh, hdr_space);
62 rep_nlh->nlmsg_len = rep_buf->len; 62 rep_nlh->nlmsg_len = rep_buf->len;
63 genlmsg_unicast(rep_buf, req_nlh->nlmsg_pid); 63 genlmsg_unicast(rep_buf, req_nlh->nlmsg_pid);
diff --git a/net/tipc/port.c b/net/tipc/port.c
index 5f8217d4b452..bcd5da00737b 100644
--- a/net/tipc/port.c
+++ b/net/tipc/port.c
@@ -464,7 +464,7 @@ int tipc_reject_msg(struct sk_buff *buf, u32 err)
464 msg_set_size(rmsg, data_sz + hdr_sz); 464 msg_set_size(rmsg, data_sz + hdr_sz);
465 msg_set_nametype(rmsg, msg_nametype(msg)); 465 msg_set_nametype(rmsg, msg_nametype(msg));
466 msg_set_nameinst(rmsg, msg_nameinst(msg)); 466 msg_set_nameinst(rmsg, msg_nameinst(msg));
467 memcpy(rbuf->data + hdr_sz, msg_data(msg), data_sz); 467 skb_copy_to_linear_data_offset(rbuf, hdr_sz, msg_data(msg), data_sz);
468 468
469 /* send self-abort message when rejecting on a connected port */ 469 /* send self-abort message when rejecting on a connected port */
470 if (msg_connected(msg)) { 470 if (msg_connected(msg)) {
@@ -1419,7 +1419,7 @@ int tipc_send_buf(u32 ref, struct sk_buff *buf, unsigned int dsz)
1419 return -ENOMEM; 1419 return -ENOMEM;
1420 1420
1421 skb_push(buf, hsz); 1421 skb_push(buf, hsz);
1422 memcpy(buf->data, (unchar *)msg, hsz); 1422 skb_copy_to_linear_data(buf, msg, hsz);
1423 destnode = msg_destnode(msg); 1423 destnode = msg_destnode(msg);
1424 p_ptr->publ.congested = 1; 1424 p_ptr->publ.congested = 1;
1425 if (!tipc_port_congested(p_ptr)) { 1425 if (!tipc_port_congested(p_ptr)) {
@@ -1555,7 +1555,7 @@ int tipc_forward_buf2name(u32 ref,
1555 if (skb_cow(buf, LONG_H_SIZE)) 1555 if (skb_cow(buf, LONG_H_SIZE))
1556 return -ENOMEM; 1556 return -ENOMEM;
1557 skb_push(buf, LONG_H_SIZE); 1557 skb_push(buf, LONG_H_SIZE);
1558 memcpy(buf->data, (unchar *)msg, LONG_H_SIZE); 1558 skb_copy_to_linear_data(buf, msg, LONG_H_SIZE);
1559 msg_dbg(buf_msg(buf),"PREP:"); 1559 msg_dbg(buf_msg(buf),"PREP:");
1560 if (likely(destport || destnode)) { 1560 if (likely(destport || destnode)) {
1561 p_ptr->sent++; 1561 p_ptr->sent++;
@@ -1679,7 +1679,7 @@ int tipc_forward_buf2port(u32 ref,
1679 return -ENOMEM; 1679 return -ENOMEM;
1680 1680
1681 skb_push(buf, DIR_MSG_H_SIZE); 1681 skb_push(buf, DIR_MSG_H_SIZE);
1682 memcpy(buf->data, (unchar *)msg, DIR_MSG_H_SIZE); 1682 skb_copy_to_linear_data(buf, msg, DIR_MSG_H_SIZE);
1683 msg_dbg(msg, "buf2port: "); 1683 msg_dbg(msg, "buf2port: ");
1684 p_ptr->sent++; 1684 p_ptr->sent++;
1685 if (dest->node == tipc_own_addr) 1685 if (dest->node == tipc_own_addr)
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index b71739fbe2c6..45832fb75ea4 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -1020,7 +1020,7 @@ restart:
1020 1020
1021 if (!err) { 1021 if (!err) {
1022 buf_crs = (unsigned char *)(TIPC_SKB_CB(buf)->handle); 1022 buf_crs = (unsigned char *)(TIPC_SKB_CB(buf)->handle);
1023 sz = buf->tail - buf_crs; 1023 sz = skb_tail_pointer(buf) - buf_crs;
1024 1024
1025 needed = (buf_len - sz_copied); 1025 needed = (buf_len - sz_copied);
1026 sz_to_copy = (sz <= needed) ? sz : needed; 1026 sz_to_copy = (sz <= needed) ? sz : needed;