Linux Kernel: netpoll: fix netconsole IPv6 setup

Posted on In Linux, Linux Kernel

This change “netpoll: fix netconsole IPv6 setup” (commit 00fe11b) in Linux kernel is authored by Sabrina Dubroca <sd [at] queasysnail.net> on Thu Feb 6 18:34:12 2014 +0100.

Description of “netpoll: fix netconsole IPv6 setup”

The change “netpoll: fix netconsole IPv6 setup” introduces changes as follows.

netpoll: fix netconsole IPv6 setup

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>

Linux kernel code changes from “netpoll: fix netconsole IPv6 setup”

There are 4 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 net/core/netpoll.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/net/core/netpoll.c b/net/core/netpoll.c
index c03f3dec4763..a664f7829a6d 100644
--- a/net/core/netpoll.c
+++ b/net/core/netpoll.c
@@ -948,6 +948,7 @@ int netpoll_parse_options(struct netpoll *np, char *opt)
 {
    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 *np, char *opt)
    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 *np, char *opt)
    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;

The commit for this change in Linux stable tree is 00fe11b (patch).

Leave a Reply

Your email address will not be published. Required fields are marked *