]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - security/keys/key.c
[PATCH] selinux: add hooks for key subsystem
[linux-2.6-omap-h63xx.git] / security / keys / key.c
index a057e3311aad662f1ebcd8e79919fe76ea947e4b..14a15abb77355700c05b2f938d485d6182d27027 100644 (file)
@@ -211,12 +211,12 @@ static inline void key_alloc_serial(struct key *key)
                        key->serial = 2;
                key_serial_next = key->serial + 1;
 
-               if (!parent->rb_parent)
+               if (!rb_parent(parent))
                        p = &key_serial_tree.rb_node;
-               else if (parent->rb_parent->rb_left == parent)
-                       p = &parent->rb_parent->rb_left;
+               else if (rb_parent(parent)->rb_left == parent)
+                       p = &(rb_parent(parent)->rb_left);
                else
-                       p = &parent->rb_parent->rb_right;
+                       p = &(rb_parent(parent)->rb_right);
 
                parent = rb_next(parent);
                if (!parent)
@@ -247,8 +247,8 @@ static inline void key_alloc_serial(struct key *key)
  *   instantiate the key or discard it before returning
  */
 struct key *key_alloc(struct key_type *type, const char *desc,
-                     uid_t uid, gid_t gid, key_perm_t perm,
-                     int not_in_quota)
+                     uid_t uid, gid_t gid, struct task_struct *ctx,
+                     key_perm_t perm, int not_in_quota)
 {
        struct key_user *user = NULL;
        struct key *key;
@@ -318,7 +318,7 @@ struct key *key_alloc(struct key_type *type, const char *desc,
 #endif
 
        /* let the security module know about the key */
-       ret = security_key_alloc(key);
+       ret = security_key_alloc(key, ctx);
        if (ret < 0)
                goto security_error;
 
@@ -785,6 +785,10 @@ key_ref_t key_create_or_update(key_ref_t keyring_ref,
 
        key_check(keyring);
 
+       key_ref = ERR_PTR(-ENOTDIR);
+       if (keyring->type != &key_type_keyring)
+               goto error_2;
+
        down_write(&keyring->sem);
 
        /* if we're going to allocate a new key, we're going to have
@@ -818,7 +822,7 @@ key_ref_t key_create_or_update(key_ref_t keyring_ref,
 
        /* allocate a new key */
        key = key_alloc(ktype, description, current->fsuid, current->fsgid,
-                       perm, not_in_quota);
+                       current, perm, not_in_quota);
        if (IS_ERR(key)) {
                key_ref = ERR_PTR(PTR_ERR(key));
                goto error_3;