Changeset 719a208 in mainline for kernel/generic/src/security/perm.c
- Timestamp:
- 2017-05-30T05:59:09Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f2460a50
- Parents:
- 456c086
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/security/perm.c
r456c086 r719a208 32 32 33 33 /** 34 * @file cap.c35 * @brief Capabilities control.36 * 37 * @see cap.h38 */ 39 40 #include <security/ cap.h>34 * @file perm.c 35 * @brief Task permissions control. 36 * 37 * @see perm.h 38 */ 39 40 #include <security/perm.h> 41 41 #include <proc/task.h> 42 42 #include <synch/spinlock.h> … … 45 45 #include <errno.h> 46 46 47 /** Set capabilities.48 * 49 * @param task Task whose capabilities are to be changed.50 * @param caps New set of capabilities.51 * 52 */ 53 void cap_set(task_t *task, cap_t caps)47 /** Set permissions. 48 * 49 * @param task Task whose permissions are to be changed. 50 * @param perms New set of permissions. 51 * 52 */ 53 void perm_set(task_t *task, perm_t perms) 54 54 { 55 55 irq_spinlock_lock(&task->lock, true); 56 task-> capabilities = caps;56 task->perms = perms; 57 57 irq_spinlock_unlock(&task->lock, true); 58 58 } 59 59 60 /** Get capabilities.61 * 62 * @param task Task whose capabilities are to be returned.63 * 64 * @return Task's capabilities.65 * 66 */ 67 cap_t cap_get(task_t *task)60 /** Get permissions. 61 * 62 * @param task Task whose permissions are to be returned. 63 * 64 * @return Task's permissions. 65 * 66 */ 67 perm_t perm_get(task_t *task) 68 68 { 69 69 irq_spinlock_lock(&task->lock, true); 70 cap_t caps = task->capabilities;70 perm_t perms = task->perms; 71 71 irq_spinlock_unlock(&task->lock, true); 72 72 73 return caps;74 } 75 76 /** Grant capabilities to a task.77 * 78 * The calling task must have the CAP_CAP capability.79 * 80 * @param taskid Destination task ID. 81 * @param caps Capabilities to grant.82 * 83 * @return Zero on success or an error code from @ref errno.h. 84 * 85 */ 86 static sysarg_t cap_grant(task_id_t taskid, cap_t caps)87 { 88 if (!( cap_get(TASK) & CAP_CAP))73 return perms; 74 } 75 76 /** Grant permissions to a task. 77 * 78 * The calling task must have the PERM_PERM permission. 79 * 80 * @param taskid Destination task ID. 81 * @param perms Permissions to grant. 82 * 83 * @return Zero on success or an error code from @ref errno.h. 84 * 85 */ 86 static sysarg_t perm_grant(task_id_t taskid, perm_t perms) 87 { 88 if (!(perm_get(TASK) & PERM_PERM)) 89 89 return (sysarg_t) EPERM; 90 90 … … 98 98 99 99 irq_spinlock_lock(&task->lock, false); 100 task-> capabilities |= caps;100 task->perms |= perms; 101 101 irq_spinlock_unlock(&task->lock, false); 102 102 … … 105 105 } 106 106 107 /** Revoke capabilities from a task.108 * 109 * The calling task must have the CAP_CAP capabilityor the caller must110 * attempt to revoke capabilities from itself.111 * 112 * @param taskid Destination task ID. 113 * @param caps Capabilities to revoke.114 * 115 * @return Zero on success or an error code from @ref errno.h. 116 * 117 */ 118 static sysarg_t cap_revoke(task_id_t taskid, cap_t caps)107 /** Revoke permissions from a task. 108 * 109 * The calling task must have the PERM_PERM permission or the caller must 110 * attempt to revoke permissions from itself. 111 * 112 * @param taskid Destination task ID. 113 * @param perms Permissions to revoke. 114 * 115 * @return Zero on success or an error code from @ref errno.h. 116 * 117 */ 118 static sysarg_t perm_revoke(task_id_t taskid, perm_t perms) 119 119 { 120 120 irq_spinlock_lock(&tasks_lock, true); … … 127 127 128 128 /* 129 * Revoking capabilities is different from granting them in that130 * a task can revoke capabilities from itself even if it131 * doesn't have CAP_CAP.129 * Revoking permissions is different from granting them in that 130 * a task can revoke permissions from itself even if it 131 * doesn't have PERM_PERM. 132 132 */ 133 133 irq_spinlock_unlock(&TASK->lock, false); 134 134 135 if ((!(TASK-> capabilities & CAP_CAP)) || (task != TASK)) {135 if ((!(TASK->perms & PERM_PERM)) || (task != TASK)) { 136 136 irq_spinlock_unlock(&TASK->lock, false); 137 137 irq_spinlock_unlock(&tasks_lock, true); … … 139 139 } 140 140 141 task-> capabilities &= ~caps;141 task->perms &= ~perms; 142 142 irq_spinlock_unlock(&TASK->lock, false); 143 143 … … 148 148 #ifdef __32_BITS__ 149 149 150 /** Grant capabilities to a task (32 bits)151 * 152 * The calling task must have the CAP_CAP capability.150 /** Grant permissions to a task (32 bits) 151 * 152 * The calling task must have the PERM_PERM permission. 153 153 * 154 154 * @param uspace_taskid User-space pointer to destination task ID. 155 * @param caps Capabilities to grant.156 * 157 * @return Zero on success or an error code from @ref errno.h. 158 * 159 */ 160 sysarg_t sys_ cap_grant(sysarg64_t *uspace_taskid, cap_t caps)155 * @param perms Permissions to grant. 156 * 157 * @return Zero on success or an error code from @ref errno.h. 158 * 159 */ 160 sysarg_t sys_perm_grant(sysarg64_t *uspace_taskid, perm_t perms) 161 161 { 162 162 sysarg64_t taskid; … … 165 165 return (sysarg_t) rc; 166 166 167 return cap_grant((task_id_t) taskid, caps);168 } 169 170 /** Revoke capabilities from a task (32 bits)171 * 172 * The calling task must have the CAP_CAP capabilityor the caller must173 * attempt to revoke capabilities from itself.167 return perm_grant((task_id_t) taskid, perms); 168 } 169 170 /** Revoke permissions from a task (32 bits) 171 * 172 * The calling task must have the PERM_PERM permission or the caller must 173 * attempt to revoke permissions from itself. 174 174 * 175 175 * @param uspace_taskid User-space pointer to destination task ID. 176 * @param caps Capabilities to revoke.177 * 178 * @return Zero on success or an error code from @ref errno.h. 179 * 180 */ 181 sysarg_t sys_ cap_revoke(sysarg64_t *uspace_taskid, cap_t caps)176 * @param perms Perms to revoke. 177 * 178 * @return Zero on success or an error code from @ref errno.h. 179 * 180 */ 181 sysarg_t sys_perm_revoke(sysarg64_t *uspace_taskid, perm_t perms) 182 182 { 183 183 sysarg64_t taskid; … … 186 186 return (sysarg_t) rc; 187 187 188 return cap_revoke((task_id_t) taskid, caps);188 return perm_revoke((task_id_t) taskid, perms); 189 189 } 190 190 … … 193 193 #ifdef __64_BITS__ 194 194 195 /** Grant capabilities to a task (64 bits)196 * 197 * The calling task must have the CAP_CAP capability.198 * 199 * @param taskid Destination task ID. 200 * @param caps Capabilities to grant.201 * 202 * @return Zero on success or an error code from @ref errno.h. 203 * 204 */ 205 sysarg_t sys_ cap_grant(sysarg_t taskid, cap_t caps)206 { 207 return cap_grant((task_id_t) taskid, caps);208 } 209 210 /** Revoke capabilities from a task (64 bits)211 * 212 * The calling task must have the CAP_CAP capabilityor the caller must213 * attempt to revoke capabilities from itself.214 * 215 * @param taskid Destination task ID. 216 * @param caps Capabilities to revoke.217 * 218 * @return Zero on success or an error code from @ref errno.h. 219 * 220 */ 221 sysarg_t sys_ cap_revoke(sysarg_t taskid, cap_t caps)222 { 223 return cap_revoke((task_id_t) taskid, caps);195 /** Grant permissions to a task (64 bits) 196 * 197 * The calling task must have the PERM_PERM permission. 198 * 199 * @param taskid Destination task ID. 200 * @param perms Permissions to grant. 201 * 202 * @return Zero on success or an error code from @ref errno.h. 203 * 204 */ 205 sysarg_t sys_perm_grant(sysarg_t taskid, perm_t perms) 206 { 207 return perm_grant((task_id_t) taskid, perms); 208 } 209 210 /** Revoke permissions from a task (64 bits) 211 * 212 * The calling task must have the PERM_PERM permission or the caller must 213 * attempt to revoke permissions from itself. 214 * 215 * @param taskid Destination task ID. 216 * @param perms Permissions to revoke. 217 * 218 * @return Zero on success or an error code from @ref errno.h. 219 * 220 */ 221 sysarg_t sys_perm_revoke(sysarg_t taskid, perm_t perms) 222 { 223 return perm_revoke((task_id_t) taskid, perms); 224 224 } 225 225
Note:
See TracChangeset
for help on using the changeset viewer.