| // SPDX-License-Identifier: GPL-2.0 | |
| /* | |
| * Implementations of the security context functions. | |
| * | |
| * Author: Ondrej Mosnacek <omosnacek@gmail.com> | |
| * Copyright (C) 2020 Red Hat, Inc. | |
| */ | |
| #include <linux/jhash.h> | |
| #include "context.h" | |
| #include "mls.h" | |
| u32 context_compute_hash(const struct context *c) | |
| { | |
| u32 hash = 0; | |
| /* | |
| * If a context is invalid, it will always be represented by a | |
| * context struct with only the len & str set (and vice versa) | |
| * under a given policy. Since context structs from different | |
| * policies should never meet, it is safe to hash valid and | |
| * invalid contexts differently. The context_cmp() function | |
| * already operates under the same assumption. | |
| */ | |
| if (c->len) | |
| return full_name_hash(NULL, c->str, c->len); | |
| hash = jhash_3words(c->user, c->role, c->type, hash); | |
| hash = mls_range_hash(&c->range, hash); | |
| return hash; | |
| } |