From: Denis Vlasenko Date: Thu, 8 Jan 2009 03:35:47 +0000 (-0000) Subject: sysctl: fix another corner case with "dots and slashes" X-Git-Tag: 1_14_0~374 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=501b0e335f33d6fa7c7bb5063f7be80281b0f698;p=oweals%2Fbusybox.git sysctl: fix another corner case with "dots and slashes" --- diff --git a/procps/sysctl.c b/procps/sysctl.c index 262574e61..d59e2690a 100644 --- a/procps/sysctl.c +++ b/procps/sysctl.c @@ -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;