X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=wrapper%2Fuser_namespace.h;h=851674b06759f91c680c320b8290248dd3df0a13;hb=c88f762e4c83e3ff148f8e7962d3d9c52d64ff4e;hp=701f3189b5c97f8e1f006c175e0bbd755d66b052;hpb=dc923e75c174ee4e7a80e5f9af1dfd39fb8346ea;p=lttng-modules.git diff --git a/wrapper/user_namespace.h b/wrapper/user_namespace.h index 701f3189..851674b0 100644 --- a/wrapper/user_namespace.h +++ b/wrapper/user_namespace.h @@ -27,6 +27,30 @@ #define lttng_current_vxxgid(xxx) \ (from_kgid_munged(current_user_ns(), current_##xxx())) +static inline +uid_t lttng_task_vuid(struct task_struct *p, struct user_namespace *ns) +{ + uid_t uid; + kuid_t kuid; + + kuid = task_cred_xxx(p, uid); + uid = from_kuid_munged(ns, kuid); + + return uid; +} + +static inline +gid_t lttng_task_vgid(struct task_struct *p, struct user_namespace *ns) +{ + gid_t gid; + kgid_t kgid; + + kgid = task_cred_xxx(p, gid); + gid = from_kgid_munged(ns, kgid); + + return gid; +} + #else #define lttng_current_xxuid(xxx) (current_##xxx()) @@ -38,6 +62,37 @@ #define lttng_current_vxxgid(xxx) \ (user_ns_map_gid(current_user_ns(), current_cred(), current_##xxx())) + +static inline +uid_t lttng_task_vuid(struct task_struct *p, struct user_namespace *ns) +{ + uid_t uid; + + /* + * __task_cred requires the RCU readlock be held + */ + rcu_read_lock(); + uid = user_ns_map_uid(ns, __task_cred(p), __task_cred(p)->uid); + rcu_read_unlock(); + + return uid; +} + +static inline +gid_t lttng_task_vgid(struct task_struct *p, struct user_namespace *ns) +{ + gid_t gid; + + /* + * __task_cred requires the RCU readlock be held + */ + rcu_read_lock(); + gid = user_ns_map_gid(ns, __task_cred(p), __task_cred(p)->gid); + rcu_read_unlock(); + + return gid; +} + #endif #define lttng_current_uid() (lttng_current_xxuid(uid))