[PATCH] i386 / desc_empty macro is incorrect

Chuck Ebbert noticed that the desc_empty macro is incorrect. Fix it.

Thankfully, this is not used as a security check, but it can falsely
overwrite TLS segments with carefully chosen base / limits. I do not
believe this is an issue in practice, but it is a kernel bug.

Signed-off-by: Zachary Amsden <zach@vmware.com>
Signed-off-by: Chris Wright <chrisw@osdl.org>

[ x86-64 had the same problem, and the same fix. Linus ]

Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by Zachary Amsden and committed by Linus Torvalds 12aaa085 5153f7e6

+2 -2
+1 -1
include/asm-i386/processor.h
··· 29 }; 30 31 #define desc_empty(desc) \ 32 - (!((desc)->a + (desc)->b)) 33 34 #define desc_equal(desc1, desc2) \ 35 (((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b))
··· 29 }; 30 31 #define desc_empty(desc) \ 32 + (!((desc)->a | (desc)->b)) 33 34 #define desc_equal(desc1, desc2) \ 35 (((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b))
+1 -1
include/asm-x86_64/processor.h
··· 32 #define ID_MASK 0x00200000 33 34 #define desc_empty(desc) \ 35 - (!((desc)->a + (desc)->b)) 36 37 #define desc_equal(desc1, desc2) \ 38 (((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b))
··· 32 #define ID_MASK 0x00200000 33 34 #define desc_empty(desc) \ 35 + (!((desc)->a | (desc)->b)) 36 37 #define desc_equal(desc1, desc2) \ 38 (((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b))