aboutsummaryrefslogtreecommitdiffstats
path: root/net/x25/x25_in.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-04-27 12:26:46 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-04-27 12:26:46 -0400
commit15c54033964a943de7b0763efd3bd0ede7326395 (patch)
tree840b292612d1b5396d5bab5bde537a9013db3ceb /net/x25/x25_in.c
parentad5da3cf39a5b11a198929be1f2644e17ecd767e (diff)
parent912a41a4ab935ce8c4308428ec13fc7f8b1f18f4 (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: (448 commits) [IPV4] nl_fib_lookup: Initialise res.r before fib_res_put(&res) [IPV6]: Fix thinko in ipv6_rthdr_rcv() changes. [IPV4]: Add multipath cached to feature-removal-schedule.txt [WIRELESS] cfg80211: Clarify locking comment. [WIRELESS] cfg80211: Fix locking in wiphy_new. [WEXT] net_device: Don't include wext bits if not required. [WEXT]: Misc code cleanups. [WEXT]: Reduce inline abuse. [WEXT]: Move EXPORT_SYMBOL statements where they belong. [WEXT]: Cleanup early ioctl call path. [WEXT]: Remove options. [WEXT]: Remove dead debug code. [WEXT]: Clean up how wext is called. [WEXT]: Move to net/wireless [AFS]: Eliminate cmpxchg() usage in vlocation code. [RXRPC]: Fix pointers passed to bitops. [RXRPC]: Remove bogus atomic_* overrides. [AFS]: Fix u64 printing in debug logging. [AFS]: Add "directory write" support. [AFS]: Implement the CB.InitCallBackState3 operation. ...
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))