Changeset 6b10dab in mainline for kernel/generic/src
- Timestamp:
- 2010-12-14T15:26:36Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- dd8d5a7
- Parents:
- 96b02eb9
- Location:
- kernel/generic/src
- Files:
-
- 3 edited
-
ipc/sysipc.c (modified) (3 diffs)
-
security/cap.c (modified) (4 diffs)
-
syscall/syscall.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/ipc/sysipc.c
r96b02eb9 r6b10dab 49 49 #include <syscall/copy.h> 50 50 #include <security/cap.h> 51 #include <console/console.h> 51 52 #include <mm/as.h> 52 53 #include <print.h> … … 1128 1129 } 1129 1130 1130 #i nclude <console/console.h>1131 1132 /** Syscall connect to a task by id.1131 #ifdef __32_BITS__ 1132 1133 /** Syscall connect to a task by ID (32 bits) 1133 1134 * 1134 1135 * @return Phone id on success, or negative error code. 1135 1136 * 1136 1137 */ 1137 sysarg_t sys_ipc_connect_kbox(sysarg64_t *uspace_taskid _arg)1138 sysarg_t sys_ipc_connect_kbox(sysarg64_t *uspace_taskid) 1138 1139 { 1139 1140 #ifdef CONFIG_UDEBUG 1140 sysarg64_t taskid _arg;1141 int rc = copy_from_uspace(&taskid _arg, uspace_taskid_arg, sizeof(sysarg64_t));1141 sysarg64_t taskid; 1142 int rc = copy_from_uspace(&taskid, uspace_taskid, sizeof(sysarg64_t)); 1142 1143 if (rc != 0) 1143 1144 return (sysarg_t) rc; 1144 1145 1145 LOG("sys_ipc_connect_kbox(%" PRIu64 ")", taskid_arg.value); 1146 1147 return ipc_connect_kbox(taskid_arg.value); 1146 return ipc_connect_kbox((task_id_t) taskid); 1148 1147 #else 1149 1148 return (sysarg_t) ENOTSUP; … … 1151 1150 } 1152 1151 1152 #endif /* __32_BITS__ */ 1153 1154 #ifdef __64_BITS__ 1155 1156 /** Syscall connect to a task by ID (64 bits) 1157 * 1158 * @return Phone id on success, or negative error code. 1159 * 1160 */ 1161 sysarg_t sys_ipc_connect_kbox(sysarg_t taskid) 1162 { 1163 #ifdef CONFIG_UDEBUG 1164 return ipc_connect_kbox((task_id_t) taskid); 1165 #else 1166 return (sysarg_t) ENOTSUP; 1167 #endif 1168 } 1169 1170 #endif /* __64_BITS__ */ 1171 1153 1172 /** @} 1154 1173 */ -
kernel/generic/src/security/cap.c
r96b02eb9 r6b10dab 41 41 #include <proc/task.h> 42 42 #include <synch/spinlock.h> 43 #include <syscall/sysarg64.h>44 43 #include <syscall/copy.h> 45 44 #include <arch.h> … … 79 78 * The calling task must have the CAP_CAP capability. 80 79 * 81 * @param uspace_taskid_arg Userspace structure holding destination task ID.82 * @param caps Capabilities to grant.83 * 84 * @return Zero on success or an error code from @ref errno.h. 85 * 86 */ 87 s ysarg_t sys_cap_grant(sysarg64_t *uspace_taskid_arg, cap_t caps)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) 88 87 { 89 88 if (!(cap_get(TASK) & CAP_CAP)) 90 89 return (sysarg_t) EPERM; 91 90 92 sysarg64_t taskid_arg;93 int rc = copy_from_uspace(&taskid_arg, uspace_taskid_arg, sizeof(sysarg64_t));94 if (rc != 0)95 return (sysarg_t) rc;96 97 91 irq_spinlock_lock(&tasks_lock, true); 98 task_t *task = task_find_by_id( (task_id_t) taskid_arg.value);92 task_t *task = task_find_by_id(taskid); 99 93 100 94 if ((!task) || (!context_check(CONTEXT, task->context))) { … … 116 110 * attempt to revoke capabilities from itself. 117 111 * 118 * @param uspace_taskid_arg Userspace structure holding destination task ID. 119 * @param caps Capabilities to revoke. 120 * 121 * @return Zero on success or an error code from @ref errno.h. 122 * 123 */ 124 sysarg_t sys_cap_revoke(sysarg64_t *uspace_taskid_arg, cap_t caps) 125 { 126 sysarg64_t taskid_arg; 127 int rc = copy_from_uspace(&taskid_arg, uspace_taskid_arg, sizeof(sysarg64_t)); 128 if (rc != 0) 129 return (sysarg_t) rc; 130 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) 119 { 131 120 irq_spinlock_lock(&tasks_lock, true); 132 121 133 task_t *task = task_find_by_id( (task_id_t) taskid_arg.value);122 task_t *task = task_find_by_id(taskid); 134 123 if ((!task) || (!context_check(CONTEXT, task->context))) { 135 124 irq_spinlock_unlock(&tasks_lock, true); … … 157 146 } 158 147 148 #ifdef __32_BITS__ 149 150 /** Grant capabilities to a task (32 bits) 151 * 152 * The calling task must have the CAP_CAP capability. 153 * 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) 161 { 162 sysarg64_t taskid; 163 int rc = copy_from_uspace(&taskid, uspace_taskid, sizeof(sysarg64_t)); 164 if (rc != 0) 165 return (sysarg_t) rc; 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 capability or the caller must 173 * attempt to revoke capabilities from itself. 174 * 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) 182 { 183 sysarg64_t taskid; 184 int rc = copy_from_uspace(&taskid, uspace_taskid, sizeof(sysarg64_t)); 185 if (rc != 0) 186 return (sysarg_t) rc; 187 188 return cap_revoke((task_id_t) taskid, caps); 189 } 190 191 #endif /* __32_BITS__ */ 192 193 #ifdef __64_BITS__ 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 capability or the caller must 213 * 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); 224 } 225 226 #endif /* __64_BITS__ */ 227 159 228 /** @} 160 229 */ -
kernel/generic/src/syscall/syscall.c
r96b02eb9 r6b10dab 147 147 (syshandler_t) sys_ipc_register_irq, 148 148 (syshandler_t) sys_ipc_unregister_irq, 149 (syshandler_t) sys_ipc_connect_kbox, 149 150 150 151 /* Event notification syscalls. */ … … 169 170 /* Debug calls */ 170 171 (syshandler_t) sys_debug_enable_console, 171 (syshandler_t) sys_debug_disable_console, 172 173 (syshandler_t) sys_ipc_connect_kbox 172 (syshandler_t) sys_debug_disable_console 174 173 }; 175 174
Note:
See TracChangeset
for help on using the changeset viewer.
