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  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 23 Jul 2012 07:36:52 +0000
From:	BALAKUMARAN KANNAN <balakumarank@...aelxsi.co.in>
To:	"netdev@...r.kernel.org" <netdev@...r.kernel.org>
Subject: flush cache according to 'preferred life time'

Hello all,
    I am running test casees for IPv6 conformation on linux-3.0.26 kernel. Here I am facing a problem in routing advertisement. Once test case sets the 'preferred life time' to 20 seconds for a particular destination. And continuously sending ICMP REQUEST. It is expected that the ICMP_REPLY should stop in 20 seconds. But as because the default gc_interval is 30seconds, even after the timer expiry of the route, it is staying in the router cache. So even after 20 seconds, the nut(node under test) sends ICMP_REPLY. So if I changes gc_interval to 1, the test is getting passed.

    But if I changes gc_interval to 1 seconds another test case in pmtu section fails. It expects that the nut should hold pmtu(path mtu) information for different value. So if I flushes the cache, the pmtu value is turning back to default.

    So I made the kernel to alter its gc_interval value according to the 'preferred life time' of the path. Here is my path. Kindly tell me whether my idea is correct. Am I missing something?

--------------------------------------------------------------------------------------
--- ../linux-3.0.y-BRANCH_SS-RT.git.fresh/net/ipv6/ndisc.c.bak  2012-07-23 12:50:46.000000000 +0530
+++ ../linux-3.0.y-BRANCH_SS-RT.git.fresh/net/ipv6/ndisc.c      2012-07-23 12:54:17.000000000 +0530
@@ -1160,6 +1160,9 @@
 
        __u8 * opt = (__u8 *)(ra_msg + 1);
 
+        struct net *net = dev_net(skb->dev);
+        fib6_run_gc(1, net);
+
        optlen = (skb->tail - skb->transport_header) - sizeof(struct ra_msg);
 
        if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL)) {
@@ -1200,6 +1203,22 @@
                return;
        }
 
+        if (*opt == 3) {
+                printk("<8> IN OPT 3\n");
+                struct net *net = dev_net(skb->dev);
+                fib6_run_gc(1, net);
+                int pref_life_time =  ntohl(*((int *) (((char *) (opt)) + 8)));
+                if ((pref_life_time != 0) && (pref_life_time < 50)) {
+                        printk("<8> gc_interval CHANGED\n");
+                        //init_net.ipv6.sysctl.flush_delay = 1;
+                        init_net.ipv6.sysctl.ip6_rt_gc_interval = 1 * HZ;
+                }
+                else {
+                        init_net.ipv6.sysctl.ip6_rt_gc_interval = 30 * HZ;
+                }
+
+        }
+
        if (!accept_ra(in6_dev))
                goto skip_linkparms;
--------------------------------------------------------------------------------------

Note: This is not well structured. I just created it for temparory solution. Just clarify me whether this idea is right.

And Please let me know why pmtu value is not stored in routing table but only in cache.

--
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