Lines Matching +full:- +full:key

46 		v = (v << r1) | (v >> (32 - r1)); \  in avtab_hash()
49 hash = (hash << r2) | (hash >> (32 - r2)); \ in avtab_hash()
53 mix(keyp->target_class); in avtab_hash()
54 mix(keyp->target_type); in avtab_hash()
55 mix(keyp->source_type); in avtab_hash()
71 const struct avtab_key *key, const struct avtab_datum *datum) in avtab_insert_node() argument
78 newnode->key = *key; in avtab_insert_node()
80 if (key->specified & AVTAB_XPERMS) { in avtab_insert_node()
86 *xperms = *(datum->u.xperms); in avtab_insert_node()
87 newnode->datum.u.xperms = xperms; in avtab_insert_node()
89 newnode->datum.u.data = datum->u.data; in avtab_insert_node()
93 newnode->next = prev->next; in avtab_insert_node()
94 prev->next = newnode; in avtab_insert_node()
96 struct avtab_node **n = &h->htable[hvalue]; in avtab_insert_node()
98 newnode->next = *n; in avtab_insert_node()
102 h->nel++; in avtab_insert_node()
106 static int avtab_insert(struct avtab *h, const struct avtab_key *key, in avtab_insert() argument
111 u16 specified = key->specified & ~(AVTAB_ENABLED|AVTAB_ENABLED_OLD); in avtab_insert()
113 if (!h || !h->nslot || h->nel == U32_MAX) in avtab_insert()
114 return -EINVAL; in avtab_insert()
116 hvalue = avtab_hash(key, h->mask); in avtab_insert()
117 for (prev = NULL, cur = h->htable[hvalue]; in avtab_insert()
119 prev = cur, cur = cur->next) { in avtab_insert()
120 if (key->source_type == cur->key.source_type && in avtab_insert()
121 key->target_type == cur->key.target_type && in avtab_insert()
122 key->target_class == cur->key.target_class && in avtab_insert()
123 (specified & cur->key.specified)) { in avtab_insert()
127 return -EEXIST; in avtab_insert()
129 if (key->source_type < cur->key.source_type) in avtab_insert()
131 if (key->source_type == cur->key.source_type && in avtab_insert()
132 key->target_type < cur->key.target_type) in avtab_insert()
134 if (key->source_type == cur->key.source_type && in avtab_insert()
135 key->target_type == cur->key.target_type && in avtab_insert()
136 key->target_class < cur->key.target_class) in avtab_insert()
140 newnode = avtab_insert_node(h, hvalue, prev, key, datum); in avtab_insert()
142 return -ENOMEM; in avtab_insert()
148 * key/specified mask into the table, as needed by the conditional avtab.
152 const struct avtab_key *key, in avtab_insert_nonunique() argument
157 u16 specified = key->specified & ~(AVTAB_ENABLED|AVTAB_ENABLED_OLD); in avtab_insert_nonunique()
159 if (!h || !h->nslot || h->nel == U32_MAX) in avtab_insert_nonunique()
161 hvalue = avtab_hash(key, h->mask); in avtab_insert_nonunique()
162 for (prev = NULL, cur = h->htable[hvalue]; in avtab_insert_nonunique()
164 prev = cur, cur = cur->next) { in avtab_insert_nonunique()
165 if (key->source_type == cur->key.source_type && in avtab_insert_nonunique()
166 key->target_type == cur->key.target_type && in avtab_insert_nonunique()
167 key->target_class == cur->key.target_class && in avtab_insert_nonunique()
168 (specified & cur->key.specified)) in avtab_insert_nonunique()
170 if (key->source_type < cur->key.source_type) in avtab_insert_nonunique()
172 if (key->source_type == cur->key.source_type && in avtab_insert_nonunique()
173 key->target_type < cur->key.target_type) in avtab_insert_nonunique()
175 if (key->source_type == cur->key.source_type && in avtab_insert_nonunique()
176 key->target_type == cur->key.target_type && in avtab_insert_nonunique()
177 key->target_class < cur->key.target_class) in avtab_insert_nonunique()
180 return avtab_insert_node(h, hvalue, prev, key, datum); in avtab_insert_nonunique()
187 const struct avtab_key *key) in avtab_search_node() argument
191 u16 specified = key->specified & ~(AVTAB_ENABLED|AVTAB_ENABLED_OLD); in avtab_search_node()
193 if (!h || !h->nslot) in avtab_search_node()
196 hvalue = avtab_hash(key, h->mask); in avtab_search_node()
197 for (cur = h->htable[hvalue]; cur; in avtab_search_node()
198 cur = cur->next) { in avtab_search_node()
199 if (key->source_type == cur->key.source_type && in avtab_search_node()
200 key->target_type == cur->key.target_type && in avtab_search_node()
201 key->target_class == cur->key.target_class && in avtab_search_node()
202 (specified & cur->key.specified)) in avtab_search_node()
205 if (key->source_type < cur->key.source_type) in avtab_search_node()
207 if (key->source_type == cur->key.source_type && in avtab_search_node()
208 key->target_type < cur->key.target_type) in avtab_search_node()
210 if (key->source_type == cur->key.source_type && in avtab_search_node()
211 key->target_type == cur->key.target_type && in avtab_search_node()
212 key->target_class < cur->key.target_class) in avtab_search_node()
227 for (cur = node->next; cur; cur = cur->next) { in avtab_search_node_next()
228 if (node->key.source_type == cur->key.source_type && in avtab_search_node_next()
229 node->key.target_type == cur->key.target_type && in avtab_search_node_next()
230 node->key.target_class == cur->key.target_class && in avtab_search_node_next()
231 (specified & cur->key.specified)) in avtab_search_node_next()
234 if (node->key.source_type < cur->key.source_type) in avtab_search_node_next()
236 if (node->key.source_type == cur->key.source_type && in avtab_search_node_next()
237 node->key.target_type < cur->key.target_type) in avtab_search_node_next()
239 if (node->key.source_type == cur->key.source_type && in avtab_search_node_next()
240 node->key.target_type == cur->key.target_type && in avtab_search_node_next()
241 node->key.target_class < cur->key.target_class) in avtab_search_node_next()
255 for (i = 0; i < h->nslot; i++) { in avtab_destroy()
256 cur = h->htable[i]; in avtab_destroy()
259 cur = cur->next; in avtab_destroy()
260 if (temp->key.specified & AVTAB_XPERMS) in avtab_destroy()
262 temp->datum.u.xperms); in avtab_destroy()
266 kvfree(h->htable); in avtab_destroy()
267 h->htable = NULL; in avtab_destroy()
268 h->nel = 0; in avtab_destroy()
269 h->nslot = 0; in avtab_destroy()
270 h->mask = 0; in avtab_destroy()
275 h->htable = NULL; in avtab_init()
276 h->nel = 0; in avtab_init()
277 h->nslot = 0; in avtab_init()
278 h->mask = 0; in avtab_init()
286 h->htable = kvcalloc(nslot, sizeof(void *), GFP_KERNEL); in avtab_alloc_common()
287 if (!h->htable) in avtab_alloc_common()
288 return -ENOMEM; in avtab_alloc_common()
290 h->nslot = nslot; in avtab_alloc_common()
291 h->mask = nslot - 1; in avtab_alloc_common()
322 return avtab_alloc_common(new, orig->nslot); in avtab_alloc_dup()
335 for (i = 0; i < h->nslot; i++) { in avtab_hash_eval()
336 cur = h->htable[i]; in avtab_hash_eval()
342 cur = cur->next; in avtab_hash_eval()
353 tag, h->nel, slots_used, h->nslot, max_chain_len, in avtab_hash_eval()
378 struct avtab_key key; in avtab_read_item() local
383 unsigned int set, vers = pol->policyvers; in avtab_read_item()
385 memset(&key, 0, sizeof(struct avtab_key)); in avtab_read_item()
397 return -EINVAL; in avtab_read_item()
408 key.source_type = (u16)val; in avtab_read_item()
409 if (key.source_type != val) { in avtab_read_item()
411 return -EINVAL; in avtab_read_item()
414 key.target_type = (u16)val; in avtab_read_item()
415 if (key.target_type != val) { in avtab_read_item()
417 return -EINVAL; in avtab_read_item()
420 key.target_class = (u16)val; in avtab_read_item()
421 if (key.target_class != val) { in avtab_read_item()
423 return -EINVAL; in avtab_read_item()
431 return -EINVAL; in avtab_read_item()
436 return -EINVAL; in avtab_read_item()
440 return -EINVAL; in avtab_read_item()
445 key.specified = spec_order[i] | enabled; in avtab_read_item()
447 rc = insertf(a, &key, &datum, p); in avtab_read_item()
456 return -EINVAL; in avtab_read_item()
468 key.source_type = le16_to_cpu(buf16[items++]); in avtab_read_item()
469 key.target_type = le16_to_cpu(buf16[items++]); in avtab_read_item()
470 key.target_class = le16_to_cpu(buf16[items++]); in avtab_read_item()
471 key.specified = le16_to_cpu(buf16[items++]); in avtab_read_item()
473 if (!policydb_type_isvalid(pol, key.source_type) || in avtab_read_item()
474 !policydb_type_isvalid(pol, key.target_type) || in avtab_read_item()
475 !policydb_class_isvalid(pol, key.target_class)) { in avtab_read_item()
477 return -EINVAL; in avtab_read_item()
482 if (key.specified & spec_order[i]) in avtab_read_item()
487 return -EINVAL; in avtab_read_item()
491 (key.specified & AVTAB_XPERMS)) { in avtab_read_item()
495 return -EINVAL; in avtab_read_item()
496 } else if (key.specified & AVTAB_XPERMS) { in avtab_read_item()
524 if ((key.specified & AVTAB_TYPE) && in avtab_read_item()
527 return -EINVAL; in avtab_read_item()
529 return insertf(a, &key, &datum, p); in avtab_read_item()
553 rc = -EINVAL; in avtab_read()
564 if (rc == -ENOMEM) in avtab_read()
566 else if (rc == -EEXIST) in avtab_read()
585 __le32 buf32[ARRAY_SIZE(cur->datum.u.xperms->perms.p)]; in avtab_write_item()
589 buf16[0] = cpu_to_le16(cur->key.source_type); in avtab_write_item()
590 buf16[1] = cpu_to_le16(cur->key.target_type); in avtab_write_item()
591 buf16[2] = cpu_to_le16(cur->key.target_class); in avtab_write_item()
592 buf16[3] = cpu_to_le16(cur->key.specified); in avtab_write_item()
597 if (cur->key.specified & AVTAB_XPERMS) { in avtab_write_item()
598 rc = put_entry(&cur->datum.u.xperms->specified, sizeof(u8), 1, fp); in avtab_write_item()
601 rc = put_entry(&cur->datum.u.xperms->driver, sizeof(u8), 1, fp); in avtab_write_item()
604 for (i = 0; i < ARRAY_SIZE(cur->datum.u.xperms->perms.p); i++) in avtab_write_item()
605 buf32[i] = cpu_to_le32(cur->datum.u.xperms->perms.p[i]); in avtab_write_item()
607 ARRAY_SIZE(cur->datum.u.xperms->perms.p), fp); in avtab_write_item()
609 buf32[0] = cpu_to_le32(cur->datum.u.data); in avtab_write_item()
624 buf[0] = cpu_to_le32(a->nel); in avtab_write()
629 for (i = 0; i < a->nslot; i++) { in avtab_write()
630 for (cur = a->htable[i]; cur; in avtab_write()
631 cur = cur->next) { in avtab_write()