ANDROID: GKI: Protect exports of protected GKI modules
Implement support for protecting the exported symbols of protected GKI modules. Only signed GKI modules are permitted to export symbols listed in the android/abi_gki_protected_exports file. Attempting to export these symbols from an unsigned module will result in the module failing to load, with a 'Permission denied' error message. Bug: 232430739 Test: TH Change-Id: I3e8b330938e116bb2e022d356ac0d55108a84a01 Signed-off-by: Ramji Jiyani <ramjiyani@google.com>
This commit is contained in:
committed by
Treehugger Robot
parent
5e28b84896
commit
fd1e768866
@@ -13,14 +13,29 @@
|
||||
/*
|
||||
* 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 "gki_module_protected_exports.h"
|
||||
#include "gki_module_unprotected.h"
|
||||
|
||||
#define MAX_STRCMP_LEN (max(MAX_UNPROTECTED_NAME_LEN, MAX_PROTECTED_EXPORTS_NAME_LEN))
|
||||
|
||||
/* bsearch() comparision callback */
|
||||
static int cmp_name(const void *sym, const void *protected_sym)
|
||||
{
|
||||
return strncmp(sym, protected_sym, MAX_UNPROTECTED_NAME_LEN);
|
||||
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)
|
||||
{
|
||||
return bsearch(name, gki_protected_exports_symbols, NR_PROTECTED_EXPORTS_SYMBOLS,
|
||||
MAX_PROTECTED_EXPORTS_NAME_LEN, cmp_name) != NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -30,8 +45,8 @@ static int cmp_name(const void *sym, const void *protected_sym)
|
||||
*/
|
||||
bool gki_is_module_unprotected_symbol(const char *name)
|
||||
{
|
||||
if (NO_OF_UNPROTECTED_SYMBOLS) {
|
||||
return bsearch(name, gki_unprotected_symbols, NO_OF_UNPROTECTED_SYMBOLS,
|
||||
if (NR_UNPROTECTED_SYMBOLS) {
|
||||
return bsearch(name, gki_unprotected_symbols, NR_UNPROTECTED_SYMBOLS,
|
||||
MAX_UNPROTECTED_NAME_LEN, cmp_name) != NULL;
|
||||
} else {
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user