From 492131ff7564ebcd3afd0c01e4947b19e7d4e05d Mon Sep 17 00:00:00 2001 From: Abegail Jakop Date: Fri, 22 May 2015 14:10:03 -0400 Subject: [PATCH] remove ns comparison in [task_]ns_* tapsets turns out that the functions used to get the ns-specific values in the new tapsets will return a sufficient error value (0 or uid/guid overflow value) if the target task/current is not in the target pid/user namespace --- tapset/linux/context.stp | 38 +++++++++++++++++++------------------- tapset/linux/task.stp | 20 ++++++++++---------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/tapset/linux/context.stp b/tapset/linux/context.stp index 2e9ed8361..5a0f7ec2d 100644 --- a/tapset/linux/context.stp +++ b/tapset/linux/context.stp @@ -52,8 +52,8 @@ function ns_pid:long () if (target_ns_pid){ // use get_pid_task instead of pid_task since it'll handle locking. struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); - if(target_ns_task && task_active_pid_ns(current) == task_active_pid_ns(target_ns_task)) - STAP_RETVALUE = task_tgid_nr_ns(current, task_active_pid_ns(current)); + if(target_ns_task) + STAP_RETVALUE = task_tgid_nr_ns(current, task_active_pid_ns(target_ns_task)); } #else STAP_RETVALUE = -1; @@ -91,9 +91,9 @@ function ns_tid:long () rcu_read_unlock(); STAP_RETVALUE = -1; // set it to a valid pid if available if (target_ns_pid){ - struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); - if(target_ns_task && task_active_pid_ns(current) == task_active_pid_ns(target_ns_task)) - STAP_RETVALUE = task_pid_nr_ns(current, task_active_pid_ns(current)); + struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); // ABE does this call need any locks? + if(target_ns_task) + STAP_RETVALUE = task_pid_nr_ns(current, task_active_pid_ns(target_ns_task)); } #else STAP_RETVALUE = -1; @@ -135,8 +135,8 @@ function ns_ppid:long() STAP_RETVALUE = -1; // set it to a valid pid if available if (target_ns_pid){ struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); - if(target_ns_task && task_active_pid_ns(current) == task_active_pid_ns(target_ns_task)) - STAP_RETVALUE = task_tgid_nr_ns(current->parent, task_active_pid_ns(current)); + if(target_ns_task) + STAP_RETVALUE = task_tgid_nr_ns(current->parent, task_active_pid_ns(target_ns_task)); } #else STAP_RETVALUE = -1; @@ -182,8 +182,8 @@ function ns_pgrp:long () STAP_RETVALUE = -1; // set it to a valid pid if available if (target_ns_pid){ struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); - if(target_ns_task && task_active_pid_ns(current) == task_active_pid_ns(target_ns_task)) - STAP_RETVALUE = task_pgrp_nr_ns(current, task_active_pid_ns(current)); + if(target_ns_task) + STAP_RETVALUE = task_pgrp_nr_ns(current, task_active_pid_ns(target_ns_task)); } #else STAP_RETVALUE = -1; @@ -231,8 +231,8 @@ function ns_sid:long () STAP_RETVALUE = -1; // set it to a valid pid if available if (target_ns_pid){ struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); - if(target_ns_task && task_active_pid_ns(current) == task_active_pid_ns(target_ns_task)) - STAP_RETVALUE = task_session_nr_ns(current, task_active_pid_ns(current)); + if(target_ns_task) + STAP_RETVALUE = task_session_nr_ns(current, task_active_pid_ns(target_ns_task)); } #else STAP_RETVALUE = -1; @@ -293,8 +293,8 @@ function ns_gid:long () STAP_RETVALUE = -1; // set it to a valid pid if available if (target_ns_pid){ struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); - if(target_ns_task && task_cred_xxx(target_ns_task, user_ns) == task_cred_xxx(current, user_ns)) - STAP_RETVALUE = from_kgid_munged(task_cred_xxx(target_ns_task, user_ns), current_gid()); + if(target_ns_task) + STAP_RETVALUE = from_kgid_munged(task_cred_xxx(target_ns_task, user_ns), current_gid()); } #else STAP_RETVALUE = -1; @@ -340,8 +340,8 @@ function ns_egid:long () STAP_RETVALUE = -1; // set it to a valid pid if available if (target_ns_pid){ struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); - if(target_ns_task && task_cred_xxx(target_ns_task, user_ns) == task_cred_xxx(current, user_ns)) - STAP_RETVALUE = from_kgid_munged(task_cred_xxx(target_ns_task, user_ns), current_egid()); + if(target_ns_task) + STAP_RETVALUE = from_kgid_munged(task_cred_xxx(target_ns_task, user_ns), current_egid()); } #else STAP_RETVALUE = -1; @@ -387,8 +387,8 @@ function ns_uid:long () STAP_RETVALUE = -1; // set it to a valid pid if available if (target_ns_pid){ struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); - if(target_ns_task && task_cred_xxx(target_ns_task, user_ns) == task_cred_xxx(current, user_ns)) - STAP_RETVALUE = from_kuid_munged(task_cred_xxx(target_ns_task, user_ns), current_uid()); + if(target_ns_task) + STAP_RETVALUE = from_kuid_munged(task_cred_xxx(target_ns_task, user_ns), current_uid()); } #else STAP_RETVALUE = -1; @@ -434,8 +434,8 @@ function ns_euid:long () STAP_RETVALUE = -1; // set it to a valid pid if available if (target_ns_pid){ struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); - if(target_ns_task && task_cred_xxx(target_ns_task, user_ns) == task_cred_xxx(current, user_ns)) - STAP_RETVALUE = from_kuid_munged(task_cred_xxx(target_ns_task, user_ns), current_euid()); + if(target_ns_task) + STAP_RETVALUE = from_kuid_munged(task_cred_xxx(target_ns_task, user_ns), current_euid()); } #else STAP_RETVALUE = -1; diff --git a/tapset/linux/task.stp b/tapset/linux/task.stp index 924c09754..2f518cd23 100644 --- a/tapset/linux/task.stp +++ b/tapset/linux/task.stp @@ -235,7 +235,7 @@ function task_ns_pid:long (task:long) %{ /* pure */ STAP_RETVALUE = -1; // set it to a valid pid if available if (target_ns_pid){ struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); - if(target_ns_task && task_active_pid_ns(t) == task_active_pid_ns(target_ns_task)) + if(target_ns_task) STAP_RETVALUE = task_tgid_nr_ns(t, task_active_pid_ns(target_ns_task)); } #else @@ -322,7 +322,7 @@ function task_ns_tid:long (task:long)%{ /* pure */ STAP_RETVALUE = -1; // set it to a valid pid if available if (target_ns_pid){ struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); - if(target_ns_task && task_active_pid_ns(t) == task_active_pid_ns(target_ns_task)) + if(target_ns_task) STAP_RETVALUE = task_pid_nr_ns(t, task_active_pid_ns(target_ns_task)); } #else @@ -380,12 +380,12 @@ function task_ns_gid:long (task:long) %{ /* pure */ STAP_RETVALUE = -1; // set it to a valid pid if available if (target_ns_pid){ struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); - if(target_ns_task && task_cred_xxx(target_ns_task, user_ns) == task_cred_xxx(t, user_ns)){ + if(target_ns_task){ /* If task_gid() isn't defined, make our own. */ #if !defined(task_gid) && defined(task_cred_xxx) #define task_gid(task) (task_cred_xxx((task), gid)) #endif - STAP_RETVALUE = from_kgid_munged(task_cred_xxx(t, user_ns), task_gid(t)); + STAP_RETVALUE = from_kgid_munged(task_cred_xxx(target_ns_task, user_ns), task_gid(t)); } } #else @@ -442,12 +442,12 @@ function task_ns_egid:long (task:long) %{ /* pure */ STAP_RETVALUE = -1; // set it to a valid pid if available if (target_ns_pid){ struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); - if(target_ns_task && task_cred_xxx(target_ns_task, user_ns) == task_cred_xxx(t, user_ns)){ + if(target_ns_task){ /* If task_egid() isn't defined, make our own. */ #if !defined(task_egid) && defined(task_cred_xxx) #define task_egid(task) (task_cred_xxx((task), egid)) #endif - STAP_RETVALUE = from_kgid_munged(task_cred_xxx(t, user_ns), task_egid(t)); + STAP_RETVALUE = from_kgid_munged(task_cred_xxx(target_ns_task, user_ns), task_egid(t)); } } #else @@ -500,8 +500,8 @@ function task_ns_uid:long (task:long) %{ /* pure */ STAP_RETVALUE = -1; // set it to a valid pid if available if (target_ns_pid){ struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); - if(target_ns_task && task_cred_xxx(target_ns_task, user_ns) == task_cred_xxx(t, user_ns)) - STAP_RETVALUE = from_kuid_munged(task_cred_xxx(t, user_ns), task_uid(t)); + if(target_ns_task) + STAP_RETVALUE = from_kuid_munged(task_cred_xxx(target_ns_task, user_ns), task_uid(t)); } #else STAP_RETVALUE = -1; @@ -553,8 +553,8 @@ function task_ns_euid:long (task:long) %{ /* pure */ STAP_RETVALUE = -1; // set it to a valid pid if available if (target_ns_pid){ struct task_struct *target_ns_task = get_pid_task(target_ns_pid, PIDTYPE_PID); - if(target_ns_task && task_cred_xxx(target_ns_task, user_ns) == task_cred_xxx(t, user_ns)) - STAP_RETVALUE = from_kuid_munged(task_cred_xxx(t, user_ns), task_euid(t)); + if(target_ns_task) + STAP_RETVALUE = from_kuid_munged(task_cred_xxx(target_ns_task, user_ns), task_euid(t)); } #else STAP_RETVALUE = -1; -- 2.43.5