Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32955148 authored by Al Viro's avatar Al Viro Committed by Linus Torvalds
Browse files

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: default avatarAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 7813b94a
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -265,10 +265,11 @@ static inline void put_cred(const struct cred *_cred)
/**
 * 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() \
	(current->cred)
	(*(__force struct cred **)&current->cred)

/**
 * __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 cred *__cred;				\
	__cred = (struct cred *) current_cred();	\
	__cred = current_cred();			\
	__u = get_uid(__cred->user);			\
	__u;						\
})
@@ -322,7 +323,7 @@ static inline void put_cred(const struct cred *_cred)
({							\
	struct group_info *__groups;			\
	struct cred *__cred;				\
	__cred = (struct cred *) current_cred();	\
	__cred = current_cred();			\
	__groups = get_group_info(__cred->group_info);	\
	__groups;					\
})
@@ -341,7 +342,7 @@ static inline void put_cred(const struct cred *_cred)

#define current_cred_xxx(xxx)			\
({						\
	current->cred->xxx;			\
	current_cred()->xxx;			\
})

#define current_uid()		(current_cred_xxx(uid))