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:
parent
ab14f94a8c
commit
813f7f4c25
|
@ -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++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue