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