]> granicus.if.org Git - procps-ng/commitdiff
sysctl: avoid crash when -p file has unexpected input
authorSami Kerola <kerolasa@iki.fi>
Thu, 3 May 2012 18:08:27 +0000 (20:08 +0200)
committerSami Kerola <kerolasa@iki.fi>
Mon, 7 May 2012 07:01:10 +0000 (09:01 +0200)
Commit e01765d30b7c4767868d5379fbfb36d1dc15eba4 added is_deprecated(), which
crashed when user had input without without /proc/sys/ subdirectory.  The below
should illustrate how exactly the bug got to be trickered.

$ cat ~/foo
cause = crash
$ ./sysctl -p ~/foo
Segmentation fault

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
sysctl.c

index 92351706daff6f52b38bd4ee177078f2a862d36e..cfe13985437b4fde3ef05d7a0b1fcf97d924e3e1 100644 (file)
--- a/sysctl.c
+++ b/sysctl.c
@@ -359,6 +359,8 @@ static int WriteSetting(const char *setting)
        const char *equals;
        char *tmpname;
        char *outname;
+       char *last_dot;
+
        FILE *fp;
        struct stat ts;
 
@@ -396,7 +398,8 @@ static int WriteSetting(const char *setting)
        outname[equals - name] = 0;
        /* change / to . */
        slashdot(outname, '/', '.');
-       if(is_deprecated(strrchr(outname, '.') + 1)) {
+       last_dot = strrchr(outname, '.');
+       if (last_dot != NULL && is_deprecated(last_dot + 1)) {
                xwarnx(_("%s is deprecated, value not set"), outname);
                goto out;
         }