1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright 2021 Google LLC
4 * Author: ramjiyani@google.com (Ramji Jiyani)
5 */
6
7 #include <linux/bsearch.h>
8 #include <linux/errno.h>
9 #include <linux/kernel.h>
10 #include <linux/printk.h>
11 #include <linux/string.h>
12
13 /*
14 * Build time generated header files
15 *
16 * gki_module_exported.h -- Symbols protected from _export_ by unsigned modules
17 * gki_module_protected.h -- Symbols protected from _access_ by unsigned modules
18 */
19 #include "gki_module_protected.h"
20 #include "gki_module_exported.h"
21
22 #define MAX_STRCMP_LEN (max(MAX_PROTECTED_NAME_LEN, MAX_EXPORTED_NAME_LEN))
23
24 /* bsearch() comparision callback */
cmp_name(const void * sym,const void * protected_sym)25 static int cmp_name(const void *sym, const void *protected_sym)
26 {
27 return strncmp(sym, protected_sym, MAX_STRCMP_LEN);
28 }
29
30 /**
31 * gki_is_module_protected_symbol - Is a symbol protected from unsigned module?
32 *
33 * @name: Symbol being checked against protection from unsigned module
34 */
gki_is_module_protected_symbol(const char * name)35 bool gki_is_module_protected_symbol(const char *name)
36 {
37 return bsearch(name, gki_protected_symbols, NO_OF_PROTECTED_SYMBOLS,
38 MAX_PROTECTED_NAME_LEN, cmp_name) != NULL;
39 }
40
41 /**
42 * gki_is_module_exported_symbol - Is a symbol exported from a GKI module?
43 *
44 * @name: Symbol being checked against exported symbols from GKI modules
45 */
gki_is_module_exported_symbol(const char * name)46 bool gki_is_module_exported_symbol(const char *name)
47 {
48 return bsearch(name, gki_exported_symbols, NO_OF_EXPORTED_SYMBOLS,
49 MAX_EXPORTED_NAME_LEN, cmp_name) != NULL;
50 }
51