Changes in kernel/generic/src/security/perm.c [07d4271:5a5269d] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/security/perm.c
r07d4271 r5a5269d 89 89 return EPERM; 90 90 91 irq_spinlock_lock(&tasks_lock, true); 91 92 task_t *task = task_find_by_id(taskid); 92 if (!task) 93 94 if ((!task) || (!container_check(CONTAINER, task->container))) { 95 irq_spinlock_unlock(&tasks_lock, true); 93 96 return ENOENT; 94 95 errno_t rc = ENOENT;96 97 irq_spinlock_lock(&task->lock, true);98 if (container_check(CONTAINER, task->container)) {99 task->perms |= perms;100 rc = EOK;101 97 } 102 irq_spinlock_unlock(&task->lock, true); 103 104 task_release(task); 105 return rc; 98 99 irq_spinlock_lock(&task->lock, false); 100 task->perms |= perms; 101 irq_spinlock_unlock(&task->lock, false); 102 103 irq_spinlock_unlock(&tasks_lock, true); 104 return EOK; 106 105 } 107 106 … … 119 118 static errno_t perm_revoke(task_id_t taskid, perm_t perms) 120 119 { 120 irq_spinlock_lock(&tasks_lock, true); 121 121 122 task_t *task = task_find_by_id(taskid); 122 if (!task) 123 if ((!task) || (!container_check(CONTAINER, task->container))) { 124 irq_spinlock_unlock(&tasks_lock, true); 123 125 return ENOENT; 126 } 124 127 125 128 /* … … 128 131 * doesn't have PERM_PERM. 129 132 */ 130 if (task != TASK && !(perm_get(TASK) & PERM_PERM)) { 131 task_release(task); 133 irq_spinlock_lock(&TASK->lock, false); 134 135 if ((!(TASK->perms & PERM_PERM)) || (task != TASK)) { 136 irq_spinlock_unlock(&TASK->lock, false); 137 irq_spinlock_unlock(&tasks_lock, true); 132 138 return EPERM; 133 139 } 134 140 135 errno_t rc = ENOENT; 136 137 irq_spinlock_lock(&task->lock, true); 138 if (container_check(CONTAINER, task->container)) { 139 task->perms &= ~perms; 140 rc = EOK; 141 } 142 irq_spinlock_unlock(&task->lock, true); 143 144 task_release(task); 145 return rc; 141 task->perms &= ~perms; 142 irq_spinlock_unlock(&TASK->lock, false); 143 144 irq_spinlock_unlock(&tasks_lock, true); 145 return EOK; 146 146 } 147 147
Note:
See TracChangeset
for help on using the changeset viewer.