diff -urNp a/runtime/linux/task_finder.c b/runtime/linux/task_finder.c --- a/runtime/linux/task_finder.c 2013-05-21 15:51:55.000000000 +0400 +++ b/runtime/linux/task_finder.c 2013-05-21 16:45:47.634899524 +0400 @@ -23,6 +23,10 @@ #ifndef STAPCONF_TASK_UID #include #endif +#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS +#include +#include +#endif #include "syscall.h" #include "utrace_compatibility.h" #include "task_finder_map.c" @@ -851,8 +855,12 @@ __stp_utrace_attach_match_filename(struc #ifdef STAPCONF_TASK_UID tsk_euid = tsk->euid; #else +#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS + tsk_euid = from_kuid_munged(current_user_ns(), task_euid(tsk)); +#else tsk_euid = task_euid(tsk); #endif +#endif filelen = strlen(filename); list_for_each(tgt_node, &__stp_task_finder_list) { int rc; @@ -1660,8 +1668,12 @@ stap_start_task_finder(void) #ifdef STAPCONF_TASK_UID tsk_euid = tsk->euid; #else +#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS + tsk_euid = from_kuid_munged(current_user_ns(), task_euid(tsk)); +#else tsk_euid = task_euid(tsk); #endif +#endif mmpathlen = strlen(mmpath); list_for_each(tgt_node, &__stp_task_finder_list) { struct stap_task_finder_target *tgt; diff -urNp a/runtime/linux/task_finder2.c b/runtime/linux/task_finder2.c --- a/runtime/linux/task_finder2.c 2013-05-21 15:51:55.000000000 +0400 +++ b/runtime/linux/task_finder2.c 2013-05-21 16:45:47.638232907 +0400 @@ -9,6 +9,10 @@ #ifndef STAPCONF_TASK_UID #include #endif +#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS +#include +#include +#endif #include "syscall.h" #include "task_finder_map.c" #include "task_finder_vma.c" @@ -813,8 +817,12 @@ __stp_utrace_attach_match_filename(struc #ifdef STAPCONF_TASK_UID tsk_euid = tsk->euid; #else +#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS + tsk_euid = from_kuid_munged(current_user_ns(), task_euid(tsk)); +#else tsk_euid = task_euid(tsk); #endif +#endif filelen = strlen(filename); list_for_each(tgt_node, &__stp_task_finder_list) { int rc; @@ -1699,8 +1707,12 @@ stap_start_task_finder(void) #ifdef STAPCONF_TASK_UID tsk_euid = tsk->euid; #else +#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS + tsk_euid = from_kuid_munged(current_user_ns(), task_euid(tsk)); +#else tsk_euid = task_euid(tsk); #endif +#endif mmpathlen = strlen(mmpath); list_for_each(tgt_node, &__stp_task_finder_list) { struct stap_task_finder_target *tgt; diff -urNp a/runtime/transport/control.c b/runtime/transport/control.c --- a/runtime/transport/control.c 2013-05-21 15:51:54.000000000 +0400 +++ b/runtime/transport/control.c 2013-05-21 16:45:47.638232907 +0400 @@ -14,6 +14,10 @@ #include "symbols.c" #include #include +#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS +#include +#include +#endif static _stp_mempool_t *_stp_pool_q; static struct list_head _stp_ctl_ready_q; @@ -34,8 +38,12 @@ static ssize_t _stp_ctl_write_cmd(struct #ifdef STAPCONF_TASK_UID uid_t euid = current->euid; #else +#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS + uid_t euid = from_kuid_munged(current_user_ns(), current_euid()); +#else uid_t euid = current_euid(); #endif +#endif if (count < sizeof(u32)) return 0; diff -urNp a/runtime/transport/debugfs.c b/runtime/transport/debugfs.c --- a/runtime/transport/debugfs.c 2013-05-21 15:51:54.000000000 +0400 +++ b/runtime/transport/debugfs.c 2013-05-21 16:45:47.638232907 +0400 @@ -48,8 +48,8 @@ static int _stp_register_ctl_channel_fs( return -1; } - _stp_cmd_file->d_inode->i_uid = _stp_uid; - _stp_cmd_file->d_inode->i_gid = _stp_gid; + _stp_cmd_file->d_inode->i_uid = KUIDT_INIT(_stp_uid); + _stp_cmd_file->d_inode->i_gid = KGIDT_INIT(_stp_gid); return 0; } diff -urNp a/runtime/transport/relay_v2.c b/runtime/transport/relay_v2.c --- a/runtime/transport/relay_v2.c 2013-05-21 15:51:54.000000000 +0400 +++ b/runtime/transport/relay_v2.c 2013-05-21 16:45:47.638232907 +0400 @@ -234,8 +234,8 @@ __stp_relay_create_buf_file_callback(con file = NULL; } else if (file) { - file->d_inode->i_uid = _stp_uid; - file->d_inode->i_gid = _stp_gid; + file->d_inode->i_uid = KUIDT_INIT(_stp_uid); + file->d_inode->i_gid = KGIDT_INIT(_stp_gid); } return file; } @@ -303,8 +303,8 @@ static int _stp_transport_data_fs_init(v goto err; } - _stp_relay_data.dropped_file->d_inode->i_uid = _stp_uid; - _stp_relay_data.dropped_file->d_inode->i_gid = _stp_gid; + _stp_relay_data.dropped_file->d_inode->i_uid = KUIDT_INIT(_stp_uid); + _stp_relay_data.dropped_file->d_inode->i_gid = KGIDT_INIT(_stp_gid); /* Create "trace" file. */ npages = _stp_subbuf_size * _stp_nsubbufs; diff -urNp a/runtime/transport/transport.c b/runtime/transport/transport.c --- a/runtime/transport/transport.c 2013-05-21 15:51:54.000000000 +0400 +++ b/runtime/transport/transport.c 2013-05-21 16:45:47.638232907 +0400 @@ -20,6 +20,10 @@ #include #include #include +#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS +#include +#include +#endif static int _stp_exit_flag = 0; @@ -336,9 +340,14 @@ static int _stp_transport_init(void) _stp_uid = current->uid; _stp_gid = current->gid; #else +#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS + _stp_uid = from_kuid_munged(current_user_ns(), current_uid()); + _stp_gid = from_kgid_munged(current_user_ns(), current_gid()); +#else _stp_uid = current_uid(); _stp_gid = current_gid(); #endif +#endif /* PR13489, missing inode-uprobes symbol-export workaround */ #if !defined(STAPCONF_TASK_USER_REGSET_VIEW_EXPORTED) && !defined(STAPCONF_UTRACE_REGSET) /* RHEL5 era utrace */