]> git.tue.mpg.de Git - dss.git/commitdiff
Reject insane number of intervals.
authorAndre Noll <maan@systemlinux.org>
Sun, 28 Oct 2012 19:11:16 +0000 (20:11 +0100)
committerAndre Noll <maan@systemlinux.org>
Sun, 28 Oct 2012 19:11:16 +0000 (20:11 +0100)
Nobody needs more than 2^30 snapshots. More importantly, values
larger than 32 for --num_intervals cause an integer overflow in
desired_number_of_snapshots() because the number of snapshots in
interval zero does not fit in an unsigned int in this case.

This patch adds a test to check_config() that rejects values larger
than 30 for the --num_intervals option.

Many thanks to Klaus Kopec for pointing out this bug.

dss.c

diff --git a/dss.c b/dss.c
index 7620cfee1733d55ef99baaf956e11089db9b40d6..258cd3fe862054298f078e6815d152bdd56f162d 100644 (file)
--- a/dss.c
+++ b/dss.c
@@ -932,8 +932,9 @@ static int check_config(void)
                return -E_INVALID_NUMBER;
        }
        DSS_DEBUG_LOG(("unit interval: %i day(s)\n", conf.unit_interval_arg));
-       if (conf.num_intervals_arg <= 0) {
-               DSS_ERROR_LOG(("bad number of intervals  %i\n", conf.num_intervals_arg));
+       if (conf.num_intervals_arg <= 0 || conf.num_intervals_arg > 30) {
+               DSS_ERROR_LOG(("bad number of intervals: %i\n",
+                       conf.num_intervals_arg));
                return -E_INVALID_NUMBER;
        }
        DSS_DEBUG_LOG(("number of intervals: %i\n", conf.num_intervals_arg));