NetLabel: Cleanup the LSM domain hash functions
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / net / netlabel / netlabel_domainhash.c
index b3675bd7db334af0e19ee9746c55775664104ec1..1f8f7ace790e7429ad0062c9f6044817a0ab85b6 100644 (file)
@@ -109,17 +109,14 @@ static u32 netlbl_domhsh_hash(const char *key)
 /**
  * netlbl_domhsh_search - Search for a domain entry
  * @domain: the domain
- * @def: return default if no match is found
  *
  * Description:
  * Searches the domain hash table and returns a pointer to the hash table
- * entry if found, otherwise NULL is returned.  If @def is non-zero and a
- * match is not found in the domain hash table the default mapping is returned
- * if it exists.  The caller is responsibile for the rcu hash table locks
- * (i.e. the caller much call rcu_read_[un]lock()).
+ * entry if found, otherwise NULL is returned.  The caller is responsibile for
+ * the rcu hash table locks (i.e. the caller much call rcu_read_[un]lock()).
  *
  */
-static struct netlbl_dom_map *netlbl_domhsh_search(const char *domain, u32 def)
+static struct netlbl_dom_map *netlbl_domhsh_search(const char *domain)
 {
        u32 bkt;
        struct netlbl_dom_map *iter;
@@ -133,10 +130,31 @@ static struct netlbl_dom_map *netlbl_domhsh_search(const char *domain, u32 def)
                                return iter;
        }
 
-       if (def != 0) {
-               iter = rcu_dereference(netlbl_domhsh_def);
-               if (iter != NULL && iter->valid)
-                       return iter;
+       return NULL;
+}
+
+/**
+ * netlbl_domhsh_search_def - Search for a domain entry
+ * @domain: the domain
+ * @def: return default if no match is found
+ *
+ * Description:
+ * Searches the domain hash table and returns a pointer to the hash table
+ * entry if an exact match is found, if an exact match is not present in the
+ * hash table then the default entry is returned if valid otherwise NULL is
+ * returned.  The caller is responsibile for the rcu hash table locks
+ * (i.e. the caller much call rcu_read_[un]lock()).
+ *
+ */
+static struct netlbl_dom_map *netlbl_domhsh_search_def(const char *domain)
+{
+       struct netlbl_dom_map *entry;
+
+       entry = netlbl_domhsh_search(domain);
+       if (entry == NULL) {
+               entry = rcu_dereference(netlbl_domhsh_def);
+               if (entry != NULL && entry->valid)
+                       return entry;
        }
 
        return NULL;
@@ -224,7 +242,7 @@ int netlbl_domhsh_add(struct netlbl_dom_map *entry,
        if (entry->domain != NULL) {
                bkt = netlbl_domhsh_hash(entry->domain);
                spin_lock(&netlbl_domhsh_lock);
-               if (netlbl_domhsh_search(entry->domain, 0) == NULL)
+               if (netlbl_domhsh_search(entry->domain) == NULL)
                        list_add_tail_rcu(&entry->list,
                                    &rcu_dereference(netlbl_domhsh)->tbl[bkt]);
                else
@@ -307,7 +325,10 @@ int netlbl_domhsh_remove(const char *domain, struct netlbl_audit *audit_info)
        struct audit_buffer *audit_buf;
 
        rcu_read_lock();
-       entry = netlbl_domhsh_search(domain, (domain != NULL ? 0 : 1));
+       if (domain)
+               entry = netlbl_domhsh_search(domain);
+       else
+               entry = netlbl_domhsh_search_def(domain);
        if (entry == NULL)
                goto remove_return;
        switch (entry->type) {
@@ -377,7 +398,7 @@ int netlbl_domhsh_remove_default(struct netlbl_audit *audit_info)
  */
 struct netlbl_dom_map *netlbl_domhsh_getentry(const char *domain)
 {
-       return netlbl_domhsh_search(domain, 1);
+       return netlbl_domhsh_search_def(domain);
 }
 
 /**