[PATCH 1/4] vircgroupmock: Be wiser about detecting fakerootdir change

Ján Tomko jtomko at redhat.com
Fri Mar 4 09:52:49 UTC 2022


On a Friday in 2022, Michal Privoznik wrote:
>The way that vircgroupmock works is that the vircgrouptest
>creates a temporary directory and sets LIBVIRT_FAKE_ROOT_DIR env
>variable which is then checked by the mock at the beginning of
>basically every function it overrides (access(), stat in all its
>flavours, mkdir(), etc.). The mock then creates a CGroup dir
>structure. But the test is allowed to change the directory, to
>accommodate environment for the particular test case. This is
>done by changing the environment variable which is then detected
>by the mock and the whole process repeats.
>
>However, the way the mock detect changes is buggy. After it got
>the environment variable it compares it to the last known value
>(global variable @fakerootdir) and if they don't match the last
>known value is set to point to the new value. Problem is that the
>result of getenv() is assigned to the @fakerootdir directly.
>Therefore, @fakerootdir points somewhere into the buffer of
>environment variables. In turn, when the test sets new value (via
>g_setenv()) it may be placed at the very same position in the env
>var buffer and thus the mock fails to detect the change.
>
>The solution is to keep our private copy of the value (by
>g_strdup()) which makes the variable not rely on
>getenv()/setenv() placing values at random positions.
>
>Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>---
> tests/vircgroupmock.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
>diff --git a/tests/vircgroupmock.c b/tests/vircgroupmock.c
>index cebf1912f7..cbf5269df6 100644
>--- a/tests/vircgroupmock.c
>+++ b/tests/vircgroupmock.c
>@@ -352,7 +352,8 @@ static void init_sysfs(void)
>     if (fakerootdir && STREQ(fakerootdir, newfakerootdir))
>         return;
>
>-    fakerootdir = newfakerootdir;
>+    VIR_FREE(fakerootdir);

g_free

Jano

>+    fakerootdir = g_strdup(newfakerootdir);
>
>     mock = getenv("VIR_CGROUP_MOCK_MODE");
>     if (mock) {
>-- 
>2.34.1
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20220304/98f683d7/attachment-0001.sig>


More information about the libvir-list mailing list