diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/cred.h | 36 | ||||
| -rw-r--r-- | include/linux/sched.h | 1 |
2 files changed, 12 insertions, 25 deletions
diff --git a/include/linux/cred.h b/include/linux/cred.h index 75c0fa881308..4d2c39573f36 100644 --- a/include/linux/cred.h +++ b/include/linux/cred.h | |||
| @@ -153,6 +153,7 @@ struct cred { | |||
| 153 | extern void __put_cred(struct cred *); | 153 | extern void __put_cred(struct cred *); |
| 154 | extern void exit_creds(struct task_struct *); | 154 | extern void exit_creds(struct task_struct *); |
| 155 | extern int copy_creds(struct task_struct *, unsigned long); | 155 | extern int copy_creds(struct task_struct *, unsigned long); |
| 156 | extern const struct cred *get_task_cred(struct task_struct *); | ||
| 156 | extern struct cred *cred_alloc_blank(void); | 157 | extern struct cred *cred_alloc_blank(void); |
| 157 | extern struct cred *prepare_creds(void); | 158 | extern struct cred *prepare_creds(void); |
| 158 | extern struct cred *prepare_exec_creds(void); | 159 | extern struct cred *prepare_exec_creds(void); |
| @@ -273,33 +274,18 @@ static inline void put_cred(const struct cred *_cred) | |||
| 273 | * @task: The task to query | 274 | * @task: The task to query |
| 274 | * | 275 | * |
| 275 | * Access the objective credentials of a task. The caller must hold the RCU | 276 | * Access the objective credentials of a task. The caller must hold the RCU |
| 276 | * readlock. | 277 | * readlock or the task must be dead and unable to change its own credentials. |
| 277 | * | 278 | * |
| 278 | * The caller must make sure task doesn't go away, either by holding a ref on | 279 | * The result of this function should not be passed directly to get_cred(); |
| 279 | * task or by holding tasklist_lock to prevent it from being unlinked. | 280 | * rather get_task_cred() should be used instead. |
| 280 | */ | 281 | */ |
| 281 | #define __task_cred(task) \ | 282 | #define __task_cred(task) \ |
| 282 | ((const struct cred *)(rcu_dereference_check((task)->real_cred, rcu_read_lock_held() || lockdep_tasklist_lock_is_held()))) | 283 | ({ \ |
| 283 | 284 | const struct task_struct *__t = (task); \ | |
| 284 | /** | 285 | rcu_dereference_check(__t->real_cred, \ |
| 285 | * get_task_cred - Get another task's objective credentials | 286 | rcu_read_lock_held() || \ |
| 286 | * @task: The task to query | 287 | task_is_dead(__t)); \ |
| 287 | * | 288 | }) |
| 288 | * Get the objective credentials of a task, pinning them so that they can't go | ||
| 289 | * away. Accessing a task's credentials directly is not permitted. | ||
| 290 | * | ||
| 291 | * The caller must make sure task doesn't go away, either by holding a ref on | ||
| 292 | * task or by holding tasklist_lock to prevent it from being unlinked. | ||
| 293 | */ | ||
| 294 | #define get_task_cred(task) \ | ||
| 295 | ({ \ | ||
| 296 | struct cred *__cred; \ | ||
| 297 | rcu_read_lock(); \ | ||
| 298 | __cred = (struct cred *) __task_cred((task)); \ | ||
| 299 | get_cred(__cred); \ | ||
| 300 | rcu_read_unlock(); \ | ||
| 301 | __cred; \ | ||
| 302 | }) | ||
| 303 | 289 | ||
| 304 | /** | 290 | /** |
| 305 | * get_current_cred - Get the current task's subjective credentials | 291 | * get_current_cred - Get the current task's subjective credentials |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 747fcaedddb7..0478888c6899 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -214,6 +214,7 @@ extern char ___assert_task_state[1 - 2*!!( | |||
| 214 | 214 | ||
| 215 | #define task_is_traced(task) ((task->state & __TASK_TRACED) != 0) | 215 | #define task_is_traced(task) ((task->state & __TASK_TRACED) != 0) |
| 216 | #define task_is_stopped(task) ((task->state & __TASK_STOPPED) != 0) | 216 | #define task_is_stopped(task) ((task->state & __TASK_STOPPED) != 0) |
| 217 | #define task_is_dead(task) ((task)->exit_state != 0) | ||
| 217 | #define task_is_stopped_or_traced(task) \ | 218 | #define task_is_stopped_or_traced(task) \ |
| 218 | ((task->state & (__TASK_STOPPED | __TASK_TRACED)) != 0) | 219 | ((task->state & (__TASK_STOPPED | __TASK_TRACED)) != 0) |
| 219 | #define task_contributes_to_load(task) \ | 220 | #define task_contributes_to_load(task) \ |
