| From foo@baz Mon Apr 9 17:09:24 CEST 2018 |
| From: Michael Ellerman <mpe@ellerman.id.au> |
| Date: Mon, 29 May 2017 20:26:07 +1000 |
| Subject: powerpc/spufs: Fix coredump of SPU contexts |
| |
| From: Michael Ellerman <mpe@ellerman.id.au> |
| |
| |
| [ Upstream commit 99acc9bede06bbb2662aafff51f5b9e529fa845e ] |
| |
| If a process dumps core while it has SPU contexts active then we have |
| code to also dump information about the SPU contexts. |
| |
| Unfortunately it's been broken for 3 1/2 years, and we didn't notice. In |
| commit 7b1f4020d0d1 ("spufs: get rid of dump_emit() wrappers") the nread |
| variable was removed and rc used instead. That means when the loop exits |
| successfully, rc has the number of bytes read, but it's then used as the |
| return value for the function, which should return 0 on success. |
| |
| So fix it by setting rc = 0 before returning in the success case. |
| |
| Fixes: 7b1f4020d0d1 ("spufs: get rid of dump_emit() wrappers") |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Acked-by: Jeremy Kerr <jk@ozlabs.org> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/powerpc/platforms/cell/spufs/coredump.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/arch/powerpc/platforms/cell/spufs/coredump.c |
| +++ b/arch/powerpc/platforms/cell/spufs/coredump.c |
| @@ -175,6 +175,8 @@ static int spufs_arch_write_note(struct |
| skip = roundup(cprm->pos - total + sz, 4) - cprm->pos; |
| if (!dump_skip(cprm, skip)) |
| goto Eio; |
| + |
| + rc = 0; |
| out: |
| free_page((unsigned long)buf); |
| return rc; |