KVM: x86 emulator: preserve an operand's segment identity
Currently the x86 emulator converts the segment register associated with an operand into a segment base which is added into the operand address. This loss of information results in us not doing segment limit checks properly. Replace struct operand's addr.mem field by a segmented_address structure which holds both the effetive address and segment. This will allow us to do the limit check at the point of access. Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
@@ -159,7 +159,10 @@ struct operand {
|
||||
};
|
||||
union {
|
||||
unsigned long *reg;
|
||||
unsigned long mem;
|
||||
struct segmented_address {
|
||||
ulong ea;
|
||||
unsigned seg;
|
||||
} mem;
|
||||
} addr;
|
||||
union {
|
||||
unsigned long val;
|
||||
|
Reference in New Issue
Block a user