x86: Fix relocation error in vcore_asm.S
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 25 May 2016 23:09:41 +0000 (19:09 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jun 2016 15:48:38 +0000 (11:48 -0400)
The original code worked, but would generate a 64 bit relocation for
some programs that we could have trouble with.  This popped up from a
./configure test when building a __thread example.

My original fix for it was to do this:

movabs $(__kvc_entry_c), %rax
call *%rax

Which is what we do in the kernel.  The problem with that is it generates a
TEXTREL (relocation entry in a text segment), which messes up a lot of
modern programs and security policies.  For a good overview, check out:

https://blog.flameeyes.eu/2016/01/textrels-text-relocations-and-their-impact-on-hardening-techniques

The current code seems to work - we'll see if we have problems in the
future.  While we're here, I also fixed that while 1 loop (which we never
hit.  jb 1 isn't what we wanted there...).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
user/parlib/x86/vcore_asm.S

index 9eb654b..390b2a0 100644 (file)
@@ -9,6 +9,6 @@
 
 .globl __kernel_vcore_entry
 __kernel_vcore_entry:
-       call __kvc_entry_c
+       call __kvc_entry_c@PLT
 1:
-       jb 1
+       jmp 1b