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"); \ __asm__ __volatile__("wfi" ::: "memory"); \
} while (0) } 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 */ /* Get MXL field of misa, return -1 on error */
int misa_xlen(void); int misa_xlen(void);
@ -170,7 +178,7 @@ static inline void misa_string(char *out, unsigned int out_sz)
unsigned long i; unsigned long i;
for (i = 0; i < 26; i++) { for (i = 0; i < 26; i++) {
if (misa_extension('A' + i)) { if (misa_extension_imp('A' + i)) {
*out = 'A' + i; *out = 'A' + i;
out++; out++;
} }

View File

@ -12,7 +12,8 @@
#include <sbi/sbi_error.h> #include <sbi/sbi_error.h>
#include <sbi/sbi_platform.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); unsigned long misa = csr_read(CSR_MISA);