From 4c5fb71cd9b4a9da275b2b8aadd6b87893fddf33 Mon Sep 17 00:00:00 2001 From: Sebastian Harl Date: Wed, 1 Aug 2012 10:24:52 +0200 Subject: [PATCH] Added debian/patches/bts664724-rrdcached-j-segfault. Fixed segfault in rrdcached when starting without having the journal directory available: canonicalize the journal path after creating the directory; else, realpath(3) will return NULL causing strdup() to segfault. Also, check the return value of realpath(3) before further using it. Thanks to Helmut Grohne for reporting this. Closes: #664724 --- debian/changelog | 12 +++++++ debian/patches/bts664724-rrdcached-j-segfault | 31 +++++++++++++++++++ debian/patches/series | 1 + 3 files changed, 44 insertions(+) create mode 100644 debian/patches/bts664724-rrdcached-j-segfault diff --git a/debian/changelog b/debian/changelog index 8dfd223..513811e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,15 @@ +rrdtool (1.4.7-2) unstable; urgency=low + + * Ack NMUs; thanks to Jonathan Wiltshire and gregor herrmann! + * Added debian/patches/bts664724-rrdcached-j-segfault: + Fixed segfault in rrdcached when starting without having the journal + directory available: canonicalize the journal path after creating the + directory; else, realpath(3) will return NULL causing strdup() to + segfault. Also, check the return value of realpath(3) before further using + it. Thanks to Helmut Grohne for reporting this (Closes: #664724). + + -- Sebastian Harl Wed, 01 Aug 2012 10:23:39 +0200 + rrdtool (1.4.7-1.2) unstable; urgency=low * Non-maintainer upload. diff --git a/debian/patches/bts664724-rrdcached-j-segfault b/debian/patches/bts664724-rrdcached-j-segfault new file mode 100644 index 0000000..37f7548 --- /dev/null +++ b/debian/patches/bts664724-rrdcached-j-segfault @@ -0,0 +1,31 @@ +diff a/src/rrd_daemon.c b/src/rrd_daemon.c +--- a/src/rrd_daemon.c ++++ b/src/rrd_daemon.c +@@ -3090,8 +3090,7 @@ static int read_options (int argc, char **argv) /* {{{ */ + case 'j': + { + char journal_dir_actual[PATH_MAX]; +- const char *dir; +- dir = journal_dir = strdup(realpath((const char *)optarg, journal_dir_actual)); ++ const char *dir = (const char *)optarg; + + status = rrd_mkdir_p(dir, 0777); + if (status != 0) +@@ -3100,8 +3099,16 @@ static int read_options (int argc, char **argv) /* {{{ */ + dir, rrd_strerror(errno)); + return 6; + } ++ journal_dir = realpath((const char *)dir, journal_dir_actual); ++ if (! journal_dir) { ++ fprintf(stderr, "Failed to canonicalize journal directory '%s': %s\n", ++ dir, rrd_strerror(errno)); ++ return 6; ++ } ++ ++ journal_dir = strdup(journal_dir); + +- if (access(dir, R_OK|W_OK|X_OK) != 0) ++ if (access(journal_dir, R_OK|W_OK|X_OK) != 0) + { + fprintf(stderr, "Must specify a writable directory with -j! (%s)\n", + errno ? rrd_strerror(errno) : ""); diff --git a/debian/patches/series b/debian/patches/series index 863055e..76fd6d3 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -6,3 +6,4 @@ implicit-decl-fix bts530814-hurd tcl-8.5 ruby_bindings_format_string.patch +bts664724-rrdcached-j-segfault -- 2.30.2