forked from lede-project/source
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
102-pseudo-random-mac.patch required an update to the new style asynchronous crypto Signed-off-by: Florian Fainelli <[email protected]>
- Loading branch information
Showing
6 changed files
with
646 additions
and
0 deletions.
There are no files selected for viewing
130 changes: 130 additions & 0 deletions
130
target/linux/uml/patches-4.9/000-um-Avoid-longjmp-setjmp-symbol-clashes-with-libpthre.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
From f44f1e7da7c8e3f4575d5d61c4df978496903fcc Mon Sep 17 00:00:00 2001 | ||
From: Florian Fainelli <[email protected]> | ||
Date: Tue, 23 May 2017 17:32:31 -0700 | ||
Subject: [PATCH] um: Avoid longjmp/setjmp symbol clashes with libpthread.a | ||
|
||
[ Upstream commit f44f1e7da7c8e3f4575d5d61c4df978496903fcc ] | ||
|
||
Building a statically linked UML kernel on a Centos 6.9 host resulted in | ||
the following linking failure (GCC 4.4, glibc-2.12): | ||
|
||
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/libpthread.a(libpthread.o): | ||
In function `siglongjmp': | ||
(.text+0x8490): multiple definition of `longjmp' | ||
arch/x86/um/built-in.o:/local/users/fainelli/openwrt/trunk/build_dir/target-x86_64_musl/linux-uml/linux-4.4.69/arch/x86/um/setjmp_64.S:44: | ||
first defined here | ||
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/libpthread.a(libpthread.o): | ||
In function `sem_open': | ||
(.text+0x77cd): warning: the use of `mktemp' is dangerous, better use | ||
`mkstemp' | ||
collect2: ld returned 1 exit status | ||
make[4]: *** [vmlinux] Error 1 | ||
|
||
Adopt a solution similar to the one done for vmap where we define | ||
longjmp/setjmp to be kernel_longjmp/setjmp. In the process, make sure we | ||
do rename the functions in arch/x86/um/setjmp_*.S accordingly. | ||
|
||
Fixes: a7df4716d195 ("um: link with -lpthread") | ||
Signed-off-by: Florian Fainelli <[email protected]> | ||
Signed-off-by: Richard Weinberger <[email protected]> | ||
--- | ||
arch/um/Makefile | 4 ++++ | ||
arch/x86/um/setjmp_32.S | 16 ++++++++-------- | ||
arch/x86/um/setjmp_64.S | 16 ++++++++-------- | ||
3 files changed, 20 insertions(+), 16 deletions(-) | ||
|
||
--- a/arch/um/Makefile | ||
+++ b/arch/um/Makefile | ||
@@ -59,10 +59,14 @@ KBUILD_CPPFLAGS += -I$(srctree)/$(HOST_D | ||
# Same things for in6addr_loopback and mktime - found in libc. For these two we | ||
# only get link-time error, luckily. | ||
# | ||
+# -Dlongjmp=kernel_longjmp prevents anything from referencing the libpthread.a | ||
+# embedded copy of longjmp, same thing for setjmp. | ||
+# | ||
# These apply to USER_CFLAGS to. | ||
|
||
KBUILD_CFLAGS += $(CFLAGS) $(CFLAGS-y) -D__arch_um__ \ | ||
$(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap \ | ||
+ -Dlongjmp=kernel_longjmp -Dsetjmp=kernel_setjmp \ | ||
-Din6addr_loopback=kernel_in6addr_loopback \ | ||
-Din6addr_any=kernel_in6addr_any -Dstrrchr=kernel_strrchr | ||
|
||
--- a/arch/x86/um/setjmp_32.S | ||
+++ b/arch/x86/um/setjmp_32.S | ||
@@ -16,9 +16,9 @@ | ||
|
||
.text | ||
.align 4 | ||
- .globl setjmp | ||
- .type setjmp, @function | ||
-setjmp: | ||
+ .globl kernel_setjmp | ||
+ .type kernel_setjmp, @function | ||
+kernel_setjmp: | ||
#ifdef _REGPARM | ||
movl %eax,%edx | ||
#else | ||
@@ -35,13 +35,13 @@ setjmp: | ||
movl %ecx,20(%edx) # Return address | ||
ret | ||
|
||
- .size setjmp,.-setjmp | ||
+ .size kernel_setjmp,.-kernel_setjmp | ||
|
||
.text | ||
.align 4 | ||
- .globl longjmp | ||
- .type longjmp, @function | ||
-longjmp: | ||
+ .globl kernel_longjmp | ||
+ .type kernel_longjmp, @function | ||
+kernel_longjmp: | ||
#ifdef _REGPARM | ||
xchgl %eax,%edx | ||
#else | ||
@@ -55,4 +55,4 @@ longjmp: | ||
movl 16(%edx),%edi | ||
jmp *20(%edx) | ||
|
||
- .size longjmp,.-longjmp | ||
+ .size kernel_longjmp,.-kernel_longjmp | ||
--- a/arch/x86/um/setjmp_64.S | ||
+++ b/arch/x86/um/setjmp_64.S | ||
@@ -18,9 +18,9 @@ | ||
|
||
.text | ||
.align 4 | ||
- .globl setjmp | ||
- .type setjmp, @function | ||
-setjmp: | ||
+ .globl kernel_setjmp | ||
+ .type kernel_setjmp, @function | ||
+kernel_setjmp: | ||
pop %rsi # Return address, and adjust the stack | ||
xorl %eax,%eax # Return value | ||
movq %rbx,(%rdi) | ||
@@ -34,13 +34,13 @@ setjmp: | ||
movq %rsi,56(%rdi) # Return address | ||
ret | ||
|
||
- .size setjmp,.-setjmp | ||
+ .size kernel_setjmp,.-kernel_setjmp | ||
|
||
.text | ||
.align 4 | ||
- .globl longjmp | ||
- .type longjmp, @function | ||
-longjmp: | ||
+ .globl kernel_longjmp | ||
+ .type kernel_longjmp, @function | ||
+kernel_longjmp: | ||
movl %esi,%eax # Return value (int) | ||
movq (%rdi),%rbx | ||
movq 8(%rdi),%rsp | ||
@@ -51,4 +51,4 @@ longjmp: | ||
movq 48(%rdi),%r15 | ||
jmp *56(%rdi) | ||
|
||
- .size longjmp,.-longjmp | ||
+ .size kernel_longjmp,.-kernel_longjmp |
99 changes: 99 additions & 0 deletions
99
target/linux/uml/patches-4.9/001-um-Allow-building-and-running-on-older-hosts.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
From 0a987645672ebde7844a9c0732a5a25f3d4bb6c6 Mon Sep 17 00:00:00 2001 | ||
From: Florian Fainelli <[email protected]> | ||
Date: Thu, 25 May 2017 11:36:26 -0700 | ||
Subject: [PATCH] um: Allow building and running on older hosts | ||
|
||
[ Upstream commit 0a987645672ebde7844a9c0732a5a25f3d4bb6c6 ] | ||
|
||
Commit a78ff1112263 ("um: add extended processor state save/restore | ||
support") and b6024b21fec8 ("um: extend fpstate to _xstate to support | ||
YMM registers") forced the use of the x86 FP _xstate and | ||
PTRACE_GETREGSET/SETREGSET. On older hosts, we would neither be able to | ||
build UML nor run it anymore with these two commits applied because we | ||
don't have definitions for struct _xstate nor these two ptrace requests. | ||
|
||
We can determine at build time which fp context structure to check | ||
against, just like we can keep using the old i387 fp save/restore if | ||
PTRACE_GETRESET/SETREGSET are not defined. | ||
|
||
Fixes: a78ff1112263 ("um: add extended processor state save/restore support") | ||
Fixes: b6024b21fec8 ("um: extend fpstate to _xstate to support YMM registers") | ||
Signed-off-by: Florian Fainelli <[email protected]> | ||
Signed-off-by: Richard Weinberger <[email protected]> | ||
--- | ||
arch/x86/um/os-Linux/registers.c | 12 ++++++++---- | ||
arch/x86/um/user-offsets.c | 4 ++++ | ||
2 files changed, 12 insertions(+), 4 deletions(-) | ||
|
||
--- a/arch/x86/um/os-Linux/registers.c | ||
+++ b/arch/x86/um/os-Linux/registers.c | ||
@@ -26,6 +26,7 @@ int save_i387_registers(int pid, unsigne | ||
|
||
int save_fp_registers(int pid, unsigned long *fp_regs) | ||
{ | ||
+#ifdef PTRACE_GETREGSET | ||
struct iovec iov; | ||
|
||
if (have_xstate_support) { | ||
@@ -34,9 +35,9 @@ int save_fp_registers(int pid, unsigned | ||
if (ptrace(PTRACE_GETREGSET, pid, NT_X86_XSTATE, &iov) < 0) | ||
return -errno; | ||
return 0; | ||
- } else { | ||
+ } else | ||
+#endif | ||
return save_i387_registers(pid, fp_regs); | ||
- } | ||
} | ||
|
||
int restore_i387_registers(int pid, unsigned long *fp_regs) | ||
@@ -48,6 +49,7 @@ int restore_i387_registers(int pid, unsi | ||
|
||
int restore_fp_registers(int pid, unsigned long *fp_regs) | ||
{ | ||
+#ifdef PTRACE_SETREGSET | ||
struct iovec iov; | ||
|
||
if (have_xstate_support) { | ||
@@ -56,9 +58,9 @@ int restore_fp_registers(int pid, unsign | ||
if (ptrace(PTRACE_SETREGSET, pid, NT_X86_XSTATE, &iov) < 0) | ||
return -errno; | ||
return 0; | ||
- } else { | ||
+ } else | ||
+#endif | ||
return restore_i387_registers(pid, fp_regs); | ||
- } | ||
} | ||
|
||
#ifdef __i386__ | ||
@@ -122,6 +124,7 @@ int put_fp_registers(int pid, unsigned l | ||
|
||
void arch_init_registers(int pid) | ||
{ | ||
+#ifdef PTRACE_GETREGSET | ||
struct _xstate fp_regs; | ||
struct iovec iov; | ||
|
||
@@ -129,6 +132,7 @@ void arch_init_registers(int pid) | ||
iov.iov_len = sizeof(struct _xstate); | ||
if (ptrace(PTRACE_GETREGSET, pid, NT_X86_XSTATE, &iov) == 0) | ||
have_xstate_support = 1; | ||
+#endif | ||
} | ||
#endif | ||
|
||
--- a/arch/x86/um/user-offsets.c | ||
+++ b/arch/x86/um/user-offsets.c | ||
@@ -50,7 +50,11 @@ void foo(void) | ||
DEFINE(HOST_GS, GS); | ||
DEFINE(HOST_ORIG_AX, ORIG_EAX); | ||
#else | ||
+#if defined(PTRACE_GETREGSET) && defined(PTRACE_SETREGSET) | ||
DEFINE(HOST_FP_SIZE, sizeof(struct _xstate) / sizeof(unsigned long)); | ||
+#else | ||
+ DEFINE(HOST_FP_SIZE, sizeof(struct _fpstate) / sizeof(unsigned long)); | ||
+#endif | ||
DEFINE_LONGS(HOST_BX, RBX); | ||
DEFINE_LONGS(HOST_CX, RCX); | ||
DEFINE_LONGS(HOST_DI, RDI); |
29 changes: 29 additions & 0 deletions
29
target/linux/uml/patches-4.9/002-um-Correctly-check-for-PTRACE_GETRESET-SETREGSET.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
From 61e8d462457f202bf0c6393133425ad387825e22 Mon Sep 17 00:00:00 2001 | ||
From: Richard Weinberger <[email protected]> | ||
Date: Thu, 6 Jul 2017 09:35:27 +0200 | ||
Subject: [PATCH] um: Correctly check for PTRACE_GETRESET/SETREGSET | ||
|
||
[ Upstream commit 61e8d462457f202bf0c6393133425ad387825e22 ] | ||
|
||
When checking for PTRACE_GETRESET/SETREGSET, make sure that | ||
the correct header file is included. We need linux/ptrace.h | ||
which contains all ptrace UAPI related defines. | ||
Otherwise #if defined(PTRACE_GETRESET) is always false. | ||
|
||
Cc: Florian Fainelli <[email protected]> | ||
Signed-off-by: Richard Weinberger <[email protected]> | ||
--- | ||
arch/x86/um/user-offsets.c | 2 +- | ||
1 file changed, 1 insertion(+), 1 deletion(-) | ||
|
||
--- a/arch/x86/um/user-offsets.c | ||
+++ b/arch/x86/um/user-offsets.c | ||
@@ -5,7 +5,7 @@ | ||
#include <sys/mman.h> | ||
#include <sys/user.h> | ||
#define __FRAME_OFFSETS | ||
-#include <asm/ptrace.h> | ||
+#include <linux/ptrace.h> | ||
#include <asm/types.h> | ||
|
||
#ifdef __i386__ |
46 changes: 46 additions & 0 deletions
46
target/linux/uml/patches-4.9/003-um-Fix-check-for-_xstate-for-older-hosts.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
From 2fb44600fe784449404c6639de26af8361999ec7 Mon Sep 17 00:00:00 2001 | ||
From: Florian Fainelli <[email protected]> | ||
Date: Tue, 18 Jul 2017 16:43:47 -0700 | ||
Subject: [PATCH] um: Fix check for _xstate for older hosts | ||
|
||
Commit 0a987645672e ("um: Allow building and running on older | ||
hosts") attempted to check for PTRACE_{GET,SET}REGSET under the premise | ||
that these ptrace(2) parameters were directly linked with the presence | ||
of the _xstate structure. | ||
|
||
After Richard's commit 61e8d462457f ("um: Correctly check for | ||
PTRACE_GETRESET/SETREGSET") which properly included linux/ptrace.h | ||
instead of asm/ptrace.h, we could get into the original build failure | ||
that I reported: | ||
|
||
arch/x86/um/user-offsets.c: In function 'foo': | ||
arch/x86/um/user-offsets.c:54: error: invalid application of 'sizeof' to | ||
incomplete type 'struct _xstate' | ||
|
||
On this particular host, we do have PTRACE_GETREGSET and | ||
PTRACE_SETREGSET defined in linux/ptrace.h, but not the structure | ||
_xstate that should be pulled from the following include chain: signal.h | ||
-> bits/sigcontext.h. | ||
|
||
Correctly fix this by checking for FP_XSTATE_MAGIC1 which is the correct | ||
way to see if struct _xstate is available or not on the host. | ||
|
||
Fixes: 61e8d462457f ("um: Correctly check for PTRACE_GETRESET/SETREGSET") | ||
Fixes: 0a987645672e ("um: Allow building and running on older hosts") | ||
Signed-off-by: Florian Fainelli <[email protected]> | ||
Signed-off-by: Richard Weinberger <[email protected]> | ||
--- | ||
arch/x86/um/user-offsets.c | 2 +- | ||
1 file changed, 1 insertion(+), 1 deletion(-) | ||
|
||
--- a/arch/x86/um/user-offsets.c | ||
+++ b/arch/x86/um/user-offsets.c | ||
@@ -50,7 +50,7 @@ void foo(void) | ||
DEFINE(HOST_GS, GS); | ||
DEFINE(HOST_ORIG_AX, ORIG_EAX); | ||
#else | ||
-#if defined(PTRACE_GETREGSET) && defined(PTRACE_SETREGSET) | ||
+#ifdef FP_XSTATE_MAGIC1 | ||
DEFINE(HOST_FP_SIZE, sizeof(struct _xstate) / sizeof(unsigned long)); | ||
#else | ||
DEFINE(HOST_FP_SIZE, sizeof(struct _fpstate) / sizeof(unsigned long)); |
Oops, something went wrong.