diff options
Diffstat (limited to 'net/tipc')
| -rw-r--r-- | net/tipc/link.c | 46 | ||||
| -rw-r--r-- | net/tipc/msg.h | 7 | ||||
| -rw-r--r-- | net/tipc/port.c | 8 | 
3 files changed, 32 insertions, 29 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c index 71c2f2fd405..f3f99c8ea08 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c @@ -1001,7 +1001,7 @@ static int link_bundle_buf(struct link *l_ptr,  		return 0;  	skb_put(bundler, pad + size); -	memcpy(bundler->data + to_pos, buf->data, size); +	skb_copy_to_linear_data_offset(bundler, to_pos, buf->data, size);  	msg_set_size(bundler_msg, to_pos + size);  	msg_set_msgcnt(bundler_msg, msg_msgcnt(bundler_msg) + 1);  	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)  			if (bundler) {  				msg_init(&bundler_hdr, MSG_BUNDLER, OPEN_MSG,  					 TIPC_OK, INT_H_SIZE, l_ptr->addr); -				memcpy(bundler->data, (unchar *)&bundler_hdr, -				       INT_H_SIZE); +				skb_copy_to_linear_data(bundler, &bundler_hdr, +							INT_H_SIZE);  				skb_trim(bundler, INT_H_SIZE);  				link_bundle_buf(l_ptr, bundler, buf);  				buf = bundler; @@ -1383,9 +1383,9 @@ again:  	if (!buf)  		return -ENOMEM;  	buf->next = NULL; -	memcpy(buf->data, (unchar *)&fragm_hdr, INT_H_SIZE); +	skb_copy_to_linear_data(buf, &fragm_hdr, INT_H_SIZE);  	hsz = msg_hdr_sz(hdr); -	memcpy(buf->data + INT_H_SIZE, (unchar *)hdr, hsz); +	skb_copy_to_linear_data_offset(buf, INT_H_SIZE, hdr, hsz);  	msg_dbg(buf_msg(buf), ">BUILD>");  	/* Chop up message: */ @@ -1416,8 +1416,8 @@ error:  				return -EFAULT;  			}  		} else -			memcpy(buf->data + fragm_crs, sect_crs, sz); - +			skb_copy_to_linear_data_offset(buf, fragm_crs, +						       sect_crs, sz);  		sect_crs += sz;  		sect_rest -= sz;  		fragm_crs += sz; @@ -1442,7 +1442,7 @@ error:  			buf->next = NULL;  			prev->next = buf; -			memcpy(buf->data, (unchar *)&fragm_hdr, INT_H_SIZE); +			skb_copy_to_linear_data(buf, &fragm_hdr, INT_H_SIZE);  			fragm_crs = INT_H_SIZE;  			fragm_rest = fragm_sz;  			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,  		buf = l_ptr->proto_msg_queue;  		if (!buf)  			return; -		memcpy(buf->data, (unchar *)msg, sizeof(l_ptr->proto_msg)); +		skb_copy_to_linear_data(buf, msg, sizeof(l_ptr->proto_msg));  		return;  	}  	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,  	if (!buf)  		return; -	memcpy(buf->data, (unchar *)msg, sizeof(l_ptr->proto_msg)); +	skb_copy_to_linear_data(buf, msg, sizeof(l_ptr->proto_msg));  	msg_set_size(buf_msg(buf), msg_size);  	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,  		     "unable to send tunnel msg\n");  		return;  	} -	memcpy(buf->data, (unchar *)tunnel_hdr, INT_H_SIZE); -	memcpy(buf->data + INT_H_SIZE, (unchar *)msg, length); +	skb_copy_to_linear_data(buf, tunnel_hdr, INT_H_SIZE); +	skb_copy_to_linear_data_offset(buf, INT_H_SIZE, msg, length);  	dbg("%c->%c:", l_ptr->b_ptr->net_plane, tunnel->b_ptr->net_plane);  	msg_dbg(buf_msg(buf), ">SEND>");  	tipc_link_send_buf(tunnel, buf); @@ -2361,7 +2361,7 @@ void tipc_link_changeover(struct link *l_ptr)  		buf = buf_acquire(INT_H_SIZE);  		if (buf) { -			memcpy(buf->data, (unchar *)&tunnel_hdr, INT_H_SIZE); +			skb_copy_to_linear_data(buf, &tunnel_hdr, INT_H_SIZE);  			msg_set_size(&tunnel_hdr, INT_H_SIZE);  			dbg("%c->%c:", l_ptr->b_ptr->net_plane,  			    tunnel->b_ptr->net_plane); @@ -2426,8 +2426,9 @@ void tipc_link_send_duplicate(struct link *l_ptr, struct link *tunnel)  			     "unable to send duplicate msg\n");  			return;  		} -		memcpy(outbuf->data, (unchar *)&tunnel_hdr, INT_H_SIZE); -		memcpy(outbuf->data + INT_H_SIZE, iter->data, length); +		skb_copy_to_linear_data(outbuf, &tunnel_hdr, INT_H_SIZE); +		skb_copy_to_linear_data_offset(outbuf, INT_H_SIZE, iter->data, +					       length);  		dbg("%c->%c:", l_ptr->b_ptr->net_plane,  		    tunnel->b_ptr->net_plane);  		msg_dbg(buf_msg(outbuf), ">SEND>"); @@ -2457,7 +2458,7 @@ static struct sk_buff *buf_extract(struct sk_buff *skb, u32 from_pos)  	eb = buf_acquire(size);  	if (eb) -		memcpy(eb->data, (unchar *)msg, size); +		skb_copy_to_linear_data(eb, msg, size);  	return eb;  } @@ -2631,9 +2632,9 @@ int tipc_link_send_long_buf(struct link *l_ptr, struct sk_buff *buf)  			goto exit;  		}  		msg_set_size(&fragm_hdr, fragm_sz + INT_H_SIZE); -		memcpy(fragm->data, (unchar *)&fragm_hdr, INT_H_SIZE); -		memcpy(fragm->data + INT_H_SIZE, crs, fragm_sz); - +		skb_copy_to_linear_data(fragm, &fragm_hdr, INT_H_SIZE); +		skb_copy_to_linear_data_offset(fragm, INT_H_SIZE, crs, +					       fragm_sz);  		/*  Send queued messages first, if any: */  		l_ptr->stats.sent_fragments++; @@ -2733,8 +2734,8 @@ int tipc_link_recv_fragment(struct sk_buff **pending, struct sk_buff **fb,  		if (pbuf != NULL) {  			pbuf->next = *pending;  			*pending = pbuf; -			memcpy(pbuf->data, (unchar *)imsg, msg_data_sz(fragm)); - +			skb_copy_to_linear_data(pbuf, imsg, +						msg_data_sz(fragm));  			/*  Prepare buffer for subsequent fragments. */  			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,  		u32 fsz = get_fragm_size(pbuf);  		u32 crs = ((msg_fragm_no(fragm) - 1) * fsz);  		u32 exp_frags = get_expected_frags(pbuf) - 1; -		memcpy(pbuf->data + crs, msg_data(fragm), dsz); +		skb_copy_to_linear_data_offset(pbuf, crs, +					       msg_data(fragm), dsz);  		buf_discard(fbuf);  		/* Is message complete? */ diff --git a/net/tipc/msg.h b/net/tipc/msg.h index 62d54906360..aec7ce7af87 100644 --- a/net/tipc/msg.h +++ b/net/tipc/msg.h @@ -786,15 +786,16 @@ static inline int msg_build(struct tipc_msg *hdr,  	*buf = buf_acquire(sz);  	if (!(*buf))  		return -ENOMEM; -	memcpy((*buf)->data, (unchar *)hdr, hsz); +	skb_copy_to_linear_data(*buf, hdr, hsz);  	for (res = 1, cnt = 0; res && (cnt < num_sect); cnt++) {  		if (likely(usrmem))  			res = !copy_from_user((*buf)->data + pos,  					      msg_sect[cnt].iov_base,  					      msg_sect[cnt].iov_len);  		else -			memcpy((*buf)->data + pos, msg_sect[cnt].iov_base, -			       msg_sect[cnt].iov_len); +			skb_copy_to_linear_data_offset(*buf, pos, +						       msg_sect[cnt].iov_base, +						       msg_sect[cnt].iov_len);  		pos += msg_sect[cnt].iov_len;  	}  	if (likely(res)) diff --git a/net/tipc/port.c b/net/tipc/port.c index 5f8217d4b45..bcd5da00737 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)  	msg_set_size(rmsg, data_sz + hdr_sz);  	msg_set_nametype(rmsg, msg_nametype(msg));  	msg_set_nameinst(rmsg, msg_nameinst(msg)); -	memcpy(rbuf->data + hdr_sz, msg_data(msg), data_sz); +	skb_copy_to_linear_data_offset(rbuf, hdr_sz, msg_data(msg), data_sz);  	/* send self-abort message when rejecting on a connected port */  	if (msg_connected(msg)) { @@ -1419,7 +1419,7 @@ int tipc_send_buf(u32 ref, struct sk_buff *buf, unsigned int dsz)  		return -ENOMEM;  	skb_push(buf, hsz); -	memcpy(buf->data, (unchar *)msg, hsz); +	skb_copy_to_linear_data(buf, msg, hsz);  	destnode = msg_destnode(msg);  	p_ptr->publ.congested = 1;  	if (!tipc_port_congested(p_ptr)) { @@ -1555,7 +1555,7 @@ int tipc_forward_buf2name(u32 ref,  	if (skb_cow(buf, LONG_H_SIZE))  		return -ENOMEM;  	skb_push(buf, LONG_H_SIZE); -	memcpy(buf->data, (unchar *)msg, LONG_H_SIZE); +	skb_copy_to_linear_data(buf, msg, LONG_H_SIZE);  	msg_dbg(buf_msg(buf),"PREP:");  	if (likely(destport || destnode)) {  		p_ptr->sent++; @@ -1679,7 +1679,7 @@ int tipc_forward_buf2port(u32 ref,  		return -ENOMEM;  	skb_push(buf, DIR_MSG_H_SIZE); -	memcpy(buf->data, (unchar *)msg, DIR_MSG_H_SIZE); +	skb_copy_to_linear_data(buf, msg, DIR_MSG_H_SIZE);  	msg_dbg(msg, "buf2port: ");  	p_ptr->sent++;  	if (dest->node == tipc_own_addr)  |