Signed-off-by: Tim Wiederhake <twiederh(a)redhat.com>
---
tests/qemusecuritymock.c | 88 +++++++++++++---------------------------
1 file changed, 29 insertions(+), 59 deletions(-)
diff --git a/tests/qemusecuritymock.c b/tests/qemusecuritymock.c
index 778b0561ac..03c818d8a3 100644
--- a/tests/qemusecuritymock.c
+++ b/tests/qemusecuritymock.c
@@ -137,27 +137,21 @@ virFileGetXAttrQuiet(const char *path,
const char *name,
char **value)
{
- int ret = -1;
- g_autofree char *key = NULL;
+ g_autofree char *key = get_key(path, name);
char *val;
+ VIR_LOCK_GUARD lock = virLockGuardLock(&m);
- key = get_key(path, name);
-
- virMutexLock(&m);
init_syms();
init_hash();
if (!(val = virHashLookup(xattr_paths, key))) {
errno = ENODATA;
- goto cleanup;
+ return -1;
}
*value = g_strdup(val);
- ret = 0;
- cleanup:
- virMutexUnlock(&m);
- return ret;
+ return 0;
}
@@ -193,25 +187,18 @@ int virFileSetXAttr(const char *path,
const char *name,
const char *value)
{
- int ret = -1;
- g_autofree char *key = NULL;
- g_autofree char *val = NULL;
-
- key = get_key(path, name);
- val = g_strdup(value);
+ g_autofree char *key = get_key(path, name);
+ g_autofree char *val = g_strdup(value);
+ VIR_LOCK_GUARD lock = virLockGuardLock(&m);
- virMutexLock(&m);
init_syms();
init_hash();
if (virHashUpdateEntry(xattr_paths, key, val) < 0)
- goto cleanup;
+ return -1;
val = NULL;
- ret = 0;
- cleanup:
- virMutexUnlock(&m);
- return ret;
+ return 0;
}
@@ -219,18 +206,15 @@ int virFileRemoveXAttr(const char *path,
const char *name)
{
int ret = -1;
- g_autofree char *key = NULL;
-
- key = get_key(path, name);
+ g_autofree char *key = get_key(path, name);
+ VIR_LOCK_GUARD lock = virLockGuardLock(&m);
- virMutexLock(&m);
init_syms();
init_hash();
if ((ret = virHashRemoveEntry(xattr_paths, key)) < 0)
errno = ENODATA;
- virMutexUnlock(&m);
return ret;
}
@@ -270,8 +254,8 @@ mock_chown(const char *path,
uid_t uid,
gid_t gid)
{
- uint32_t *val = NULL;
- int ret = -1;
+ g_autofree uint32_t *val = NULL;
+ VIR_LOCK_GUARD lock = virLockGuardLock(&m);
if (gid >> 16 || uid >> 16) {
fprintf(stderr, "Attempt to set too high UID or GID: %llu %llu",
@@ -283,18 +267,13 @@ mock_chown(const char *path,
*val = (gid << 16) + uid;
- virMutexLock(&m);
init_hash();
if (virHashUpdateEntry(chown_paths, path, val) < 0)
- goto cleanup;
- val = NULL;
+ return -1;
- ret = 0;
- cleanup:
- virMutexUnlock(&m);
- VIR_FREE(val);
- return ret;
+ val = NULL;
+ return 0;
}
@@ -460,13 +439,12 @@ printXATTR(void *payload,
*/
int checkPaths(GHashTable *paths)
{
- int ret = -1;
checkOwnerData data = { .paths = paths, .chown_fail = false, .selinux_fail = false
};
bool xattr_fail = false;
GHashTableIter htitr;
void *key;
+ VIR_LOCK_GUARD lock = virLockGuardLock(&m);
- virMutexLock(&m);
init_hash();
g_hash_table_iter_init(&htitr, paths);
@@ -474,38 +452,35 @@ int checkPaths(GHashTable *paths)
while (g_hash_table_iter_next(&htitr, &key, NULL)) {
if (!virHashLookup(chown_paths, key)) {
fprintf(stderr, "Unexpected path restored: %s\n", (const char *)
key);
- goto cleanup;
+ return -1;
}
}
if (virHashForEach(selinux_paths, checkSELinux, &data) < 0)
- goto cleanup;
+ return -1;
if (virHashForEach(chown_paths, checkOwner, &data) < 0)
- goto cleanup;
+ return -1;
if (virHashForEach(xattr_paths, printXATTR, &xattr_fail) < 0)
- goto cleanup;
+ return -1;
if (data.chown_fail || data.selinux_fail || xattr_fail)
- goto cleanup;
+ return -1;
- ret = 0;
- cleanup:
- virMutexUnlock(&m);
- return ret;
+ return 0;
}
void freePaths(void)
{
- virMutexLock(&m);
+ VIR_LOCK_GUARD lock = virLockGuardLock(&m);
+
init_hash();
g_clear_pointer(&selinux_paths, g_hash_table_unref);
g_clear_pointer(&chown_paths, g_hash_table_unref);
g_clear_pointer(&xattr_paths, g_hash_table_unref);
- virMutexUnlock(&m);
}
@@ -578,19 +553,15 @@ mock_setfilecon_raw(const char *path,
const char *context)
{
g_autofree char *val = g_strdup(context);
- int ret = -1;
+ VIR_LOCK_GUARD lock = virLockGuardLock(&m);
- virMutexLock(&m);
init_hash();
if (virHashUpdateEntry(selinux_paths, path, val) < 0)
- goto cleanup;
+ return -1;
val = NULL;
- ret = 0;
- cleanup:
- virMutexUnlock(&m);
- return ret;
+ return 0;
}
@@ -599,8 +570,8 @@ mock_getfilecon_raw(const char *path,
char **context)
{
const char *val;
+ VIR_LOCK_GUARD lock = virLockGuardLock(&m);
- virMutexLock(&m);
init_hash();
val = virHashLookup(selinux_paths, path);
@@ -608,7 +579,6 @@ mock_getfilecon_raw(const char *path,
val = DEFAULT_SELINUX_LABEL;
*context = g_strdup(val);
- virMutexUnlock(&m);
return 0;
}
--
2.31.1