diff options
author | Haishuang Yan <yanhaishuang@cmss.chinamobile.com> | 2016-04-03 10:09:24 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-04-04 16:00:28 -0400 |
commit | be447f305494e019dfc37ea4cdf3b0e4200b4eba (patch) | |
tree | 7bfc596ff99287a234d6c116d36aa66bc1ff4764 | |
parent | 5745b8232e942abd5e16e85fa9b27cc21324acf0 (diff) |
ipv6: l2tp: fix a potential issue in l2tp_ip6_recv
pskb_may_pull() can change skb->data, so we have to load ptr/optr at the
right place.
Signed-off-by: Haishuang Yan <yanhaishuang@cmss.chinamobile.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/l2tp/l2tp_ip6.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c index 6b54ff3ff4cb..cd479903d943 100644 --- a/net/l2tp/l2tp_ip6.c +++ b/net/l2tp/l2tp_ip6.c | |||
@@ -136,12 +136,11 @@ static int l2tp_ip6_recv(struct sk_buff *skb) | |||
136 | struct l2tp_tunnel *tunnel = NULL; | 136 | struct l2tp_tunnel *tunnel = NULL; |
137 | int length; | 137 | int length; |
138 | 138 | ||
139 | /* Point to L2TP header */ | ||
140 | optr = ptr = skb->data; | ||
141 | |||
142 | if (!pskb_may_pull(skb, 4)) | 139 | if (!pskb_may_pull(skb, 4)) |
143 | goto discard; | 140 | goto discard; |
144 | 141 | ||
142 | /* Point to L2TP header */ | ||
143 | optr = ptr = skb->data; | ||
145 | session_id = ntohl(*((__be32 *) ptr)); | 144 | session_id = ntohl(*((__be32 *) ptr)); |
146 | ptr += 4; | 145 | ptr += 4; |
147 | 146 | ||
@@ -169,6 +168,9 @@ static int l2tp_ip6_recv(struct sk_buff *skb) | |||
169 | if (!pskb_may_pull(skb, length)) | 168 | if (!pskb_may_pull(skb, length)) |
170 | goto discard; | 169 | goto discard; |
171 | 170 | ||
171 | /* Point to L2TP header */ | ||
172 | optr = ptr = skb->data; | ||
173 | ptr += 4; | ||
172 | pr_debug("%s: ip recv\n", tunnel->name); | 174 | pr_debug("%s: ip recv\n", tunnel->name); |
173 | print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, ptr, length); | 175 | print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, ptr, length); |
174 | } | 176 | } |