| From 00ea1ceebe0d9f2dc1cc2b7bd575a00100c27869 Mon Sep 17 00:00:00 2001 |
| From: Willem de Bruijn <willemb@google.com> |
| Date: Sat, 18 Feb 2017 19:00:45 -0500 |
| Subject: ipv6: release dst on error in ip6_dst_lookup_tail |
| |
| From: Willem de Bruijn <willemb@google.com> |
| |
| commit 00ea1ceebe0d9f2dc1cc2b7bd575a00100c27869 upstream. |
| |
| If ip6_dst_lookup_tail has acquired a dst and fails the IPv4-mapped |
| check, release the dst before returning an error. |
| |
| Fixes: ec5e3b0a1d41 ("ipv6: Inhibit IPv4-mapped src address on the wire.") |
| Signed-off-by: Willem de Bruijn <willemb@google.com> |
| Acked-by: Eric Dumazet <edumazet@google.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Cc: Ben Hutchings <ben.hutchings@codethink.co.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| net/ipv6/ip6_output.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/net/ipv6/ip6_output.c |
| +++ b/net/ipv6/ip6_output.c |
| @@ -961,8 +961,10 @@ static int ip6_dst_lookup_tail(struct so |
| } |
| #endif |
| if (ipv6_addr_v4mapped(&fl6->saddr) && |
| - !(ipv6_addr_v4mapped(&fl6->daddr) || ipv6_addr_any(&fl6->daddr))) |
| - return -EAFNOSUPPORT; |
| + !(ipv6_addr_v4mapped(&fl6->daddr) || ipv6_addr_any(&fl6->daddr))) { |
| + err = -EAFNOSUPPORT; |
| + goto out_err_release; |
| + } |
| |
| return 0; |
| |