lib: Add error detection for misa_extension

Add assertions for misa_extension to prevent incoming illegal
characters.

Signed-off-by: Xiang Wang <merle@hardenedlinux.org>
Reviewed-by: Anup Patel <anup.patel@wdc.com>
This commit is contained in:
Xiang W 2019-11-27 14:16:52 +08:00 committed by Anup Patel
parent ab14f94a8c
commit 813f7f4c25
2 changed files with 13 additions and 4 deletions

View file

@ -159,8 +159,16 @@ void csr_write_num(int csr_num, unsigned long val);
__asm__ __volatile__("wfi" ::: "memory"); \
} while (0)
/* Determine CPU extension, return non-zero support */
int misa_extension(char ext);
/* determine CPU extension, return non-zero support */
int misa_extension_imp(char ext);
#define misa_extension(c)\
({\
_Static_assert(((c >= 'A') && (c <= 'Z')),\
"The parameter of misa_extension must be [A-Z]");\
misa_extension_imp(c);\
})
/* Get MXL field of misa, return -1 on error */
int misa_xlen(void);
@ -170,7 +178,7 @@ static inline void misa_string(char *out, unsigned int out_sz)
unsigned long i;
for (i = 0; i < 26; i++) {
if (misa_extension('A' + i)) {
if (misa_extension_imp('A' + i)) {
*out = 'A' + i;
out++;
}

View file

@ -12,7 +12,8 @@
#include <sbi/sbi_error.h>
#include <sbi/sbi_platform.h>
int misa_extension(char ext)
/* determine CPU extension, return non-zero support */
int misa_extension_imp(char ext)
{
unsigned long misa = csr_read(CSR_MISA);