Commit 954caecd authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds

[PATCH] Fix TSS limit on x86-64

The limit of the TSS segment was incorrectly set to a too big value
on x86-64. This lead to the CPU reading random memory behind the main
TSS when iopl was >0, but there was no ioperm bitmap set. This caused
random failures in port accesses in this state.

Set the correct limit.
parent 35d64a33
...@@ -118,7 +118,7 @@ static inline void set_tssldt_descriptor(void *ptr, unsigned long tss, unsigned ...@@ -118,7 +118,7 @@ static inline void set_tssldt_descriptor(void *ptr, unsigned long tss, unsigned
d.base1 = PTR_MIDDLE(tss) & 0xFF; d.base1 = PTR_MIDDLE(tss) & 0xFF;
d.type = type; d.type = type;
d.p = 1; d.p = 1;
d.limit1 = 0xF; d.limit1 = (size >> 16) & 0xF;
d.base2 = (PTR_MIDDLE(tss) >> 8) & 0xFF; d.base2 = (PTR_MIDDLE(tss) >> 8) & 0xFF;
d.base3 = PTR_HIGH(tss); d.base3 = PTR_HIGH(tss);
memcpy(ptr, &d, 16); memcpy(ptr, &d, 16);
......
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