[libvirt] [PATCH] qemuTestDriverInit: Don't access live data

Martin Kletzander mkletzan at redhat.com
Wed Mar 8 14:56:55 UTC 2017


On Wed, Mar 08, 2017 at 10:48:15AM +0100, Michal Privoznik wrote:
>On 03/08/2017 10:15 AM, Martin Kletzander wrote:
>> On Mon, Mar 06, 2017 at 08:38:00AM +0100, Michal Privoznik wrote:
>>> Some of our tests (e.g. qemuhotplugtest) call
>>> virDomainSaveConfig(). Now the problem is, qemuTestDriverInit()
>>> creates a fake qemu driver and fills it with some fake
>>> configuration. At least so we hoped. The truth is, it calls
>>> regular virQEMUDriverConfigNew() and then fix couple of paths.
>>> Literally. Therefore our tests see regular stateDir and configDir
>>> for the user that is running the tests. Directories, where live
>>> domain XMLs are stored. Let's just hope our test suite hasn't
>>> mangled any of them.
>>>
>>> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>>> ---
>>> tests/testutilsqemu.c | 34 ++++++++++++++++++++++++++++++++++
>>> 1 file changed, 34 insertions(+)
>>>
>>> diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
>>> index 56a89c913..0726cd317 100644
>>> --- a/tests/testutilsqemu.c
>>> +++ b/tests/testutilsqemu.c
>>> @@ -513,6 +513,10 @@ qemuTestParseCapabilities(virCapsPtr caps,
>>> void qemuTestDriverFree(virQEMUDriver *driver)
>>> {
>>>     virMutexDestroy(&driver->lock);
>>> +    if (driver->config) {
>>> +        virFileDeleteTree(driver->config->stateDir);
>>> +        virFileDeleteTree(driver->config->configDir);
>>> +    }
>>>     virQEMUCapsCacheFree(driver->qemuCapsCache);
>>>     virObjectUnref(driver->xmlopt);
>>>     virObjectUnref(driver->caps);
>>> @@ -548,9 +552,14 @@ int qemuTestCapsCacheInsert(virQEMUCapsCachePtr
>>> cache, const char *binary,
>>>     return ret;
>>> }
>>>
>>> +# define STATEDIRTEMPLATE abs_builddir "/qemustatedir-XXXXXX"
>>> +# define CONFIGDIRTEMPLATE abs_builddir "/qemuconfigdir-XXXXXX"
>>> +
>>> int qemuTestDriverInit(virQEMUDriver *driver)
>>> {
>>>     virSecurityManagerPtr mgr = NULL;
>>> +    char statedir[] = STATEDIRTEMPLATE;
>>> +    char configdir[] = CONFIGDIRTEMPLATE;
>>>
>>
>> There's no point in creating these variables, otherwise ACK.
>
>There is a point; mkdtemp() uses the passed variable for both input and
>output. On function enter the file pattern is stored there, on function
>return the actual dirname that was created is stored there. Calling
>mkdir(STATEDIRTEMPLATE) would lead to sigsegv I guess. Let me try. Yeah,
>my guess was right.
>
>Pushed without any change. Thank you.
>

Stupid me, I totally forgot about the mkdtemp(), thanks for understanding.

>Michal
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170308/dd8c1bb6/attachment-0001.sig>


More information about the libvir-list mailing list