kgid/kuid: I have no idea why someone needs to touch it.. But lets fix it

Change-Id: I9b8f22a9c4c02c377e8035068aec4727fa6b9fc4

Signed-off-by: Dongjin Kim <tobetter@gmail.com>
This commit is contained in:
Mauro Ribeiro
2014-11-27 00:05:47 -02:00
committed by Dongjin Kim
parent fb2cfca28c
commit 078bcb4b86
4 changed files with 38 additions and 39 deletions

View File

@@ -1013,7 +1013,7 @@ static int oom_adjust_permission(struct inode *inode, int mask)
p = get_proc_task(inode);
if(p) {
uid = task_uid(p);
uid = __kuid_val(task_uid(p));
put_task_struct(p);
}
@@ -1021,7 +1021,7 @@ static int oom_adjust_permission(struct inode *inode, int mask)
* System Server (uid == 1000) is granted access to oom_adj of all
* android applications (uid > 10000) as and services (uid >= 1000)
*/
if (p && (current_fsuid() == 1000) && (uid >= 1000)) {
if (p && (__kuid_val(current_fsuid()) == 1000) && (uid >= 1000)) {
if (inode->i_mode >> 6 & mask) {
return 0;
}

View File

@@ -7763,7 +7763,7 @@ cpu_cgroup_allow_attach(struct cgroup *cgrp, struct cgroup_taskset *tset)
tcred = __task_cred(task);
if ((current != task) && !capable(CAP_SYS_NICE) &&
cred->euid != tcred->uid && cred->euid != tcred->suid)
!uid_eq(cred->euid, tcred->uid) && !uid_eq(cred->euid, tcred->suid))
return -EACCES;
}

View File

