diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-04-27 12:26:46 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-04-27 12:26:46 -0400 |
commit | 15c54033964a943de7b0763efd3bd0ede7326395 (patch) | |
tree | 840b292612d1b5396d5bab5bde537a9013db3ceb /net/x25/x25_in.c | |
parent | ad5da3cf39a5b11a198929be1f2644e17ecd767e (diff) | |
parent | 912a41a4ab935ce8c4308428ec13fc7f8b1f18f4 (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.c | 14 |
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)) |