From 316e61ab3066bb6677b372b4de04e9eaa3159489 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Thu, 1 Jul 2010 00:12:25 +0000 Subject: [PATCH] ipv6: Fix a couple of bugs affecting temporary address lifetimes svn path=/dists/sid/linux-2.6/; revision=15919 --- debian/changelog | 3 ++ ...reported-valid_lft-to-a-minimum-of-0.patch | 39 ++++++++++++++ ...ipv6-Use-interface-max_desync_factor.patch | 52 +++++++++++++++++++ debian/patches/series/16 | 2 + 4 files changed, 96 insertions(+) create mode 100644 debian/patches/bugfix/all/ipv6-Clamp-reported-valid_lft-to-a-minimum-of-0.patch create mode 100644 debian/patches/bugfix/all/ipv6-Use-interface-max_desync_factor.patch diff --git a/debian/changelog b/debian/changelog index 79f5ff385..b1df5e640 100644 --- a/debian/changelog +++ b/debian/changelog @@ -39,6 +39,9 @@ linux-2.6 (2.6.32-16) UNRELEASED; urgency=low * linux-base: If the disk ID update process fails, give the user a chance to retry or change their answers (Closes: #585609) * asix: fix setting mac address for AX88772 (Closes: #587580) + * ipv6: Clamp reported valid_lft to a minimum of 0 (Closes: #514644) + * ipv6: Use interface max_desync_factor instead of static default + (Closes: #514646) [ Aurelien Jarno ] * [sh4] fix sh_tmu clocksource following recent nohz changes. diff --git a/debian/patches/bugfix/all/ipv6-Clamp-reported-valid_lft-to-a-minimum-of-0.patch b/debian/patches/bugfix/all/ipv6-Clamp-reported-valid_lft-to-a-minimum-of-0.patch new file mode 100644 index 000000000..44a02ad98 --- /dev/null +++ b/debian/patches/bugfix/all/ipv6-Clamp-reported-valid_lft-to-a-minimum-of-0.patch @@ -0,0 +1,39 @@ +Subject: [PATCH 1/2] ipv6: Clamp reported valid_lft to a minimum of 0 +From: Ben Hutchings +Date: Sat, 26 Jun 2010 22:37:47 +0100 + +commit f56619fc72407561b00c52244a2caa53d730bc4a upstream. + +Since addresses are only revalidated every 2 minutes, the reported +valid_lft can underflow shortly before the address is deleted. +Clamp it to a minimum of 0, as for prefered_lft. + +Reported-by: Piotr Lewandowski +Signed-off-by: Ben Hutchings +Signed-off-by: David S. Miller +--- + net/ipv6/addrconf.c | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c +index b97bb1f..1459eed 100644 +--- a/net/ipv6/addrconf.c ++++ b/net/ipv6/addrconf.c +@@ -3492,8 +3492,12 @@ static int inet6_fill_ifaddr(struct sk_buff *skb, struct inet6_ifaddr *ifa, + preferred -= tval; + else + preferred = 0; +- if (valid != INFINITY_LIFE_TIME) +- valid -= tval; ++ if (valid != INFINITY_LIFE_TIME) { ++ if (valid > tval) ++ valid -= tval; ++ else ++ valid = 0; ++ } + } + } else { + preferred = INFINITY_LIFE_TIME; +-- +1.7.1 + diff --git a/debian/patches/bugfix/all/ipv6-Use-interface-max_desync_factor.patch b/debian/patches/bugfix/all/ipv6-Use-interface-max_desync_factor.patch new file mode 100644 index 000000000..bce83387d --- /dev/null +++ b/debian/patches/bugfix/all/ipv6-Use-interface-max_desync_factor.patch @@ -0,0 +1,52 @@ +Subject: [PATCH 2/2] ipv6: Use interface max_desync_factor instead of static default +From: Ben Hutchings +Date: Sat, 26 Jun 2010 22:42:56 +0100 + +commit 784e2710ce3588d8316dc8efac9ecbebaeaf7c35 upstream. + +max_desync_factor can be configured per-interface, but nothing is +using the value. + +Reported-by: Piotr Lewandowski +Signed-off-by: Ben Hutchings +Signed-off-by: David S. Miller +--- + net/ipv6/addrconf.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c +index 1459eed..ec8c92f 100644 +--- a/net/ipv6/addrconf.c ++++ b/net/ipv6/addrconf.c +@@ -121,8 +121,6 @@ static inline void addrconf_sysctl_unregister(struct inet6_dev *idev) + static int __ipv6_regen_rndid(struct inet6_dev *idev); + static int __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpaddr); + static void ipv6_regen_rndid(unsigned long data); +- +-static int desync_factor = MAX_DESYNC_FACTOR * HZ; + #endif + + static int ipv6_generate_eui64(u8 *eui, struct net_device *dev); +@@ -890,7 +888,8 @@ retry: + idev->cnf.temp_valid_lft); + tmp_prefered_lft = min_t(__u32, + ifp->prefered_lft, +- idev->cnf.temp_prefered_lft - desync_factor / HZ); ++ idev->cnf.temp_prefered_lft - ++ idev->cnf.max_desync_factor); + tmp_plen = ifp->prefix_len; + max_addresses = idev->cnf.max_addresses; + tmp_cstamp = ifp->cstamp; +@@ -1650,7 +1649,8 @@ static void ipv6_regen_rndid(unsigned long data) + + expires = jiffies + + idev->cnf.temp_prefered_lft * HZ - +- idev->cnf.regen_max_retry * idev->cnf.dad_transmits * idev->nd_parms->retrans_time - desync_factor; ++ idev->cnf.regen_max_retry * idev->cnf.dad_transmits * idev->nd_parms->retrans_time - ++ idev->cnf.max_desync_factor * HZ; + if (time_before(expires, jiffies)) { + printk(KERN_WARNING + "ipv6_regen_rndid(): too short regeneration interval; timer disabled for %s.\n", +-- +1.7.1 + diff --git a/debian/patches/series/16 b/debian/patches/series/16 index c4f669390..4a9c29d7a 100644 --- a/debian/patches/series/16 +++ b/debian/patches/series/16 @@ -161,3 +161,5 @@ + bugfix/all/3c59x-Use-fine-grained-locks-for-MII-and-windowed-regs.patch + bugfix/x86/Revert-tpm-autoload-tpm_tis-based-on-system-PnP-IDs.patch + bugfix/all/asix-fix-setting-mac-address-for-AX88772.patch ++ bugfix/all/ipv6-Clamp-reported-valid_lft-to-a-minimum-of-0.patch ++ bugfix/all/ipv6-Use-interface-max_desync_factor.patch