]> err.no Git - linux-2.6/commitdiff
SELinux: ensure keys constant in hashtab_search
authorChad Sellers <csellers@tresys.com>
Mon, 6 Nov 2006 17:38:17 +0000 (12:38 -0500)
committerJames Morris <jmorris@namei.org>
Tue, 28 Nov 2006 17:04:37 +0000 (12:04 -0500)
Makes the key argument passed into hashtab_search and all the functions
it calls constant. These functions include hash table function pointers
hash_value and keycmp. The only implementations of these currently
are symhash and symcmp, which do not modify the key. The key parameter
should never be changed by any of these, so it should be const. This
is necessary to allow calling these functions with keys found in kernel
object class and permission definitions.

Signed-off-by: Chad Sellers <csellers@tresys.com>
Acked-by: Stephen Smalley <sds@tycho.nsa.gov>
Signed-off-by: James Morris <jmorris@namei.org>
security/selinux/ss/hashtab.c
security/selinux/ss/hashtab.h
security/selinux/ss/symtab.c

index 24e5ec957630a752c270d8583ac4a2b6f797d31b..77b530c3bbceee385634830d7c9f09f2f6fa8d44 100644 (file)
@@ -8,8 +8,8 @@
 #include <linux/errno.h>
 #include "hashtab.h"
 
-struct hashtab *hashtab_create(u32 (*hash_value)(struct hashtab *h, void *key),
-                               int (*keycmp)(struct hashtab *h, void *key1, void *key2),
+struct hashtab *hashtab_create(u32 (*hash_value)(struct hashtab *h, const void *key),
+                               int (*keycmp)(struct hashtab *h, const void *key1, const void *key2),
                                u32 size)
 {
        struct hashtab *p;
@@ -71,7 +71,7 @@ int hashtab_insert(struct hashtab *h, void *key, void *datum)
        return 0;
 }
 
-void *hashtab_search(struct hashtab *h, void *key)
+void *hashtab_search(struct hashtab *h, const void *key)
 {
        u32 hvalue;
        struct hashtab_node *cur;
index 4cc85816a718a25f62de9e4a5f830683fc8f509a..7e2ff3e3c6d220759c0d123f024c904dfc4b3d69 100644 (file)
@@ -22,9 +22,9 @@ struct hashtab {
        struct hashtab_node **htable;   /* hash table */
        u32 size;                       /* number of slots in hash table */
        u32 nel;                        /* number of elements in hash table */
-       u32 (*hash_value)(struct hashtab *h, void *key);
+       u32 (*hash_value)(struct hashtab *h, const void *key);
                                        /* hash function */
-       int (*keycmp)(struct hashtab *h, void *key1, void *key2);
+       int (*keycmp)(struct hashtab *h, const void *key1, const void *key2);
                                        /* key comparison function */
 };
 
@@ -39,8 +39,8 @@ struct hashtab_info {
  * Returns NULL if insufficent space is available or
  * the new hash table otherwise.
  */
-struct hashtab *hashtab_create(u32 (*hash_value)(struct hashtab *h, void *key),
-                               int (*keycmp)(struct hashtab *h, void *key1, void *key2),
+struct hashtab *hashtab_create(u32 (*hash_value)(struct hashtab *h, const void *key),
+                               int (*keycmp)(struct hashtab *h, const void *key1, const void *key2),
                                u32 size);
 
 /*
@@ -59,7 +59,7 @@ int hashtab_insert(struct hashtab *h, void *k, void *d);
  * Returns NULL if no entry has the specified key or
  * the datum of the entry otherwise.
  */
-void *hashtab_search(struct hashtab *h, void *k);
+void *hashtab_search(struct hashtab *h, const void *k);
 
 /*
  * Destroys the specified hash table.
index 24a10d36d3b664a939f2febfed902c072310e497..837658a98a5418080d9e7264c450e780ee939b7c 100644 (file)
@@ -9,9 +9,9 @@
 #include <linux/errno.h>
 #include "symtab.h"
 
-static unsigned int symhash(struct hashtab *h, void *key)
+static unsigned int symhash(struct hashtab *h, const void *key)
 {
-       char *p, *keyp;
+       const char *p, *keyp;
        unsigned int size;
        unsigned int val;
 
@@ -23,9 +23,9 @@ static unsigned int symhash(struct hashtab *h, void *key)
        return val & (h->size - 1);
 }
 
-static int symcmp(struct hashtab *h, void *key1, void *key2)
+static int symcmp(struct hashtab *h, const void *key1, const void *key2)
 {
-       char *keyp1, *keyp2;
+       const char *keyp1, *keyp2;
 
        keyp1 = key1;
        keyp2 = key2;