| From foo@baz Thu Feb 27 20:11:26 PST 2014 |
| From: Sabrina Dubroca <sd@queasysnail.net> |
| Date: Thu, 6 Feb 2014 18:34:12 +0100 |
| Subject: netpoll: fix netconsole IPv6 setup |
| |
| From: Sabrina Dubroca <sd@queasysnail.net> |
| |
| [ Upstream commit 00fe11b3c67dc670fe6391d22f1fe64e7c99a8ec ] |
| |
| Currently, to make netconsole start over IPv6, the source address |
| needs to be specified. Without a source address, netpoll_parse_options |
| assumes we're setting up over IPv4 and the destination IPv6 address is |
| rejected. |
| |
| Check if the IP version has been forced by a source address before |
| checking for a version mismatch when parsing the destination address. |
| |
| Signed-off-by: Sabrina Dubroca <sd@queasysnail.net> |
| Acked-by: Cong Wang <cwang@twopensource.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/core/netpoll.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/net/core/netpoll.c |
| +++ b/net/core/netpoll.c |
| @@ -948,6 +948,7 @@ int netpoll_parse_options(struct netpoll |
| { |
| char *cur=opt, *delim; |
| int ipv6; |
| + bool ipversion_set = false; |
| |
| if (*cur != '@') { |
| if ((delim = strchr(cur, '@')) == NULL) |
| @@ -960,6 +961,7 @@ int netpoll_parse_options(struct netpoll |
| cur++; |
| |
| if (*cur != '/') { |
| + ipversion_set = true; |
| if ((delim = strchr(cur, '/')) == NULL) |
| goto parse_failed; |
| *delim = 0; |
| @@ -1002,7 +1004,7 @@ int netpoll_parse_options(struct netpoll |
| ipv6 = netpoll_parse_ip_addr(cur, &np->remote_ip); |
| if (ipv6 < 0) |
| goto parse_failed; |
| - else if (np->ipv6 != (bool)ipv6) |
| + else if (ipversion_set && np->ipv6 != (bool)ipv6) |
| goto parse_failed; |
| else |
| np->ipv6 = (bool)ipv6; |