| // 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; |
| } |