Skip to contentSkip to conversation

Patch "ipv4: Fix non-initialized TTL when CONFIG_SYSCTL=n" has been added to the 4.6-stable tree

PATCH [email protected] 1 participant 1 message Jun 17, 2016

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

ipv4: Fix non-initialized TTL when CONFIG_SYSCTL=n

to the 4.6-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
ipv4-fix-non-initialized-ttl-when-config_sysctl-n.patch
and it can be found in the queue-4.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From foo@baz Fri Jun 17 08:34:39 PDT 2016

From: Ezequiel Garcia <[email protected]>
Date: Fri, 20 May 2016 13:21:10 -0300
Subject: ipv4: Fix non-initialized TTL when CONFIG_SYSCTL=n

From: Ezequiel Garcia <[email protected]>

[ Upstream commit 049bbf589ec651685205bd8ce73221fdd62345cf ]

Commit fa50d974d104 ("ipv4: Namespaceify ip_default_ttl sysctl knob") moves the default TTL assignment, and as side-effect IPv4 TTL now has a default value only if sysctl support is enabled (CONFIG_SYSCTL=y).

The sysctl_ip_default_ttl is fundamental for IP to work properly, as it provides the TTL to be used as default. The defautl TTL may be used in ip_selected_ttl, through the following flow:

ip_select_ttl

    ip4_dst_hoplimit
      net->ipv4.sysctl_ip_default_ttl

This commit fixes the issue by assigning net->ipv4.sysctl_ip_default_ttl in net_init_net, called during ipv4's initialization.

Without this commit, a kernel built without sysctl support will send all IP packets with zero TTL (unless a TTL is explicitly set, e.g. with setsockopt).

Given a similar issue might appear on the other knobs that were namespaceify, this commit also moves them.

Fixes fa50d974d104 ("ipv4: Namespaceify ip_default_ttl sysctl knob")
---
 net/ipv4/af_inet.c         |    8 ++++++++
 net/ipv4/sysctl_net_ipv4.c |    4 ----
 2 files changed, 8 insertions(+), 4 deletions(-)
net/ipv4/af_inet.c +8 -0
@@ -1660,6 +1660,14 @@ static __net_init int inet_init_net(stru
 	 */
 	net->ipv4.ping_group_range.range[0] = make_kgid(&init_user_ns, 1);
 	net->ipv4.ping_group_range.range[1] = make_kgid(&init_user_ns, 0);
+
+	/* Default values for sysctl-controlled parameters.
+	 * We set them here, in case sysctl is not compiled.
+	 */
+	net->ipv4.sysctl_ip_default_ttl = IPDEFTTL;
+	net->ipv4.sysctl_ip_dynaddr = 0;
+	net->ipv4.sysctl_ip_early_demux = 1;
+
 	return 0;
 }
 
net/ipv4/sysctl_net_ipv4.c +0 -4
@@ -988,10 +988,6 @@ static __net_init int ipv4_sysctl_init_n
 	if (!net->ipv4.sysctl_local_reserved_ports)
 		goto err_ports;
 
-	net->ipv4.sysctl_ip_default_ttl = IPDEFTTL;
-	net->ipv4.sysctl_ip_dynaddr = 0;
-	net->ipv4.sysctl_ip_early_demux = 1;
-
 	return 0;
 
 err_ports:

Patches currently in stable-queue which might be from [email protected] are

queue-4.6/ipv4-fix-non-initialized-ttl-when-config_sysctl-n.patch