aboutsummaryrefslogtreecommitdiffstats
path: root/net/x25/x25_in.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/x25/x25_in.c')
-rw-r--r--net/x25/x25_in.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/net/x25/x25_in.c b/net/x25/x25_in.c
index c5239fcdefa0..1c88762c2794 100644
--- a/net/x25/x25_in.c
+++ b/net/x25/x25_in.c
@@ -53,17 +53,20 @@ static int x25_queue_rx_frame(struct sock *sk, struct sk_buff *skb, int more)
53 53
54 skb_queue_tail(&x25->fragment_queue, skb); 54 skb_queue_tail(&x25->fragment_queue, skb);
55 55
56 skbn->h.raw = skbn->data; 56 skb_reset_transport_header(skbn);
57 57
58 skbo = skb_dequeue(&x25->fragment_queue); 58 skbo = skb_dequeue(&x25->fragment_queue);
59 memcpy(skb_put(skbn, skbo->len), skbo->data, skbo->len); 59 skb_copy_from_linear_data(skbo, skb_put(skbn, skbo->len),
60 skbo->len);
60 kfree_skb(skbo); 61 kfree_skb(skbo);
61 62
62 while ((skbo = 63 while ((skbo =
63 skb_dequeue(&x25->fragment_queue)) != NULL) { 64 skb_dequeue(&x25->fragment_queue)) != NULL) {
64 skb_pull(skbo, (x25->neighbour->extended) ? 65 skb_pull(skbo, (x25->neighbour->extended) ?
65 X25_EXT_MIN_LEN : X25_STD_MIN_LEN); 66 X25_EXT_MIN_LEN : X25_STD_MIN_LEN);
66 memcpy(skb_put(skbn, skbo->len), skbo->data, skbo->len); 67 skb_copy_from_linear_data(skbo,
68 skb_put(skbn, skbo->len),
69 skbo->len);
67 kfree_skb(skbo); 70 kfree_skb(skbo);
68 } 71 }
69 72
@@ -112,8 +115,9 @@ static int x25_state1_machine(struct sock *sk, struct sk_buff *skb, int frametyp
112 * Copy any Call User Data. 115 * Copy any Call User Data.
113 */ 116 */
114 if (skb->len >= 0) { 117 if (skb->len >= 0) {
115 memcpy(x25->calluserdata.cuddata, skb->data, 118 skb_copy_from_linear_data(skb,
116 skb->len); 119 x25->calluserdata.cuddata,
120 skb->len);
117 x25->calluserdata.cudlength = skb->len; 121 x25->calluserdata.cudlength = skb->len;
118 } 122 }
119 if (!sock_flag(sk, SOCK_DEAD)) 123 if (!sock_flag(sk, SOCK_DEAD))