HV: misra fix for patch set of Zephyr enabling

- add @pre condition remark;
- fix of NULL pointer check;

Tracked-On: #3214

Signed-off-by: Victor Sun <victor.sun@intel.com>
This commit is contained in:
Victor Sun 2019-06-04 22:41:52 +08:00 committed by wenlingz
parent 1906def29e
commit 0baf537a2c
2 changed files with 43 additions and 21 deletions

View File

@ -28,15 +28,16 @@
/**
* @pre vm != NULL && mbi != NULL
*/
static void init_vm_ramdisk_info(struct acrn_vm *vm, struct multiboot_module *mod)
static void init_vm_ramdisk_info(struct acrn_vm *vm, const struct multiboot_module *mod)
{
void *mod_addr = hpa2hva((uint64_t)mod->mm_mod_start);
uint32_t mod_size = mod->mm_mod_end - mod->mm_mod_start;
vm->sw.ramdisk_info.src_addr = mod_addr;
vm->sw.ramdisk_info.load_addr = vm->sw.kernel_info.kernel_load_addr + vm->sw.kernel_info.kernel_size;
vm->sw.ramdisk_info.load_addr = (void *)round_page_up((uint64_t)vm->sw.ramdisk_info.load_addr);
vm->sw.ramdisk_info.size = mod_size;
if ((mod_addr != NULL) && (mod->mm_mod_end > mod->mm_mod_start)) {
vm->sw.ramdisk_info.src_addr = mod_addr;
vm->sw.ramdisk_info.load_addr = vm->sw.kernel_info.kernel_load_addr + vm->sw.kernel_info.kernel_size;
vm->sw.ramdisk_info.load_addr = (void *)round_page_up((uint64_t)vm->sw.ramdisk_info.load_addr);
vm->sw.ramdisk_info.size = mod->mm_mod_end - mod->mm_mod_start;
}
}
/* There are two sources for sos_vm kernel cmdline:
@ -88,6 +89,9 @@ static void merge_cmdline(const struct acrn_vm *vm, const char *cmdline, const c
}
}
/**
* @pre vm != NULL
*/
static void *get_kernel_load_addr(struct acrn_vm *vm)
{
void *load_addr = NULL;
@ -125,9 +129,9 @@ static void *get_kernel_load_addr(struct acrn_vm *vm)
}
/**
* @pre vm != NULL && mbi != NULL
* @pre vm != NULL && mod != NULL
*/
static int32_t init_vm_kernel_info(struct acrn_vm *vm, struct multiboot_module *mod)
static int32_t init_vm_kernel_info(struct acrn_vm *vm, const struct multiboot_module *mod)
{
struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
@ -136,8 +140,10 @@ static int32_t init_vm_kernel_info(struct acrn_vm *vm, struct multiboot_module *
vm->sw.kernel_type = vm_config->os_config.kernel_type;
vm->sw.kernel_info.kernel_src_addr = hpa2hva((uint64_t)mod->mm_mod_start);
vm->sw.kernel_info.kernel_size = mod->mm_mod_end - mod->mm_mod_start;
vm->sw.kernel_info.kernel_load_addr = get_kernel_load_addr(vm);
if ((vm->sw.kernel_info.kernel_src_addr != NULL) && (mod->mm_mod_end > mod->mm_mod_start)){
vm->sw.kernel_info.kernel_size = mod->mm_mod_end - mod->mm_mod_start;
vm->sw.kernel_info.kernel_load_addr = get_kernel_load_addr(vm);
}
return (vm->sw.kernel_info.kernel_load_addr == NULL) ? (-EINVAL) : 0;
}
@ -145,7 +151,7 @@ static int32_t init_vm_kernel_info(struct acrn_vm *vm, struct multiboot_module *
/**
* @pre vm != NULL && mbi != NULL
*/
static void init_vm_bootargs_info(struct acrn_vm *vm, struct multiboot_info *mbi)
static void init_vm_bootargs_info(struct acrn_vm *vm, const struct multiboot_info *mbi)
{
struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
char *bootargs = vm_config->os_config.bootargs;
@ -171,27 +177,29 @@ static void init_vm_bootargs_info(struct acrn_vm *vm, struct multiboot_info *mbi
}
/* Kernel bootarg and zero page are right before the kernel image */
if (vm->sw.bootargs_info.size > 0) {
if (vm->sw.bootargs_info.size > 0U) {
vm->sw.bootargs_info.load_addr = vm->sw.kernel_info.kernel_load_addr - (MEM_1K * 8U);
} else {
vm->sw.bootargs_info.load_addr = NULL;
}
}
static uint32_t get_mod_idx_by_tag(struct multiboot_module *mods, uint32_t mods_count, const char *tag)
/* @pre mods != NULL
*/
static uint32_t get_mod_idx_by_tag(const struct multiboot_module *mods, uint32_t mods_count, const char *tag)
{
uint32_t i, ret = INVALID_MOD_IDX;
uint32_t tag_len = strnlen_s(tag, MAX_MOD_TAG_LEN);
for (i = 0; i < mods_count; i++) {
for (i = 0U; i < mods_count; i++) {
const char *mm_string = (char *)hpa2hva((uint64_t)mods[i].mm_string);
uint32_t mm_str_len = strnlen_s(mm_string, MAX_MOD_TAG_LEN);
/* when do file stitch by tool, the tag in mm_string might be followed with 0x0d or 0x0a */
if ((mm_str_len >= tag_len) && (strncmp(mm_string, tag, tag_len) == 0)
&& ((mm_string[tag_len] == 0x0d)
|| (mm_string[tag_len] == 0x0a)
|| (mm_string[tag_len] == 0))){
&& ((*(mm_string + tag_len) == 0x0d)
|| (*(mm_string + tag_len) == 0x0a)
|| (*(mm_string + tag_len) == 0))){
ret = i;
break;
}
@ -201,7 +209,7 @@ static uint32_t get_mod_idx_by_tag(struct multiboot_module *mods, uint32_t mods_
/* @pre vm != NULL && mbi != NULL
*/
static int32_t init_vm_sw_load(struct acrn_vm *vm, struct multiboot_info *mbi)
static int32_t init_vm_sw_load(struct acrn_vm *vm, const struct multiboot_info *mbi)
{
struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
struct multiboot_module *mods = (struct multiboot_module *)hpa2hva((uint64_t)mbi->mi_mods_addr);
@ -210,9 +218,11 @@ static int32_t init_vm_sw_load(struct acrn_vm *vm, struct multiboot_info *mbi)
dev_dbg(ACRN_DBG_BOOT, "mod counts=%d\n", mbi->mi_mods_count);
mod_idx = get_mod_idx_by_tag(mods, mbi->mi_mods_count, vm_config->os_config.kernel_mod_tag);
if (mod_idx != INVALID_MOD_IDX) {
ret = init_vm_kernel_info(vm, &mods[mod_idx]);
if (mods != NULL) {
mod_idx = get_mod_idx_by_tag(mods, mbi->mi_mods_count, vm_config->os_config.kernel_mod_tag);
if (mod_idx != INVALID_MOD_IDX) {
ret = init_vm_kernel_info(vm, &mods[mod_idx]);
}
}
if (ret == 0) {

View File

@ -50,6 +50,9 @@ static uint32_t create_zeropage_e820(struct zero_page *zp, const struct acrn_vm
return entry_num;
}
/**
* @pre vm != NULL
*/
static uint64_t create_zero_page(struct acrn_vm *vm)
{
struct zero_page *zeropage;
@ -98,6 +101,9 @@ static uint64_t create_zero_page(struct acrn_vm *vm)
return gpa;
}
/**
* @pre vm != NULL
*/
static void prepare_loading_bzimage(struct acrn_vm *vm, struct acrn_vcpu *vcpu)
{
uint32_t i;
@ -150,6 +156,9 @@ static void prepare_loading_bzimage(struct acrn_vm *vm, struct acrn_vcpu *vcpu)
__func__, vm->vm_id, vcpu_get_gpreg(vcpu, CPU_REG_RSI));
}
/**
* @pre vm != NULL
*/
static void prepare_loading_rawimage(struct acrn_vm *vm)
{
struct sw_kernel_info *sw_kernel = &(vm->sw.kernel_info);
@ -158,6 +167,9 @@ static void prepare_loading_rawimage(struct acrn_vm *vm)
sw_kernel->kernel_entry_addr = (void *)vm_config->os_config.kernel_entry_addr;
}
/**
* @pre vm != NULL
*/
int32_t direct_boot_sw_loader(struct acrn_vm *vm)
{
int32_t ret = 0;