powerpc: Always initialize input array when calling epapr_hypercall()
authorSeth Forshee <seth.forshee@canonical.com>
Thu, 28 Sep 2017 13:33:39 +0000 (09:33 -0400)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 6 Oct 2017 09:50:58 +0000 (20:50 +1100)
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

index 334459a..9086324 100644 (file)
@@ -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;