Commit 0492c371 authored by Zachary Amsden's avatar Zachary Amsden Committed by Linus Torvalds

Fix VMI relocation processing logic error

Fix logic error in VMI relocation processing.  NOPs would always cause
a BUG_ON to fire because the != RELOCATION_NONE in the first if clause
precluding the == VMI_RELOCATION_NOP in the second clause.  Make these
direct equality tests and just warn for unsupported relocation types
(which should never happen), falling back to native in that case.

Thanks to Anthony Liguori for noting this!
Signed-off-by: default avatarZachary Amsden <zach@vmware.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 5a6d41b3
...@@ -712,11 +712,14 @@ static void *vmi_get_function(int vmicall) ...@@ -712,11 +712,14 @@ static void *vmi_get_function(int vmicall)
do { \ do { \
reloc = call_vrom_long_func(vmi_rom, get_reloc, \ reloc = call_vrom_long_func(vmi_rom, get_reloc, \
VMI_CALL_##vmicall); \ VMI_CALL_##vmicall); \
if (rel->type != VMI_RELOCATION_NONE) { \ if (rel->type == VMI_RELOCATION_CALL_REL) \
BUG_ON(rel->type != VMI_RELOCATION_CALL_REL); \
paravirt_ops.opname = (void *)rel->eip; \ paravirt_ops.opname = (void *)rel->eip; \
} else if (rel->type == VMI_RELOCATION_NOP) \ else if (rel->type == VMI_RELOCATION_NOP) \
paravirt_ops.opname = (void *)vmi_nop; \ paravirt_ops.opname = (void *)vmi_nop; \
else if (rel->type != VMI_RELOCATION_NONE) \
printk(KERN_WARNING "VMI: Unknown relocation " \
"type %d for " #vmicall"\n",\
rel->type); \
} while (0) } while (0)
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment