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)