|
@@ -47,7 +47,7 @@ static HLIST_HEAD(binder_dead_nodes);
|
|
|
static struct dentry *binder_debugfs_dir_entry_root;
|
|
|
static struct dentry *binder_debugfs_dir_entry_proc;
|
|
|
static struct binder_node *binder_context_mgr_node;
|
|
|
-static uid_t binder_context_mgr_uid = -1;
|
|
|
+static kuid_t binder_context_mgr_uid = INVALID_UID;
|
|
|
static int binder_last_id;
|
|
|
static struct workqueue_struct *binder_deferred_workqueue;
|
|
|
|
|
@@ -356,7 +356,7 @@ struct binder_transaction {
|
|
|
unsigned int flags;
|
|
|
long priority;
|
|
|
long saved_priority;
|
|
|
- uid_t sender_euid;
|
|
|
+ kuid_t sender_euid;
|
|
|
};
|
|
|
|
|
|
static void
|
|
@@ -2427,7 +2427,7 @@ retry:
|
|
|
}
|
|
|
tr.code = t->code;
|
|
|
tr.flags = t->flags;
|
|
|
- tr.sender_euid = t->sender_euid;
|
|
|
+ tr.sender_euid = from_kuid(current_user_ns(), t->sender_euid);
|
|
|
|
|
|
if (t->from) {
|
|
|
struct task_struct *sender = t->from->proc->tsk;
|
|
@@ -2705,12 +2705,12 @@ static long binder_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
|
|
ret = -EBUSY;
|
|
|
goto err;
|
|
|
}
|
|
|
- if (binder_context_mgr_uid != -1) {
|
|
|
- if (binder_context_mgr_uid != current->cred->euid) {
|
|
|
+ if (uid_valid(binder_context_mgr_uid)) {
|
|
|
+ if (!uid_eq(binder_context_mgr_uid, current->cred->euid)) {
|
|
|
pr_err("binder: BINDER_SET_"
|
|
|
"CONTEXT_MGR bad uid %d != %d\n",
|
|
|
- current->cred->euid,
|
|
|
- binder_context_mgr_uid);
|
|
|
+ from_kuid(&init_user_ns, current->cred->euid),
|
|
|
+ from_kuid(&init_user_ns, binder_context_mgr_uid));
|
|
|
ret = -EPERM;
|
|
|
goto err;
|
|
|
}
|