OSDN Git Service

apparmor: add strn version of aa_find_ns
authorJohn Johansen <john.johansen@canonical.com>
Mon, 16 Jan 2017 08:42:22 +0000 (00:42 -0800)
committerJohn Johansen <john.johansen@canonical.com>
Mon, 16 Jan 2017 09:18:20 +0000 (01:18 -0800)
Signed-off-by: John Johansen <john.johansen@canonical.com>
security/apparmor/include/policy_ns.h
security/apparmor/policy_ns.c

index 323752c..381f8b0 100644 (file)
@@ -82,6 +82,7 @@ void aa_free_root_ns(void);
 void aa_free_ns_kref(struct kref *kref);
 
 struct aa_ns *aa_find_ns(struct aa_ns *root, const char *name);
+struct aa_ns *aa_findn_ns(struct aa_ns *root, const char *name, size_t n);
 struct aa_ns *aa_prepare_ns(const char *name);
 void __aa_remove_ns(struct aa_ns *ns);
 
@@ -119,18 +120,24 @@ static inline void aa_put_ns(struct aa_ns *ns)
 }
 
 /**
- * __aa_find_ns - find a namespace on a list by @name
+ * __aa_findn_ns - find a namespace on a list by @name
  * @head: list to search for namespace on  (NOT NULL)
  * @name: name of namespace to look for  (NOT NULL)
- *
+ * @n: length of @name
  * Returns: unrefcounted namespace
  *
  * Requires: rcu_read_lock be held
  */
+static inline struct aa_ns *__aa_findn_ns(struct list_head *head,
+                                         const char *name, size_t n)
+{
+       return (struct aa_ns *)__policy_strn_find(head, name, n);
+}
+
 static inline struct aa_ns *__aa_find_ns(struct list_head *head,
                                         const char *name)
 {
-       return (struct aa_ns *)__policy_find(head, name);
+       return __aa_findn_ns(head, name, strlen(name));
 }
 
 #endif /* AA_NAMESPACE_H */
index 71fbd14..9746643 100644 (file)
@@ -139,27 +139,43 @@ void aa_free_ns(struct aa_ns *ns)
 }
 
 /**
- * aa_find_ns  -  look up a profile namespace on the namespace list
+ * aa_findn_ns  -  look up a profile namespace on the namespace list
  * @root: namespace to search in  (NOT NULL)
  * @name: name of namespace to find  (NOT NULL)
+ * @n: length of @name
  *
  * Returns: a refcounted namespace on the list, or NULL if no namespace
  *          called @name exists.
  *
  * refcount released by caller
  */
-struct aa_ns *aa_find_ns(struct aa_ns *root, const char *name)
+struct aa_ns *aa_findn_ns(struct aa_ns *root, const char *name, size_t n)
 {
        struct aa_ns *ns = NULL;
 
        rcu_read_lock();
-       ns = aa_get_ns(__aa_find_ns(&root->sub_ns, name));
+       ns = aa_get_ns(__aa_findn_ns(&root->sub_ns, name, n));
        rcu_read_unlock();
 
        return ns;
 }
 
 /**
+ * aa_find_ns  -  look up a profile namespace on the namespace list
+ * @root: namespace to search in  (NOT NULL)
+ * @name: name of namespace to find  (NOT NULL)
+ *
+ * Returns: a refcounted namespace on the list, or NULL if no namespace
+ *          called @name exists.
+ *
+ * refcount released by caller
+ */
+struct aa_ns *aa_find_ns(struct aa_ns *root, const char *name)
+{
+       return aa_findn_ns(root, name, strlen(name));
+}
+
+/**
  * aa_prepare_ns - find an existing or create a new namespace of @name
  * @name: the namespace to find or add  (MAYBE NULL)
  *