From c14e89a578353f0c4109bbc1d260f7b2dd6e7fed Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 7 Dec 2021 17:12:27 +0100 Subject: [PATCH] impl-core: require WX flags to destroy an object --- src/pipewire/impl-core.c | 2 +- src/pipewire/permission.h | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/pipewire/impl-core.c b/src/pipewire/impl-core.c index 85d41e7bb..437f1e12b 100644 --- a/src/pipewire/impl-core.c +++ b/src/pipewire/impl-core.c @@ -110,7 +110,7 @@ static int registry_destroy(void *object, uint32_t id) if (!PW_PERM_IS_R(permissions)) goto error_no_id; - if (id == PW_ID_CORE || !PW_PERM_IS_X(permissions)) + if (id == PW_ID_CORE || !PW_PERM_CHECK(permissions, PW_PERM_X|PW_PERM_W)) goto error_not_allowed; pw_log_debug("global %p: destroy global id %d", global, id); diff --git a/src/pipewire/permission.h b/src/pipewire/permission.h index e0274ddcb..6469bac13 100644 --- a/src/pipewire/permission.h +++ b/src/pipewire/permission.h @@ -53,10 +53,11 @@ extern "C" { #define PW_PERM_RWX (PW_PERM_R|PW_PERM_W|PW_PERM_X) #define PW_PERM_RWXM (PW_PERM_RWX|PW_PERM_M) -#define PW_PERM_IS_R(p) (((p)&PW_PERM_R) == PW_PERM_R) -#define PW_PERM_IS_W(p) (((p)&PW_PERM_W) == PW_PERM_W) -#define PW_PERM_IS_X(p) (((p)&PW_PERM_X) == PW_PERM_X) -#define PW_PERM_IS_M(p) (((p)&PW_PERM_M) == PW_PERM_M) +#define PW_PERM_CHECK(p,b) (((p)&(b)) == (b)) +#define PW_PERM_IS_R(p) PW_PERM_CHECK(p, PW_PERM_R) +#define PW_PERM_IS_W(p) PW_PERM_CHECK(p, PW_PERM_W) +#define PW_PERM_IS_X(p) PW_PERM_CHECK(p, PW_PERM_X) +#define PW_PERM_IS_M(p) PW_PERM_CHECK(p, PW_PERM_M) #define PW_PERM_ALL PW_PERM_RWXM #define PW_PERM_INVALID (uint32_t)(0xffffffff)