[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 16/17] blockdev: Error out on negative throttling opt
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 16/17] blockdev: Error out on negative throttling option values |
Date: |
Wed, 20 Jan 2016 17:25:05 +0100 |
From: Fam Zheng <address@hidden>
extract_common_blockdev_options() uses qemu_opt_get_number() to parse
the bps/iops numbers to uint64_t, then converts to double and stores in
ThrottleConfig. The actual parsing is done by strtoull() in
parse_option_number(). Negative numbers are wrapped to large positive
ones, and stored.
We used to reject negative numbers since 7d81c1413c9, but this regressed
when the option parsing code was changed later. Now fix this again.
This time, define an arbitrary large upper limit (1e15), and check the
values so both negative and impractically big numbers are caught and
reported.
Signed-off-by: Fam Zheng <address@hidden>
Reviewed-by: Markus Armbruster <address@hidden>
Reviewed-by: Alberto Garcia <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
blockdev.c | 3 ++-
include/qemu/throttle.h | 2 ++
util/throttle.c | 16 ++++++----------
3 files changed, 10 insertions(+), 11 deletions(-)
diff --git a/blockdev.c b/blockdev.c
index 1392fff..07cfe25 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -348,7 +348,8 @@ static bool check_throttle_config(ThrottleConfig *cfg,
Error **errp)
}
if (!throttle_is_valid(cfg)) {
- error_setg(errp, "bps/iops/maxs values must be 0 or greater");
+ error_setg(errp, "bps/iops/max values must be within [0, %lld]",
+ THROTTLE_VALUE_MAX);
return false;
}
diff --git a/include/qemu/throttle.h b/include/qemu/throttle.h
index 12faaad..d0c98ed 100644
--- a/include/qemu/throttle.h
+++ b/include/qemu/throttle.h
@@ -29,6 +29,8 @@
#include "qemu-common.h"
#include "qemu/timer.h"
+#define THROTTLE_VALUE_MAX 1000000000000000LL
+
typedef enum {
THROTTLE_BPS_TOTAL,
THROTTLE_BPS_READ,
diff --git a/util/throttle.c b/util/throttle.c
index 1113671..af4bc95 100644
--- a/util/throttle.c
+++ b/util/throttle.c
@@ -282,22 +282,18 @@ bool throttle_conflicting(ThrottleConfig *cfg)
*/
bool throttle_is_valid(ThrottleConfig *cfg)
{
- bool invalid = false;
int i;
for (i = 0; i < BUCKETS_COUNT; i++) {
- if (cfg->buckets[i].avg < 0) {
- invalid = true;
+ if (cfg->buckets[i].avg < 0 ||
+ cfg->buckets[i].max < 0 ||
+ cfg->buckets[i].avg > THROTTLE_VALUE_MAX ||
+ cfg->buckets[i].max > THROTTLE_VALUE_MAX) {
+ return false;
}
}
- for (i = 0; i < BUCKETS_COUNT; i++) {
- if (cfg->buckets[i].max < 0) {
- invalid = true;
- }
- }
-
- return !invalid;
+ return true;
}
/* check if bps_max/iops_max is used without bps/iops
--
1.8.3.1
- [Qemu-devel] [PULL 04/17] qemu-iotests: Reduce racy output in 028, (continued)
- [Qemu-devel] [PULL 04/17] qemu-iotests: Reduce racy output in 028, Kevin Wolf, 2016/01/20
- [Qemu-devel] [PULL 09/17] block: Fix error path in bdrv_invalidate_cache(), Kevin Wolf, 2016/01/20
- [Qemu-devel] [PULL 06/17] qcow2: Write feature table only for v3 images, Kevin Wolf, 2016/01/20
- [Qemu-devel] [PULL 10/17] block: Rename BDRV_O_INCOMING to BDRV_O_INACTIVE, Kevin Wolf, 2016/01/20
- [Qemu-devel] [PULL 13/17] qcow2: Fix BDRV_O_INACTIVE handling in qcow2_invalidate_cache(), Kevin Wolf, 2016/01/20
- [Qemu-devel] [PULL 12/17] qcow2: Implement .bdrv_inactivate, Kevin Wolf, 2016/01/20
- [Qemu-devel] [PULL 15/17] vmdk: Create streamOptimized as version 3, Kevin Wolf, 2016/01/20
- [Qemu-devel] [PULL 14/17] qcow2: Make image inaccessible after failed qcow2_invalidate_cache(), Kevin Wolf, 2016/01/20
- [Qemu-devel] [PULL 17/17] iotests: Test that throttle values ranges, Kevin Wolf, 2016/01/20
- [Qemu-devel] [PULL 16/17] blockdev: Error out on negative throttling option values,
Kevin Wolf <=
- [Qemu-devel] [PULL 05/17] block: Clean up includes, Kevin Wolf, 2016/01/20
- [Qemu-devel] [PULL 11/17] block: Inactivate BDS when migration completes, Kevin Wolf, 2016/01/20
- Re: [Qemu-devel] [PULL 00/17] Block patches, Peter Maydell, 2016/01/21