lkml.org 
[lkml]   [2018]   [Aug]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 189/246] ipconfig: Correctly initialise ic_nameservers
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Chris Novakovic <chris@chrisn.me.uk>

    [ Upstream commit 300eec7c0a2495f771709c7642aa15f7cc148b83 ]

    ic_nameservers, which stores the list of name servers discovered by
    ipconfig, is initialised (i.e. has all of its elements set to NONE, or
    0xffffffff) by ic_nameservers_predef() in the following scenarios:

    - before the "ip=" and "nfsaddrs=" kernel command line parameters are
    parsed (in ip_auto_config_setup());
    - before autoconfiguring via DHCP or BOOTP (in ic_bootp_init()), in
    order to clear any values that may have been set after parsing "ip="
    or "nfsaddrs=" and are no longer needed.

    This means that ic_nameservers_predef() is not called when neither "ip="
    nor "nfsaddrs=" is specified on the kernel command line. In this
    scenario, every element in ic_nameservers remains set to 0x00000000,
    which is indistinguishable from ANY and causes pnp_seq_show() to write
    the following (bogus) information to /proc/net/pnp:

    #MANUAL
    nameserver 0.0.0.0
    nameserver 0.0.0.0
    nameserver 0.0.0.0

    This is potentially problematic for systems that blindly link
    /etc/resolv.conf to /proc/net/pnp.

    Ensure that ic_nameservers is also initialised when neither "ip=" nor
    "nfsaddrs=" are specified by calling ic_nameservers_predef() in
    ip_auto_config(), but only when ip_auto_config_setup() was not called
    earlier. This causes the following to be written to /proc/net/pnp, and
    is consistent with what gets written when ipconfig is configured
    manually but no name servers are specified on the kernel command line:

    #MANUAL

    Signed-off-by: Chris Novakovic <chris@chrisn.me.uk>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/ipv4/ipconfig.c | 13 +++++++++++++
    1 file changed, 13 insertions(+)

    --- a/net/ipv4/ipconfig.c
    +++ b/net/ipv4/ipconfig.c
    @@ -781,6 +781,11 @@ static void __init ic_bootp_init_ext(u8
    */
    static inline void __init ic_bootp_init(void)
    {
    + /* Re-initialise all name servers to NONE, in case any were set via the
    + * "ip=" or "nfsaddrs=" kernel command line parameters: any IP addresses
    + * specified there will already have been decoded but are no longer
    + * needed
    + */
    ic_nameservers_predef();

    dev_add_pack(&bootp_packet_type);
    @@ -1402,6 +1407,13 @@ static int __init ip_auto_config(void)
    int err;
    unsigned int i;

    + /* Initialise all name servers to NONE (but only if the "ip=" or
    + * "nfsaddrs=" kernel command line parameters weren't decoded, otherwise
    + * we'll overwrite the IP addresses specified there)
    + */
    + if (ic_set_manually == 0)
    + ic_nameservers_predef();
    +
    #ifdef CONFIG_PROC_FS
    proc_create("pnp", S_IRUGO, init_net.proc_net, &pnp_seq_fops);
    #endif /* CONFIG_PROC_FS */
    @@ -1622,6 +1634,7 @@ static int __init ip_auto_config_setup(c
    return 1;
    }

    + /* Initialise all name servers to NONE */
    ic_nameservers_predef();

    /* Parse string for static IP assignment. */

    \
     
     \ /
      Last update: 2018-08-01 20:14    [W:4.234 / U:0.452 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site