virsh: check if domiftune parameters fit into UINT

We parse the bandwidth rates as unsinged long long,
then try to fit them in VIR_TYPED_PARAM_UINT.

Report an error if they exceed UINT_MAX instead of
quietly using wrong values.

https://bugzilla.redhat.com/show_bug.cgi?id=1043735
This commit is contained in:
Ján Tomko 2014-06-26 10:06:57 +02:00
parent 4a85bf3e2f
commit ee668206cd

View File

@ -2686,6 +2686,14 @@ cmdDomIftune(vshControl *ctl, const vshCmd *cmd)
vshError(ctl, _("inbound format is incorrect"));
goto cleanup;
}
/* we parse the rate as unsigned long long, but the API
* only accepts UINT */
if (inbound.average > UINT_MAX || inbound.peak > UINT_MAX ||
inbound.burst > UINT_MAX) {
vshError(ctl, _("inbound rate larger than maximum %u"),
UINT_MAX);
goto cleanup;
}
if (inbound.average == 0 && (inbound.burst || inbound.peak)) {
vshError(ctl, _("inbound average is mandatory"));
goto cleanup;
@ -2714,6 +2722,12 @@ cmdDomIftune(vshControl *ctl, const vshCmd *cmd)
vshError(ctl, _("outbound format is incorrect"));
goto cleanup;
}
if (outbound.average > UINT_MAX || outbound.peak > UINT_MAX ||
outbound.burst > UINT_MAX) {
vshError(ctl, _("outbound rate larger than maximum %u"),
UINT_MAX);
goto cleanup;
}
if (outbound.average == 0 && (outbound.burst || outbound.peak)) {
vshError(ctl, _("outbound average is mandatory"));
goto cleanup;