mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-04-02 20:33:54 +00:00
fix rcu annotations noise in cred.h
task->cred is declared as __rcu, and access to other tasks' ->cred is, indeed, protected. Access to current->cred does not need rcu_dereference() at all, since only the task itself can change its ->cred. sparse, of course, has no way of knowing that... Add force-cast in current_cred(), make current_fsuid() et.al. use it. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
7813b94a54
commit
3295514841
1 changed files with 6 additions and 5 deletions
|
@ -265,10 +265,11 @@ static inline void put_cred(const struct cred *_cred)
|
||||||
/**
|
/**
|
||||||
* current_cred - Access the current task's subjective credentials
|
* current_cred - Access the current task's subjective credentials
|
||||||
*
|
*
|
||||||
* Access the subjective credentials of the current task.
|
* Access the subjective credentials of the current task. RCU-safe,
|
||||||
|
* since nobody else can modify it.
|
||||||
*/
|
*/
|
||||||
#define current_cred() \
|
#define current_cred() \
|
||||||
(current->cred)
|
(*(__force struct cred **)¤t->cred)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __task_cred - Access a task's objective credentials
|
* __task_cred - Access a task's objective credentials
|
||||||
|
@ -307,7 +308,7 @@ static inline void put_cred(const struct cred *_cred)
|
||||||
({ \
|
({ \
|
||||||
struct user_struct *__u; \
|
struct user_struct *__u; \
|
||||||
struct cred *__cred; \
|
struct cred *__cred; \
|
||||||
__cred = (struct cred *) current_cred(); \
|
__cred = current_cred(); \
|
||||||
__u = get_uid(__cred->user); \
|
__u = get_uid(__cred->user); \
|
||||||
__u; \
|
__u; \
|
||||||
})
|
})
|
||||||
|
@ -322,7 +323,7 @@ static inline void put_cred(const struct cred *_cred)
|
||||||
({ \
|
({ \
|
||||||
struct group_info *__groups; \
|
struct group_info *__groups; \
|
||||||
struct cred *__cred; \
|
struct cred *__cred; \
|
||||||
__cred = (struct cred *) current_cred(); \
|
__cred = current_cred(); \
|
||||||
__groups = get_group_info(__cred->group_info); \
|
__groups = get_group_info(__cred->group_info); \
|
||||||
__groups; \
|
__groups; \
|
||||||
})
|
})
|
||||||
|
@ -341,7 +342,7 @@ static inline void put_cred(const struct cred *_cred)
|
||||||
|
|
||||||
#define current_cred_xxx(xxx) \
|
#define current_cred_xxx(xxx) \
|
||||||
({ \
|
({ \
|
||||||
current->cred->xxx; \
|
current_cred()->xxx; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define current_uid() (current_cred_xxx(uid))
|
#define current_uid() (current_cred_xxx(uid))
|
||||||
|
|
Loading…
Add table
Reference in a new issue