// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright 2022 Google LLC
 * Author: ramjiyani@google.com (Ramji Jiyani)
 */

#include <linux/bsearch.h>
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/printk.h>
#include <linux/string.h>

#include "internal.h"

/*
 * Build time generated header files
 *
 * gki_module_protected_exports.h -- Symbols protected from _export_ by unsigned modules
 * gki_module_unprotected.h -- Symbols allowed to _access_ by unsigned modules
 */
#include <generated/gki_module_protected_exports.h>
#include <generated/gki_module_unprotected.h>

#define MAX_STRCMP_LEN (max(MAX_UNPROTECTED_NAME_LEN, MAX_PROTECTED_EXPORTS_NAME_LEN))

/* bsearch() comparision callback */
static int gki_cmp_name(const void *sym, const void *protected_sym)
{
	return strncmp(sym, protected_sym, MAX_STRCMP_LEN);
}

/**
 * gki_is_module_protected_export - Is a symbol exported from a protected GKI module?
 *
 * @name:	Symbol being checked against exported symbols from protected GKI modules
 */
bool gki_is_module_protected_export(const char *name)
{
	if (NR_UNPROTECTED_SYMBOLS) {
		return bsearch(name, gki_protected_exports_symbols, NR_PROTECTED_EXPORTS_SYMBOLS,
		       MAX_PROTECTED_EXPORTS_NAME_LEN, gki_cmp_name) != NULL;
	} else {
		/*
		 * If there are no symbols in unprotected list; We don't need to
		 * protect exports as there is no KMI enforcement.
		 * Treat everything exportable in this case.
		 */
		return false;
	}
}

/**
 * gki_is_module_unprotected_symbol - Is a symbol unprotected for unsigned module?
 *
 * @name:	Symbol being checked in list of unprotected symbols
 */
bool gki_is_module_unprotected_symbol(const char *name)
{
	if (NR_UNPROTECTED_SYMBOLS) {
		return bsearch(name, gki_unprotected_symbols, NR_UNPROTECTED_SYMBOLS,
				MAX_UNPROTECTED_NAME_LEN, gki_cmp_name) != NULL;
	} else {
		/*
		 * If there are no symbols in unprotected list;
		 * there isn't a KMI enforcement for the kernel.
		 * Treat everything accessible in this case.
		 */
		return true;
	}
}
