Changeset 719a208 in mainline
- Timestamp:
- 2017-05-30T05:59:09Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f2460a50
- Parents:
- 456c086
- Files:
-
- 11 edited
- 4 moved
Legend:
- Unmodified
- Added
- Removed
-
abi/include/abi/syscall.h
r456c086 r719a208 78 78 SYS_IPC_EVENT_UNMASK, 79 79 80 SYS_ CAP_GRANT,81 SYS_ CAP_REVOKE,80 SYS_PERM_GRANT, 81 SYS_PERM_REVOKE, 82 82 83 83 SYS_DEVICE_ASSIGN_DEVNO, -
kernel/Makefile
r456c086 r719a208 286 286 generic/src/ipc/irq.c \ 287 287 generic/src/ipc/event.c \ 288 generic/src/security/ cap.c \288 generic/src/security/perm.c \ 289 289 generic/src/sysinfo/sysinfo.c \ 290 290 generic/src/sysinfo/stats.c -
kernel/generic/include/proc/task.h
r456c086 r719a208 48 48 #include <adt/cht.h> 49 49 #include <adt/list.h> 50 #include <security/ cap.h>50 #include <security/perm.h> 51 51 #include <arch/proc/task.h> 52 52 #include <arch/proc/thread.h> … … 93 93 atomic_t lifecount; 94 94 95 /** Task capabilities. */96 cap_t capabilities;95 /** Task permissions. */ 96 perm_t perms; 97 97 98 98 /* IPC stuff */ … … 159 159 extern void task_print_list(bool); 160 160 161 extern void cap_set(task_t *, cap_t);162 extern cap_t cap_get(task_t *);161 extern void perm_set(task_t *, perm_t); 162 extern perm_t perm_get(task_t *); 163 163 164 164 #ifndef task_create_arch -
kernel/generic/include/security/perm.h
r456c086 r719a208 35 35 /** 36 36 * @file 37 * @brief Capabilities definitions.37 * @brief Task permissions definitions. 38 38 * 39 * Capabilities represent virtual rights that entitle their39 * Permissions represent virtual rights that entitle their 40 40 * holder to perform certain security sensitive tasks. 41 41 * 42 * Each task can have arbitrary combination of the capabilities42 * Each task can have arbitrary combination of the permissions 43 43 * defined in this file. Therefore, they are required to be powers 44 44 * of two. 45 45 */ 46 46 47 #ifndef __ CAP_H__48 #define __ CAP_H__47 #ifndef __PERM_H__ 48 #define __PERM_H__ 49 49 50 50 #include <typedefs.h> 51 51 52 52 /** 53 * CAP_CAP allows its holder to grant/revoke arbitrary54 * privilege to/fromother tasks.53 * PERM_PERM allows its holder to grant/revoke arbitrary permission to/from 54 * other tasks. 55 55 */ 56 #define CAP_CAP(1 << 0)56 #define PERM_PERM (1 << 0) 57 57 58 58 /** 59 * CAP_MEM_MANAGER allows its holder to map physical memory 60 * to other tasks. 59 * PERM_MEM_MANAGER allows its holder to map physical memory to other tasks. 61 60 */ 62 #define CAP_MEM_MANAGER(1 << 1)61 #define PERM_MEM_MANAGER (1 << 1) 63 62 64 63 /** 65 * CAP_IO_MANAGER allows its holder to access I/O space 66 * to other tasks. 64 * PERM_IO_MANAGER allows its holder to access I/O space to other tasks. 67 65 */ 68 #define CAP_IO_MANAGER (1 << 2)66 #define PERM_IO_MANAGER (1 << 2) 69 67 70 68 /** 71 * CAP_IRQ_REG entitles its holder to register IRQ handlers.69 * PERM_IRQ_REG entitles its holder to register IRQ handlers. 72 70 */ 73 #define CAP_IRQ_REG(1 << 3)71 #define PERM_IRQ_REG (1 << 3) 74 72 75 typedef uint32_t cap_t;73 typedef uint32_t perm_t; 76 74 77 75 #ifdef __32_BITS__ 78 76 79 extern sysarg_t sys_ cap_grant(sysarg64_t *, cap_t);80 extern sysarg_t sys_ cap_revoke(sysarg64_t *, cap_t);77 extern sysarg_t sys_perm_grant(sysarg64_t *, perm_t); 78 extern sysarg_t sys_perm_revoke(sysarg64_t *, perm_t); 81 79 82 80 #endif /* __32_BITS__ */ … … 84 82 #ifdef __64_BITS__ 85 83 86 extern sysarg_t sys_ cap_grant(sysarg_t, cap_t);87 extern sysarg_t sys_ cap_revoke(sysarg_t, cap_t);84 extern sysarg_t sys_perm_grant(sysarg_t, perm_t); 85 extern sysarg_t sys_perm_revoke(sysarg_t, perm_t); 88 86 89 87 #endif /* __64_BITS__ */ -
kernel/generic/src/ddi/ddi.c
r456c086 r719a208 42 42 #include <ddi/ddi.h> 43 43 #include <proc/task.h> 44 #include <security/ cap.h>44 #include <security/perm.h> 45 45 #include <mm/frame.h> 46 46 #include <mm/as.h> … … 96 96 * 97 97 * @return EOK on success. 98 * @return EPERM if the caller lacks capabilities to use this syscall.98 * @return EPERM if the caller lacks permissions to use this syscall. 99 99 * @return EBADMEM if phys is not page aligned. 100 100 * @return ENOENT if there is no task matching the specified ID or … … 116 116 */ 117 117 bool priv = 118 (( cap_get(TASK) & CAP_MEM_MANAGER) == CAP_MEM_MANAGER);118 ((perm_get(TASK) & PERM_MEM_MANAGER) == PERM_MEM_MANAGER); 119 119 120 120 mem_backend_data_t backend_data; … … 260 260 * @param size Size of the enabled I/O space. 261 261 * 262 * @return 0 on success, EPERM if the caller lacks capabilities to use this262 * @return 0 on success, EPERM if the caller lacks permissions to use this 263 263 * syscall, ENOENT if there is no task matching the specified ID. 264 264 * … … 269 269 * Make sure the caller is authorised to make this syscall. 270 270 */ 271 cap_t caps = cap_get(TASK);272 if (!( caps & CAP_IO_MANAGER))271 perm_t perms = perm_get(TASK); 272 if (!(perms & PERM_IO_MANAGER)) 273 273 return EPERM; 274 274 … … 301 301 * @param size Size of the enabled I/O space. 302 302 * 303 * @return 0 on success, EPERM if the caller lacks capabilities to use this303 * @return 0 on success, EPERM if the caller lacks permissions to use this 304 304 * syscall, ENOENT if there is no task matching the specified ID. 305 305 * … … 310 310 * Make sure the caller is authorised to make this syscall. 311 311 */ 312 cap_t caps = cap_get(TASK);313 if (!( caps & CAP_IO_MANAGER))312 perm_t perms = perm_get(TASK); 313 if (!(perms & PERM_IO_MANAGER)) 314 314 return EPERM; 315 315 -
kernel/generic/src/ipc/sysipc.c
r456c086 r719a208 48 48 #include <arch/interrupt.h> 49 49 #include <syscall/copy.h> 50 #include <security/ cap.h>50 #include <security/perm.h> 51 51 #include <console/console.h> 52 52 #include <print.h> … … 811 811 irq_code_t *ucode) 812 812 { 813 if (!( cap_get(TASK) & CAP_IRQ_REG))813 if (!(perm_get(TASK) & PERM_IRQ_REG)) 814 814 return EPERM; 815 815 … … 827 827 sysarg_t sys_ipc_irq_unsubscribe(inr_t inr, devno_t devno) 828 828 { 829 if (!( cap_get(TASK) & CAP_IRQ_REG))829 if (!(perm_get(TASK) & PERM_IRQ_REG)) 830 830 return EPERM; 831 831 -
kernel/generic/src/main/kinit.c
r456c086 r719a208 64 64 #include <interrupt.h> 65 65 #include <console/kconsole.h> 66 #include <security/ cap.h>66 #include <security/perm.h> 67 67 #include <lib/rd.h> 68 68 #include <ipc/ipc.h> … … 259 259 if (programs[i].task != NULL) { 260 260 /* 261 * Set capabilities to init userspace tasks.261 * Set permissions to init userspace tasks. 262 262 */ 263 cap_set(programs[i].task, CAP_CAP | CAP_MEM_MANAGER | 264 CAP_IO_MANAGER | CAP_IRQ_REG); 263 perm_set(programs[i].task, 264 PERM_PERM | PERM_MEM_MANAGER | 265 PERM_IO_MANAGER | PERM_IRQ_REG); 265 266 266 267 if (!ipc_phone_0) { -
kernel/generic/src/proc/program.c
r456c086 r719a208 46 46 #include <ipc/ipc.h> 47 47 #include <ipc/ipcrsc.h> 48 #include <security/ cap.h>48 #include <security/perm.h> 49 49 #include <lib/elf_load.h> 50 50 #include <errno.h> … … 244 244 return rc; 245 245 246 // FIXME: control the capabilities247 cap_set(prg.task, cap_get(TASK));246 // FIXME: control the permissions 247 perm_set(prg.task, perm_get(TASK)); 248 248 program_ready(&prg); 249 249 -
kernel/generic/src/proc/task.c
r456c086 r719a208 203 203 204 204 task->container = CONTAINER; 205 task-> capabilities = 0;205 task->perms = 0; 206 206 task->ucycles = 0; 207 207 task->kcycles = 0; -
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 -
kernel/generic/src/syscall/syscall.c
r456c086 r719a208 53 53 #include <ddi/ddi.h> 54 54 #include <ipc/event.h> 55 #include <security/ cap.h>55 #include <security/perm.h> 56 56 #include <sysinfo/sysinfo.h> 57 57 #include <console/console.h> … … 171 171 (syshandler_t) sys_ipc_event_unmask, 172 172 173 /* Capabilitiesrelated syscalls. */174 (syshandler_t) sys_ cap_grant,175 (syshandler_t) sys_ cap_revoke,173 /* Permission related syscalls. */ 174 (syshandler_t) sys_perm_grant, 175 (syshandler_t) sys_perm_revoke, 176 176 177 177 /* DDI related syscalls. */ -
uspace/app/trace/syscalls.c
r456c086 r719a208 68 68 [SYS_IPC_EVENT_UNMASK] = { "ipc_event_unmask", 1, V_ERRNO }, 69 69 70 [SYS_ CAP_GRANT] = { "cap_grant", 2, V_ERRNO },71 [SYS_ CAP_REVOKE] = { "cap_revoke",2, V_ERRNO },70 [SYS_PERM_GRANT] = { "perm_grant", 2, V_ERRNO }, 71 [SYS_PERM_REVOKE] = { "perm_revoke", 2, V_ERRNO }, 72 72 [SYS_PHYSMEM_MAP] = { "physmem_map", 4, V_ERRNO }, 73 73 [SYS_IOSPACE_ENABLE] = { "iospace_enable", 1, V_ERRNO }, -
uspace/lib/c/Makefile
r456c086 r719a208 63 63 generic/bd.c \ 64 64 generic/bd_srv.c \ 65 generic/ cap.c \65 generic/perm.c \ 66 66 generic/clipboard.c \ 67 67 generic/config.c \ -
uspace/lib/c/generic/perm.c
r456c086 r719a208 31 31 */ 32 32 /** 33 * @file cap.c34 * @brief Functions to grant/revoke capabilities to/from a task.33 * @file perm.c 34 * @brief Functions to grant/revoke permissions to/from a task. 35 35 */ 36 36 37 #include < cap.h>37 #include <perm.h> 38 38 #include <task.h> 39 39 #include <libc.h> 40 40 #include <libarch/types.h> 41 41 42 /** Grant capabilities to a task.42 /** Grant permissions to a task. 43 43 * 44 * @param id Destination task ID.45 * @param caps Capabilities to grant.44 * @param id Destination task ID. 45 * @param perms Permissions to grant. 46 46 * 47 47 * @return Zero on success or a value from @ref errno.h on failure. 48 48 * 49 49 */ 50 int cap_grant(task_id_t id, unsigned int caps)50 int perm_grant(task_id_t id, unsigned int perms) 51 51 { 52 52 #ifdef __32_BITS__ 53 53 sysarg64_t arg = (sysarg64_t) id; 54 return __SYSCALL2(SYS_ CAP_GRANT, (sysarg_t) &arg, (sysarg_t) caps);54 return __SYSCALL2(SYS_PERM_GRANT, (sysarg_t) &arg, (sysarg_t) perms); 55 55 #endif 56 56 57 57 #ifdef __64_BITS__ 58 return __SYSCALL2(SYS_ CAP_GRANT, (sysarg_t) id, (sysarg_t) caps);58 return __SYSCALL2(SYS_PERM_GRANT, (sysarg_t) id, (sysarg_t) perms); 59 59 #endif 60 60 } 61 61 62 /** Revoke capabilities from a task.62 /** Revoke permissions from a task. 63 63 * 64 * @param id Destination task ID.65 * @param caps Capabilities to revoke.64 * @param id Destination task ID. 65 * @param perms Permissions to revoke. 66 66 * 67 67 * @return Zero on success or a value from @ref errno.h on failure. 68 68 * 69 69 */ 70 int cap_revoke(task_id_t id, unsigned int caps)70 int perm_revoke(task_id_t id, unsigned int perms) 71 71 { 72 72 #ifdef __32_BITS__ 73 73 sysarg64_t arg = (sysarg64_t) id; 74 return __SYSCALL2(SYS_ CAP_REVOKE, (sysarg_t) &arg, (sysarg_t) caps);74 return __SYSCALL2(SYS_PERM_REVOKE, (sysarg_t) &arg, (sysarg_t) perms); 75 75 #endif 76 76 77 77 #ifdef __64_BITS__ 78 return __SYSCALL2(SYS_ CAP_REVOKE, (sysarg_t) id, (sysarg_t) caps);78 return __SYSCALL2(SYS_PERM_REVOKE, (sysarg_t) id, (sysarg_t) perms); 79 79 #endif 80 80 } -
uspace/lib/c/include/perm.h
r456c086 r719a208 33 33 */ 34 34 35 #ifndef LIB_ CAP_H_36 #define LIB_ CAP_H_35 #ifndef LIB_PERM_H_ 36 #define LIB_PERM_H_ 37 37 38 38 #include <task.h> 39 39 40 extern int cap_grant(task_id_t id, unsigned int caps);41 extern int cap_revoke(task_id_t id, unsigned int caps);40 extern int perm_grant(task_id_t, unsigned int); 41 extern int perm_revoke(task_id_t, unsigned int); 42 42 43 43 #endif
Note:
See TracChangeset
for help on using the changeset viewer.