drm/radeon/kms: forbid big bo allocation (fdo 31708) v3
[pandora-kernel.git] / kernel / user_namespace.c
index b2d70d3..2591583 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/nsproxy.h>
 #include <linux/slab.h>
 #include <linux/user_namespace.h>
+#include <linux/highuid.h>
 #include <linux/cred.h>
 
 /*
@@ -82,3 +83,46 @@ void free_user_ns(struct kref *kref)
        schedule_work(&ns->destroyer);
 }
 EXPORT_SYMBOL(free_user_ns);
+
+uid_t user_ns_map_uid(struct user_namespace *to, const struct cred *cred, uid_t uid)
+{
+       struct user_namespace *tmp;
+
+       if (likely(to == cred->user->user_ns))
+               return uid;
+
+
+       /* Is cred->user the creator of the target user_ns
+        * or the creator of one of it's parents?
+        */
+       for ( tmp = to; tmp != &init_user_ns;
+             tmp = tmp->creator->user_ns ) {
+               if (cred->user == tmp->creator) {
+                       return (uid_t)0;
+               }
+       }
+
+       /* No useful relationship so no mapping */
+       return overflowuid;
+}
+
+gid_t user_ns_map_gid(struct user_namespace *to, const struct cred *cred, gid_t gid)
+{
+       struct user_namespace *tmp;
+
+       if (likely(to == cred->user->user_ns))
+               return gid;
+
+       /* Is cred->user the creator of the target user_ns
+        * or the creator of one of it's parents?
+        */
+       for ( tmp = to; tmp != &init_user_ns;
+             tmp = tmp->creator->user_ns ) {
+               if (cred->user == tmp->creator) {
+                       return (gid_t)0;
+               }
+       }
+
+       /* No useful relationship so no mapping */
+       return overflowgid;
+}