Message ID | 20210129071745.111466-1-ravi.bangoria@linux.ibm.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | [v2] powerpc/sstep: Fix array out of bound warning | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | success | Successfully applied on branch powerpc/merge (44158b256b30415079588d0fcb1bccbdc2ccd009) |
snowpatch_ozlabs/build-ppc64le | success | Build succeeded |
snowpatch_ozlabs/build-ppc64be | success | Build succeeded |
snowpatch_ozlabs/build-ppc64e | success | Build succeeded |
snowpatch_ozlabs/build-pmac32 | success | Build succeeded |
snowpatch_ozlabs/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 21 lines checked |
snowpatch_ozlabs/needsstable | success | Patch fixes a commit that hasn't been released yet |
On 2021/01/29 12:47PM, Ravi Bangoria wrote: > Compiling kernel with -Warray-bounds throws below warning: > > In function 'emulate_vsx_store': > warning: array subscript is above array bounds [-Warray-bounds] > buf.d[2] = byterev_8(reg->d[1]); > ~~~~~^~~ > buf.d[3] = byterev_8(reg->d[0]); > ~~~~~^~~ > > Fix it by using temporary array variable 'union vsx_reg buf32[]' in > that code block. Also, with element_size = 32, 'union vsx_reg *reg' > is an array of size 2. So, use 'reg' as an array instead of pointer > in the same code block. > > Fixes: af99da74333b ("powerpc/sstep: Support VSX vector paired storage access instructions") > Suggested-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> > Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com> > --- > v1: http://lore.kernel.org/r/20210115061620.692500-1-ravi.bangoria@linux.ibm.com > v1->v2: > - Change code only in the affected block I don't see the compiler warning with -Warray-bounds with this patch: Tested-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> - Naveen
On Fri, 29 Jan 2021 12:47:45 +0530, Ravi Bangoria wrote: > Compiling kernel with -Warray-bounds throws below warning: > > In function 'emulate_vsx_store': > warning: array subscript is above array bounds [-Warray-bounds] > buf.d[2] = byterev_8(reg->d[1]); > ~~~~~^~~ > buf.d[3] = byterev_8(reg->d[0]); > ~~~~~^~~ > > [...] Applied to powerpc/fixes. [1/1] powerpc/sstep: Fix array out of bound warning https://git.kernel.org/powerpc/c/344717a14cd7272f88346022a77742323346299e cheers
diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c index bf7a7d62ae8b..ede093e96234 100644 --- a/arch/powerpc/lib/sstep.c +++ b/arch/powerpc/lib/sstep.c @@ -818,13 +818,15 @@ void emulate_vsx_store(struct instruction_op *op, const union vsx_reg *reg, break; if (rev) { /* reverse 32 bytes */ - buf.d[0] = byterev_8(reg->d[3]); - buf.d[1] = byterev_8(reg->d[2]); - buf.d[2] = byterev_8(reg->d[1]); - buf.d[3] = byterev_8(reg->d[0]); - reg = &buf; + union vsx_reg buf32[2]; + buf32[0].d[0] = byterev_8(reg[1].d[1]); + buf32[0].d[1] = byterev_8(reg[1].d[0]); + buf32[1].d[0] = byterev_8(reg[0].d[1]); + buf32[1].d[1] = byterev_8(reg[0].d[0]); + memcpy(mem, buf32, size); + } else { + memcpy(mem, reg, size); } - memcpy(mem, reg, size); break; case 16: /* stxv, stxvx, stxvl, stxvll */
Compiling kernel with -Warray-bounds throws below warning: In function 'emulate_vsx_store': warning: array subscript is above array bounds [-Warray-bounds] buf.d[2] = byterev_8(reg->d[1]); ~~~~~^~~ buf.d[3] = byterev_8(reg->d[0]); ~~~~~^~~ Fix it by using temporary array variable 'union vsx_reg buf32[]' in that code block. Also, with element_size = 32, 'union vsx_reg *reg' is an array of size 2. So, use 'reg' as an array instead of pointer in the same code block. Fixes: af99da74333b ("powerpc/sstep: Support VSX vector paired storage access instructions") Suggested-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com> --- v1: http://lore.kernel.org/r/20210115061620.692500-1-ravi.bangoria@linux.ibm.com v1->v2: - Change code only in the affected block arch/powerpc/lib/sstep.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)