mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-03 17:51:57 +09:00
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:
committed by
Dongjin Kim
parent
fb2cfca28c
commit
078bcb4b86
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user