diff options
author | Haishuang Yan <yanhaishuang@cmss.chinamobile.com> | 2016-04-03 10:09:23 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-04-04 16:00:28 -0400 |
commit | 5745b8232e942abd5e16e85fa9b27cc21324acf0 (patch) | |
tree | 1f4905726d49d18faf80fba0551455997f4417ee | |
parent | 05cf8077e54b20dddb756eaa26f3aeb5c38dd3cf (diff) |
ipv4: l2tp: fix a potential issue in l2tp_ip_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_ip.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c index ec22078b0914..42de4ccd159f 100644 --- a/net/l2tp/l2tp_ip.c +++ b/net/l2tp/l2tp_ip.c | |||
@@ -123,12 +123,11 @@ static int l2tp_ip_recv(struct sk_buff *skb) | |||
123 | struct l2tp_tunnel *tunnel = NULL; | 123 | struct l2tp_tunnel *tunnel = NULL; |
124 | int length; | 124 | int length; |
125 | 125 | ||
126 | /* Point to L2TP header */ | ||
127 | optr = ptr = skb->data; | ||
128 | |||
129 | if (!pskb_may_pull(skb, 4)) | 126 | if (!pskb_may_pull(skb, 4)) |
130 | goto discard; | 127 | goto discard; |
131 | 128 | ||
129 | /* Point to L2TP header */ | ||
130 | optr = ptr = skb->data; | ||
132 | session_id = ntohl(*((__be32 *) ptr)); | 131 | session_id = ntohl(*((__be32 *) ptr)); |
133 | ptr += 4; | 132 | ptr += 4; |
134 | 133 | ||
@@ -156,6 +155,9 @@ static int l2tp_ip_recv(struct sk_buff *skb) | |||
156 | if (!pskb_may_pull(skb, length)) | 155 | if (!pskb_may_pull(skb, length)) |
157 | goto discard; | 156 | goto discard; |
158 | 157 | ||
158 | /* Point to L2TP header */ | ||
159 | optr = ptr = skb->data; | ||
160 | ptr += 4; | ||
159 | pr_debug("%s: ip recv\n", tunnel->name); | 161 | pr_debug("%s: ip recv\n", tunnel->name); |
160 | print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, ptr, length); | 162 | print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, ptr, length); |
161 | } | 163 | } |