Skip to content

Commit 4d5b553

Browse files
toddkjospcmoore
authored andcommitted
binder: use cred instead of task for getsecid
Use the 'struct cred' saved at binder_open() to lookup the security ID via security_cred_getsecid(). This ensures that the security context that opened binder is the one used to generate the secctx. Cc: [email protected] # 5.4+ Fixes: ec74136 ("binder: create node flag to request sender's security context") Signed-off-by: Todd Kjos <[email protected]> Suggested-by: Stephen Smalley <[email protected]> Reported-by: kernel test robot <[email protected]> Acked-by: Casey Schaufler <[email protected]> Signed-off-by: Paul Moore <[email protected]>
1 parent 52f8869 commit 4d5b553

File tree

2 files changed

+6
-10
lines changed

2 files changed

+6
-10
lines changed

drivers/android/binder.c

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2713,16 +2713,7 @@ static void binder_transaction(struct binder_proc *proc,
27132713
u32 secid;
27142714
size_t added_size;
27152715

2716-
/*
2717-
* Arguably this should be the task's subjective LSM secid but
2718-
* we can't reliably access the subjective creds of a task
2719-
* other than our own so we must use the objective creds, which
2720-
* are safe to access. The downside is that if a task is
2721-
* temporarily overriding it's creds it will not be reflected
2722-
* here; however, it isn't clear that binder would handle that
2723-
* case well anyway.
2724-
*/
2725-
security_task_getsecid_obj(proc->tsk, &secid);
2716+
security_cred_getsecid(proc->cred, &secid);
27262717
ret = security_secid_to_secctx(secid, &secctx, &secctx_sz);
27272718
if (ret) {
27282719
return_error = BR_FAILED_REPLY;

include/linux/security.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,6 +1041,11 @@ static inline void security_transfer_creds(struct cred *new,
10411041
{
10421042
}
10431043

1044+
static inline void security_cred_getsecid(const struct cred *c, u32 *secid)
1045+
{
1046+
*secid = 0;
1047+
}
1048+
10441049
static inline int security_kernel_act_as(struct cred *cred, u32 secid)
10451050
{
10461051
return 0;

0 commit comments

Comments
 (0)