lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 24 Jan 2014 23:49:59 +0200 (EET) From: Julian Anastasov <ja@....bg> To: Sergey Popovich <popovich_sergei@...l.ru> cc: netdev@...r.kernel.org Subject: Re: [PATCH 4/4 v3] ipv4: mark nexthop as dead when it's subnet becomes unreachable Hello, On Fri, 24 Jan 2014, Sergey Popovich wrote: > -int fib_sync_down_dev(struct net_device *dev, int force) > +static inline bool fib_sync_down_gw(struct fib_nh *nh, > + struct in_ifaddr *ifr) > +{ > + if (!ifr) > + return true; > + > + if (nh->nh_flags & RTNH_F_ONLINK) > + return false; > + > + if (!inet_ifa_match(nh->nh_gw, ifr)) > + return false; > + You need to walk subnets here, not IPs, so for_primary_ifa() instead of for_ifa() will save some cycles. But for me such change still looks expensive and does not fix the root of the problem: - You fix the problem from IP address point of view. The actual problem is that subnet is removed, i.e. it is the route removal that is making GWs unreachable. I can ip route delete some link route and cause GWs to become unreachable. - not sure that walking the ifa_list is a fast operation - sadly, the NHs can not survive the secondary address promotion as done in __inet_del_ifa(). You can have additional optimization in fib_del_ifaddr() while calling fib_sync_down_dev(): do nothing if secondary address is deleted because its subnet (primary address) should be present. For example: if (fib_sync_down_addr(dev_net(dev), ifa->ifa_local) | (!(ifa->ifa_flags & IFA_F_SECONDARY) && fib_sync_down_dev(dev, ifa, 0))) > + for_ifa(ifr->ifa_dev) { Below ifa == ifr check will not be needed when for_primary_ifa() is used or when fib_sync_down_dev() is called only for primary IPs. We can see some ifr in the list only if it is secondary IP deleted during the promotion process. Without promotion, the primary/secondary ifa is unlinked before the NETDEV_DOWN notification and we do not see it here. > + if (unlikely(ifa == ifr)) > + continue; > + if (inet_ifa_match(nh->nh_gw, ifa)) > + return false; > + } endfor_ifa(ifr->ifa_dev); > + > + return true; Regards -- Julian Anastasov <ja@....bg> -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists