diff options
Diffstat (limited to 'system/easy-kernel-power8/ppc64-epapr-gcc8.patch')
-rw-r--r-- | system/easy-kernel-power8/ppc64-epapr-gcc8.patch | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/system/easy-kernel-power8/ppc64-epapr-gcc8.patch b/system/easy-kernel-power8/ppc64-epapr-gcc8.patch new file mode 100644 index 000000000..192e83845 --- /dev/null +++ b/system/easy-kernel-power8/ppc64-epapr-gcc8.patch @@ -0,0 +1,84 @@ +From 186b8f1587c79c2fa04bfa392fdf084443e398c1 Mon Sep 17 00:00:00 2001 +From: Seth Forshee <seth.forshee@canonical.com> +Date: Thu, 28 Sep 2017 09:33:39 -0400 +Subject: powerpc: Always initialize input array when calling epapr_hypercall() + +Several callers to epapr_hypercall() pass an uninitialized stack +allocated array for the input arguments, presumably because they +have no input arguments. However this can produce errors like +this one + + arch/powerpc/include/asm/epapr_hcalls.h:470:42: error: 'in' may be used uninitialized in this function [-Werror=maybe-uninitialized] + unsigned long register r3 asm("r3") = in[0]; + ~~^~~ + +Fix callers to this function to always zero-initialize the input +arguments array to prevent this. + +Signed-off-by: Seth Forshee <seth.forshee@canonical.com> +Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> +--- + arch/powerpc/include/asm/epapr_hcalls.h | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/arch/powerpc/include/asm/epapr_hcalls.h b/arch/powerpc/include/asm/epapr_hcalls.h +index 334459ad145b..90863245df53 100644 +--- a/arch/powerpc/include/asm/epapr_hcalls.h ++++ b/arch/powerpc/include/asm/epapr_hcalls.h +@@ -508,7 +508,7 @@ static unsigned long epapr_hypercall(unsigned long *in, + + static inline long epapr_hypercall0_1(unsigned int nr, unsigned long *r2) + { +- unsigned long in[8]; ++ unsigned long in[8] = {0}; + unsigned long out[8]; + unsigned long r; + +@@ -520,7 +520,7 @@ static inline long epapr_hypercall0_1(unsigned int nr, unsigned long *r2) + + static inline long epapr_hypercall0(unsigned int nr) + { +- unsigned long in[8]; ++ unsigned long in[8] = {0}; + unsigned long out[8]; + + return epapr_hypercall(in, out, nr); +@@ -528,7 +528,7 @@ static inline long epapr_hypercall0(unsigned int nr) + + static inline long epapr_hypercall1(unsigned int nr, unsigned long p1) + { +- unsigned long in[8]; ++ unsigned long in[8] = {0}; + unsigned long out[8]; + + in[0] = p1; +@@ -538,7 +538,7 @@ static inline long epapr_hypercall1(unsigned int nr, unsigned long p1) + static inline long epapr_hypercall2(unsigned int nr, unsigned long p1, + unsigned long p2) + { +- unsigned long in[8]; ++ unsigned long in[8] = {0}; + unsigned long out[8]; + + in[0] = p1; +@@ -549,7 +549,7 @@ static inline long epapr_hypercall2(unsigned int nr, unsigned long p1, + static inline long epapr_hypercall3(unsigned int nr, unsigned long p1, + unsigned long p2, unsigned long p3) + { +- unsigned long in[8]; ++ unsigned long in[8] = {0}; + unsigned long out[8]; + + in[0] = p1; +@@ -562,7 +562,7 @@ static inline long epapr_hypercall4(unsigned int nr, unsigned long p1, + unsigned long p2, unsigned long p3, + unsigned long p4) + { +- unsigned long in[8]; ++ unsigned long in[8] = {0}; + unsigned long out[8]; + + in[0] = p1; +-- +cgit 1.2-0.3.lf.el7 + |