daemon: Fix crash in virTypedParameterArrayClear
authorJiri Denemark <jdenemar@redhat.com>
Mon, 30 Jul 2012 10:14:54 +0000 (12:14 +0200)
committerEric Blake <eblake@redhat.com>
Wed, 1 Aug 2012 22:28:53 +0000 (16:28 -0600)
commit45d6729f98e9842b139b809078d43f1f7a8c779b
treee6e41c5b37b922f4f243c136ffb823647c9b3fff
parent56f97e14abd7dcb033958ee0d707ac917cbfb7bb
daemon: Fix crash in virTypedParameterArrayClear

CVE-2012-3445, https://bugzilla.redhat.com/show_bug.cgi?id=844745

Daemon uses the following pattern when dispatching APIs with typed
parameters:

    VIR_ALLOC_N(params, nparams);
    virDomain*(dom, params, &nparams, flags);
    virTypedParameterArrayClear(params, nparams);

In case nparams was originally set to 0, virDomain* API would fill it
with the number of typed parameters it can provide and we would use this
number (rather than zero) to clear params. Because VIR_ALLOC* returns
non-NULL pointer even if size is 0, the code would end up walking
through random memory. If we were lucky enough and the memory contained
7 (VIR_TYPED_PARAM_STRING) at the right place, we would try to free a
random pointer and crash.

Let's make sure params stays NULL when nparams is 0.
(cherry picked from commit 6039a2cb49c8af4c68460d2faf365a7e1c686c7b)
daemon/remote.c