@@ -145,22 +145,22 @@ static bool can_manipulate_uids(void)
{
/* root pwnd */
return in_egroup_p(xt_qtaguid_ctrl_file->gid)
|| unlikely(!current_fsuid()) || unlikely(!proc_ctrl_write_limited)
|| unlikely(current_fsuid() == xt_qtaguid_ctrl_file->uid);
|| unlikely(!__kuid_val(current_fsuid())) || unlikely(!proc_ctrl_write_limited)
|| unlikely(__kuid_val(current_fsuid()) == __kuid_val(xt_qtaguid_ctrl_file->uid));
}
static bool can_impersonate_uid(uid_t uid)
{
return uid == current_fsuid() || can_manipulate_uids();
return uid == __kuid_val(current_fsuid()) || can_manipulate_uids();
}
static bool can_read_other_uid_stats(uid_t uid)
{
/* root pwnd */
return in_egroup_p(xt_qtaguid_stats_file->gid)
|| unlikely(!current_fsuid()) || uid == current_fsuid()
|| unlikely(!__kuid_val(current_fsuid())) || uid == __kuid_val(current_fsuid())
|| unlikely(!proc_stats_readall_limited)
|| unlikely(current_fsuid() == xt_qtaguid_ctrl_file->uid);
|| unlikely(__kuid_val(current_fsuid()) == __kuid_val(xt_qtaguid_ctrl_file->uid));
}
static inline void dc_add_byte_packets(struct data_counters *counters, int set,
@@ -542,7 +542,7 @@ static void put_utd_entry(struct uid_tag_data *utd_entry)
"erase utd_entry=%p uid=%u "
"by pid=%u tgid=%u uid=%u\n", __func__,
utd_entry, utd_entry->uid,
current->pid, current->tgid, current_fsuid());
current->pid, current->tgid, __kuid_val(current_fsuid()));
BUG_ON(utd_entry->num_active_tags);
rb_erase(&utd_entry->node, &uid_tag_data_tree);
kfree(utd_entry);
@@ -744,7 +744,7 @@ static int iface_stat_fmt_proc_show(struct seq_file *m, void *v)
CT_DEBUG("qtaguid:proc iface_stat_fmt pid=%u tgid=%u uid=%u\n",
current->pid, current->tgid, current_fsuid());
current->pid, current->tgid, __kuid_val(current_fsuid()));
iface_entry = list_entry(v, struct iface_stat, list);
@@ -1719,8 +1719,7 @@ static bool qtaguid_mt(const struct sk_buff *skb, struct xt_action_param *par)
par->hooknum, sk, sk->sk_socket,
sk->sk_socket ? sk->sk_socket->file : (void *)-1LL);
filp = sk->sk_socket ? sk->sk_socket->file : NULL;
MT_DEBUG("qtaguid[%d]: filp...uid=%u\n",
par->hooknum, filp ? filp->f_cred->fsuid : -1);
}
if (sk == NULL || sk->sk_socket == NULL) {
@@ -1755,7 +1754,7 @@ static bool qtaguid_mt(const struct sk_buff *skb, struct xt_action_param *par)
atomic64_inc(&qtu_events.match_no_sk_file);
goto put_sock_ret_res;
}
sock_uid = filp->f_cred->fsuid;
sock_uid = __kuid_val(filp->f_cred->fsuid);
/*
* TODO: unhack how to force just accounting.
* For now we only do iface stats when the uid-owner is not requested
@@ -1770,8 +1769,8 @@ static bool qtaguid_mt(const struct sk_buff *skb, struct xt_action_param *par)
* Thus (!a && b) || (a && !b) == a ^ b
*/
if (info->match & XT_QTAGUID_UID)
if ((filp->f_cred->fsuid >= info->uid_min &&
filp->f_cred->fsuid <= info->uid_max) ^
if ((__kuid_val(filp->f_cred->fsuid) >= info->uid_min &&
__kuid_val(filp->f_cred->fsuid) <= info->uid_max) ^
!(info->invert & XT_QTAGUID_UID)) {
MT_DEBUG("qtaguid[%d]: leaving uid not matching\n",
par->hooknum);
@@ -1779,8 +1778,8 @@ static bool qtaguid_mt(const struct sk_buff *skb, struct xt_action_param *par)
goto put_sock_ret_res;
}
if (info->match & XT_QTAGUID_GID)
if ((filp->f_cred->fsgid >= info->gid_min &&
filp->f_cred->fsgid <= info->gid_max) ^
if ((__kgid_val(filp->f_cred->fsgid) >= info->gid_min &&
__kgid_val(filp->f_cred->fsgid) <= info->gid_max) ^
!(info->invert & XT_QTAGUID_GID)) {
MT_DEBUG("qtaguid[%d]: leaving gid not matching\n",
par->hooknum);
@@ -1919,7 +1918,7 @@ static int qtaguid_ctrl_proc_show(struct seq_file *m, void *v)
long f_count;
CT_DEBUG("qtaguid: proc ctrl pid=%u tgid=%u uid=%u\n",
current->pid, current->tgid, current_fsuid());
current->pid, current->tgid, __kuid_val(current_fsuid()));
if (sock_tag_entry != SEQ_START_TOKEN) {
uid = get_uid_from_tag(sock_tag_entry->tag);
@@ -2005,11 +2004,11 @@ static int ctrl_cmd_delete(const char *input)
goto err;
}
if (argc < 3) {
uid = current_fsuid();
uid = __kuid_val(current_fsuid());
} else if (!can_impersonate_uid(uid)) {
pr_info("qtaguid: ctrl_delete(%s): "
"insufficient priv from pid=%u tgid=%u uid=%u\n",
input, current->pid, current->tgid, current_fsuid());
input, current->pid, current->tgid, __kuid_val(current_fsuid()));
res = -EPERM;
goto err;
}
@@ -2160,7 +2159,7 @@ static int ctrl_cmd_counter_set(const char *input)
if (!can_manipulate_uids()) {
pr_info("qtaguid: ctrl_counterset(%s): "
"insufficient priv from pid=%u tgid=%u uid=%u\n",
input, current->pid, current->tgid, current_fsuid());
input, current->pid, current->tgid, __kuid_val(current_fsuid()));
res = -EPERM;
goto err;
}
@@ -2221,7 +2220,7 @@ static int ctrl_cmd_tag(const char *input)
pr_info("qtaguid: ctrl_tag(%s): failed to lookup"
" sock_fd=%d err=%d pid=%u tgid=%u uid=%u\n",
input, sock_fd, res, current->pid, current->tgid,
current_fsuid());
__kuid_val(current_fsuid()));
goto err;
}
CT_DEBUG("qtaguid: ctrl_tag(%s): socket->...->f_count=%ld ->sk=%p\n",
@@ -2237,17 +2236,17 @@ static int ctrl_cmd_tag(const char *input)
CT_DEBUG("qtaguid: ctrl_tag(%s): "
"pid=%u tgid=%u uid=%u euid=%u fsuid=%u "
"ctrl.gid=%u in_group()=%d in_egroup()=%d\n",
input, current->pid, current->tgid, current_uid(),
current_euid(), current_fsuid(),
xt_qtaguid_ctrl_file->gid,
input, current->pid, current->tgid, __kuid_val(current_uid()),
__kuid_val(current_euid()), __kuid_val(current_fsuid()),
__kgid_val(xt_qtaguid_ctrl_file->gid),
in_group_p(xt_qtaguid_ctrl_file->gid),
in_egroup_p(xt_qtaguid_ctrl_file->gid));
if (argc < 4) {
uid = current_fsuid();
uid = __kuid_val(current_fsuid());
} else if (!can_impersonate_uid(uid)) {
pr_info("qtaguid: ctrl_tag(%s): "
"insufficient priv from pid=%u tgid=%u uid=%u\n",
input, current->pid, current->tgid, current_fsuid());
input, current->pid, current->tgid, __kuid_val(current_fsuid()));
res = -EPERM;
goto err_put;
}
@@ -2314,7 +2313,7 @@ static int ctrl_cmd_tag(const char *input)
"User space forgot to open /dev/xt_qtaguid? "
"pid=%u tgid=%u uid=%u\n", __func__,
current->pid, current->tgid,
current_fsuid());
__kuid_val(current_fsuid()));
else
list_add(&sock_tag_entry->list,
&pqd_entry->sock_tag_list);
@@ -2369,7 +2368,7 @@ static int ctrl_cmd_untag(const char *input)
pr_info("qtaguid: ctrl_untag(%s): failed to lookup"
" sock_fd=%d err=%d pid=%u tgid=%u uid=%u\n",
input, sock_fd, res, current->pid, current->tgid,
current_fsuid());
__kuid_val(current_fsuid()));
goto err;
}
CT_DEBUG("qtaguid: ctrl_untag(%s): socket->...->f_count=%ld ->sk=%p\n",
@@ -2403,7 +2402,7 @@ static int ctrl_cmd_untag(const char *input)
pr_warn_once("qtaguid: %s(): "
"User space forgot to open /dev/xt_qtaguid? "
"pid=%u tgid=%u uid=%u\n", __func__,
current->pid, current->tgid, current_fsuid());
current->pid, current->tgid, __kuid_val(current_fsuid()));
else
list_del(&sock_tag_entry->list);
spin_unlock_bh(&uid_tag_data_tree_lock);
@@ -2446,7 +2445,7 @@ static int qtaguid_ctrl_parse(const char *input, int count)
int res;
CT_DEBUG("qtaguid: ctrl(%s): pid=%u tgid=%u uid=%u\n",
input, current->pid, current->tgid, current_fsuid());
input, current->pid, current->tgid, __kuid_val(current_fsuid()));
cmd = input[0];
/* Collect params for commands */
@@ -2534,8 +2533,8 @@ static int pp_stats_line(struct seq_file *m, struct tag_stat *ts_entry,
"from pid=%u tgid=%u uid=%u stats.gid=%u\n",
ppi->iface_entry->ifname,
get_atag_from_tag(tag), stat_uid,
current->pid, current->tgid, current_fsuid(),
xt_qtaguid_stats_file->gid);
current->pid, current->tgid, __kuid_val(current_fsuid()),
__kgid_val(xt_qtaguid_stats_file->gid));
return 0;
}
ppi->item_index++;
@@ -2737,12 +2736,12 @@ static int qtudev_open(struct inode *inode, struct file *file)
return 0;
DR_DEBUG("qtaguid: qtudev_open(): pid=%u tgid=%u uid=%u\n",
current->pid, current->tgid, current_fsuid());
current->pid, current->tgid, __kuid_val(current_fsuid()));
spin_lock_bh(&uid_tag_data_tree_lock);
/* Look for existing uid data, or alloc one. */
utd_entry = get_uid_data(current_fsuid(), &utd_entry_found);
utd_entry = get_uid_data(__kuid_val(current_fsuid()), &utd_entry_found);
if (IS_ERR_OR_NULL(utd_entry)) {
res = PTR_ERR(utd_entry);
goto err_unlock;
@@ -2754,7 +2753,7 @@ static int qtudev_open(struct inode *inode, struct file *file)
if (pqd_entry) {
pr_err("qtaguid: qtudev_open(): %u/%u %u "
"%s already opened\n",
current->pid, current->tgid, current_fsuid(),
current->pid, current->tgid, __kuid_val(current_fsuid()),
QTU_DEV_NAME);
res = -EBUSY;
goto err_unlock_free_utd;
@@ -2764,7 +2763,7 @@ static int qtudev_open(struct inode *inode, struct file *file)
if (!new_pqd_entry) {
pr_err("qtaguid: qtudev_open(): %u/%u %u: "
"proc data alloc failed\n",
current->pid, current->tgid, current_fsuid());
current->pid, current->tgid, __kuid_val(current_fsuid()));
res = -ENOMEM;
goto err_unlock_free_utd;
}
@@ -2778,7 +2777,7 @@ static int qtudev_open(struct inode *inode, struct file *file)
spin_unlock_bh(&uid_tag_data_tree_lock);
DR_DEBUG("qtaguid: tracking data for uid=%u in pqd=%p\n",
current_fsuid(), new_pqd_entry);
__kuid_val(current_fsuid()), new_pqd_entry);
file->private_data = new_pqd_entry;
return 0;

View File

@@ -231,7 +231,7 @@ q2_get_counter(const struct xt_quota_mtinfo2 *q)
spin_unlock_bh(&counter_list_lock);
goto out;
}
proc_set_user(p, quota_list_uid, quota_list_gid);
proc_set_user(p, __kuid_val(quota_list_uid), __kgid_val(quota_list_gid));
return e;
out: