Commit bb242497 authored by Chad Sellers's avatar Chad Sellers Committed by James Morris

SELinux: ensure keys constant in hashtab_search

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: default avatarChad Sellers <csellers@tresys.com>
Acked-by: default avatarStephen Smalley <sds@tycho.nsa.gov>
Signed-off-by: default avatarJames Morris <jmorris@namei.org>
parent 5c458998
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
#include <linux/errno.h> #include <linux/errno.h>
#include "hashtab.h" #include "hashtab.h"
struct hashtab *hashtab_create(u32 (*hash_value)(struct hashtab *h, void *key), struct hashtab *hashtab_create(u32 (*hash_value)(struct hashtab *h, const void *key),
int (*keycmp)(struct hashtab *h, void *key1, void *key2), int (*keycmp)(struct hashtab *h, const void *key1, const void *key2),
u32 size) u32 size)
{ {
struct hashtab *p; struct hashtab *p;
...@@ -71,7 +71,7 @@ int hashtab_insert(struct hashtab *h, void *key, void *datum) ...@@ -71,7 +71,7 @@ int hashtab_insert(struct hashtab *h, void *key, void *datum)
return 0; return 0;
} }
void *hashtab_search(struct hashtab *h, void *key) void *hashtab_search(struct hashtab *h, const void *key)
{ {
u32 hvalue; u32 hvalue;
struct hashtab_node *cur; struct hashtab_node *cur;
......
...@@ -22,9 +22,9 @@ struct hashtab { ...@@ -22,9 +22,9 @@ struct hashtab {
struct hashtab_node **htable; /* hash table */ struct hashtab_node **htable; /* hash table */
u32 size; /* number of slots in hash table */ u32 size; /* number of slots in hash table */
u32 nel; /* number of elements 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 */ /* 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 */ /* key comparison function */
}; };
...@@ -39,8 +39,8 @@ struct hashtab_info { ...@@ -39,8 +39,8 @@ struct hashtab_info {
* Returns NULL if insufficent space is available or * Returns NULL if insufficent space is available or
* the new hash table otherwise. * the new hash table otherwise.
*/ */
struct hashtab *hashtab_create(u32 (*hash_value)(struct hashtab *h, void *key), struct hashtab *hashtab_create(u32 (*hash_value)(struct hashtab *h, const void *key),
int (*keycmp)(struct hashtab *h, void *key1, void *key2), int (*keycmp)(struct hashtab *h, const void *key1, const void *key2),
u32 size); u32 size);
/* /*
...@@ -59,7 +59,7 @@ int hashtab_insert(struct hashtab *h, void *k, void *d); ...@@ -59,7 +59,7 @@ int hashtab_insert(struct hashtab *h, void *k, void *d);
* Returns NULL if no entry has the specified key or * Returns NULL if no entry has the specified key or
* the datum of the entry otherwise. * 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. * Destroys the specified hash table.
......
...@@ -9,9 +9,9 @@ ...@@ -9,9 +9,9 @@
#include <linux/errno.h> #include <linux/errno.h>
#include "symtab.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 size;
unsigned int val; unsigned int val;
...@@ -23,9 +23,9 @@ static unsigned int symhash(struct hashtab *h, void *key) ...@@ -23,9 +23,9 @@ static unsigned int symhash(struct hashtab *h, void *key)
return val & (h->size - 1); 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; keyp1 = key1;
keyp2 = key2; keyp2 = key2;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment