sysctl: fix another corner case with "dots and slashes"
authorDenis Vlasenko <vda.linux@googlemail.com>
Thu, 8 Jan 2009 03:35:47 +0000 (03:35 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Thu, 8 Jan 2009 03:35:47 +0000 (03:35 -0000)
procps/sysctl.c

index 262574e61e63723ee2775868371197fede43cb50..d59e2690ace2360a484730bb1d12d50410c9e909 100644 (file)
@@ -233,6 +233,12 @@ static void sysctl_dots_to_slashes(char *name)
         * we replaced even one . -> /, start over again,
         * but never replace dots before the position
         * where last replacement occurred.
+        *
+        * Another bug we later had is that
+        * net.ipv4.conf.eth0.100
+        * (without .mc_forwarding) was mishandled.
+        *
+        * To set up testing: modprobe 8021q; vconfig add eth0 100
         */
        end = name + strlen(name);
        last_good = name - 1;
@@ -245,8 +251,8 @@ static void sysctl_dots_to_slashes(char *name)
                        *cptr = '\0';
                        //bb_error_msg("trying:'%s'", name);
                        if (access(name, F_OK) == 0) {
-                               *cptr = '/';
-                               *end = '\0'; /* prevent trailing '/' */
+                               if (cptr != end) /* prevent trailing '/' */
+                                       *cptr = '/';
                                //bb_error_msg("replaced:'%s'", name);
                                last_good = cptr;
                                goto again;