selftests: ptrace: peeksiginfo failed on x86_64, i386, arm64 and arm. FAILED on stable rc branches 4.19, 4.14, 4.9 and 4.4. PASS on mainline, next and 5.1 stable rc branch. Test output: ------------------ cd /opt/kselftests/mainline/ptrace ./peeksiginfo Error (peeksiginfo.c:143): Only 0 signals were read The git bisect show that below commit caused this test to fail. git bisect bad 5b6b0eac235ef1f915f24eda6d501a754022cbf0 is the first bad commit commit 5b6b0eac235ef1f915f24eda6d501a754022cbf0 Author: Eric W. Biederman <ebiederm@xxxxxxxxxxxx> Date: Tue May 28 18:46:37 2019 -0500 signal/ptrace: Don't leak unitialized kernel memory with PTRACE_PEEK_SIGINFO commit f6e2aa91a46d2bc79fce9b93a988dbe7655c90c0 upstream. Recently syzbot in conjunction with KMSAN reported that ptrace_peek_siginfo can copy an uninitialized siginfo to userspace. Inspecting ptrace_peek_siginfo confirms this. The problem is that off when initialized from args.off can be initialized to a negaive value. At which point the "if (off >= 0)" test to see if off became negative fails because off started off negative. Prevent the core problem by adding a variable found that is only true if a siginfo is found and copied to a temporary in preparation for being copied to userspace. Prevent args.off from being truncated when being assigned to off by testing that off is <= the maximum possible value of off. Convert off to an unsigned long so that we should not have to truncate args.off, we have well defined overflow behavior so if we add another check we won't risk fighting undefined compiler behavior, and so that we have a type whose maximum value is easy to test for. Cc: Andrei Vagin <avagin@xxxxxxxxx> Cc: stable@xxxxxxxxxxxxxxx Reported-by: syzbot+0d602a1b0d8c95bdf299@xxxxxxxxxxxxxxxxxxxxxxxxx Fixes: 84c751bd4aeb ("ptrace: add ability to retrieve signals without removing from a queue (v4)") Signed-off-by: "Eric W. Biederman" <ebiederm@xxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> :040000 040000 ff9f3109f210274d0b87851d226c35e7305ce44a b36de2c855fe2a0b332f145f0966dc1a0304d4bd M kernel Test case link, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/testing/selftests/ptrace/peeksiginfo.c#n143 Test output log link, https://lkft.validation.linaro.org/scheduler/job/777223#L1084 Test results comparison on different branches, https://qa-reports.linaro.org/_/comparetest/?project=22&project=6&project=58&project=135&project=40&project=23&project=167&suite=kselftest&test=ptrace_peeksiginfo Best regards Naresh Kamboju