impl-core: require WX flags to destroy an object

This commit is contained in:
Wim Taymans 2021-12-07 17:12:27 +01:00
parent a31bd26a42
commit c14e89a578
2 changed files with 6 additions and 5 deletions

View file

@ -110,7 +110,7 @@ static int registry_destroy(void *object, uint32_t id)
if (!PW_PERM_IS_R(permissions)) if (!PW_PERM_IS_R(permissions))
goto error_no_id; 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; goto error_not_allowed;
pw_log_debug("global %p: destroy global id %d", global, id); pw_log_debug("global %p: destroy global id %d", global, id);

View file

@ -53,10 +53,11 @@ extern "C" {
#define PW_PERM_RWX (PW_PERM_R|PW_PERM_W|PW_PERM_X) #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_RWXM (PW_PERM_RWX|PW_PERM_M)
#define PW_PERM_IS_R(p) (((p)&PW_PERM_R) == PW_PERM_R) #define PW_PERM_CHECK(p,b) (((p)&(b)) == (b))
#define PW_PERM_IS_W(p) (((p)&PW_PERM_W) == PW_PERM_W) #define PW_PERM_IS_R(p) PW_PERM_CHECK(p, PW_PERM_R)
#define PW_PERM_IS_X(p) (((p)&PW_PERM_X) == PW_PERM_X) #define PW_PERM_IS_W(p) PW_PERM_CHECK(p, PW_PERM_W)
#define PW_PERM_IS_M(p) (((p)&PW_PERM_M) == PW_PERM_M) #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_ALL PW_PERM_RWXM
#define PW_PERM_INVALID (uint32_t)(0xffffffff) #define PW_PERM_INVALID (uint32_t)(0xffffffff)