2011/5/18 Daniel Veillard <veillard(a)redhat.com>:
On Wed, May 18, 2011 at 12:21:09PM +0200, Matthias Bolte wrote:
> params and nparams are essential and cannot be NULL. Check this in
> libvirt.c and remove redundant checks from the drivers (e.g. xend).
>
> Instead of enforcing that nparams must point to exact same value as
> returned by virDomainGetSchedulerType relax this to a lower bound
> check. This is what some drivers (e.g. xen hypervisor and esx)
> already did. Other drivers (e.g. xend) didn't check nparams at all
> and assumed that there is enough space in params.
>
> Unify the behavior in all drivers to a lower bound check and update
> nparams to the number of valid values in params on success.
[...]
> - * Get the scheduler parameters, the @params array will be filled with the
> - * values.
> + * Get all scheduler parameters, the @params array will be filled with the
> + * values and @nparams will be updated to the number of valid elements in
> + * @params.
> *
> * Returns -1 in case of error, 0 in case of success.
> */
> @@ -5041,6 +5042,12 @@ virDomainGetSchedulerParameters(virDomainPtr domain,
> virDispatchError(NULL);
> return -1;
> }
> +
> + if (params == NULL || nparams == NULL || *nparams < 0) {
Hum, what would *nparams == 0 mean ? The arry pointer has to be
allocated anyway.
Maybe we should use *nparams <= 0 here
True, I changed that before pushing the whole series.
> + virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
> + goto error;
> + }
> +
> conn = domain->conn;
>
> if (conn->driver->domainGetSchedulerParameters) {
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index 6b2d806..b85c743 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -2466,7 +2466,7 @@ libxlDomainGetSchedulerParameters(virDomainPtr dom,
virSchedParameterPtr params,
> goto cleanup;
> }
>
> - if (*nparams != XEN_SCHED_CREDIT_NPARAM) {
> + if (*nparams < XEN_SCHED_CREDIT_NPARAM) {
> libxlError(VIR_ERR_INVALID_ARG, "%s", _("Invalid parameter
count"));
> goto cleanup;
> }
> @@ -2494,6 +2494,7 @@ libxlDomainGetSchedulerParameters(virDomainPtr dom,
virSchedParameterPtr params,
> goto cleanup;
> }
>
> + *nparams = XEN_SCHED_CREDIT_NPARAM;
> ret = 0;
>
> cleanup:
> diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
> index 2bb592d..a65299b 100644
> --- a/src/lxc/lxc_driver.c
> +++ b/src/lxc/lxc_driver.c
> @@ -2234,7 +2234,7 @@ static int lxcGetSchedulerParameters(virDomainPtr domain,
> if (driver->cgroup == NULL)
> return -1;
>
> - if ((*nparams) != 1) {
> + if (*nparams < 1) {
which is what we are doing here and in all the drivers.
ACK, with that nit
Daniel
Matthias