From b30dfb1da816c3e0f733c46407222bac4ae0d308 Mon Sep 17 00:00:00 2001 From: Zide Chen Date: Thu, 10 Jan 2019 08:46:37 -0800 Subject: [PATCH] hv: fix MISRA-C violations in vmsr.c In enable_msr_interception(), by removing the local pointer declarations and all pointer arithmetic operations, the following violations are fixed. - Use of pointer arithmetic. - Pointer arithmetic is not on array. - Pointer not checked for null before use. Tracked-On: #861 Signed-off-by: Zide Chen Acked-by: Anthony Xu --- hypervisor/arch/x86/guest/vmsr.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/hypervisor/arch/x86/guest/vmsr.c b/hypervisor/arch/x86/guest/vmsr.c index d85e2b684..44cf5e404 100644 --- a/hypervisor/arch/x86/guest/vmsr.c +++ b/hypervisor/arch/x86/guest/vmsr.c @@ -264,16 +264,16 @@ uint32_t vmsr_get_guest_msr_index(uint32_t msr) static void enable_msr_interception(uint8_t *bitmap, uint32_t msr_arg, uint32_t mode) { - uint8_t *read_map = bitmap; - uint8_t *write_map = bitmap + 2048; + uint32_t read_offset = 0U; + uint32_t write_offset = 2048U; uint32_t msr = msr_arg; uint8_t msr_bit; uint32_t msr_index; if ((msr <= 0x1FFFU) || ((msr >= 0xc0000000U) && (msr <= 0xc0001fffU))) { if ((msr & 0xc0000000U) != 0U) { - read_map = read_map + 1024; - write_map = write_map + 1024; + read_offset = read_offset + 1024U; + write_offset = write_offset + 1024U; } msr &= 0x1FFFU; @@ -281,15 +281,15 @@ static void enable_msr_interception(uint8_t *bitmap, uint32_t msr_arg, uint32_t msr_index = msr >> 3U; if ((mode & INTERCEPT_READ) == INTERCEPT_READ) { - read_map[msr_index] |= msr_bit; + bitmap[read_offset + msr_index] |= msr_bit; } else { - read_map[msr_index] &= ~msr_bit; + bitmap[read_offset + msr_index] &= ~msr_bit; } if ((mode & INTERCEPT_WRITE) == INTERCEPT_WRITE) { - write_map[msr_index] |= msr_bit; + bitmap[write_offset + msr_index] |= msr_bit; } else { - write_map[msr_index] &= ~msr_bit; + bitmap[write_offset + msr_index] &= ~msr_bit; } } else { pr_err("%s, Invalid MSR: 0x%x", __func__, msr);