This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] S390: Sync ptrace.h with kernel. [BZ #21539]
- From: Stefan Liebler <stli at linux dot vnet dot ibm dot com>
- To: libc-alpha at sourceware dot org
- Date: Tue, 4 Jul 2017 17:37:03 +0200
- Subject: Re: [PATCH] S390: Sync ptrace.h with kernel. [BZ #21539]
- Authentication-results: sourceware.org; auth=none
- References: <bda685cb-c5c4-ab27-47e0-1e95223275f9@linux.vnet.ibm.com> <20170613200522.GA14306@altlinux.org> <a70194fb-d96c-d22f-7aba-36be9685d421@linux.vnet.ibm.com> <a0750c84-154a-e24c-acfd-4899ce67a1ef@redhat.com> <7ce52670-669c-d9c0-dcf0-4d328bbeda79@linux.vnet.ibm.com> <b2dc07f8-a779-a51a-d239-c2139008ebc3@redhat.com>
On 07/04/2017 11:41 AM, Florian Weimer wrote:
On 07/04/2017 10:22 AM, Stefan Liebler wrote:
+ /* Ptrace request 12 is done with zero data argument:
+ -If the kernel has support for PTRACE_SINGLEBLOCK (then the kernel
+ header asm/ptrace.h defines this macro), the ptrace call is not allowed
+ to fail and has to continue the tracee until next taken branch.
I think this is still bogus. We can compile with newer kernel headers
than the host kernel, and this will cause the test to fail.
Thanks,
Florian
Okay.
So I can check the return value of the second ptrace (req_singleblock,
pid, NULL, NULL) call at runtime to determine the kernel-support:
errno = 0;
ret = ptrace (req_singleblock, pid, NULL, NULL);
if (ret == 0)
{
/* The kernel has support for PTRACE_SINGLEBLOCK ptrace request. */
TEST_VERIFY_EXIT (errno == 0);
}
else
{
/* The kernel (< 3.15) has no support for PTRACE_SINGLEBLOCK ptrace
request. */
TEST_VERIFY_EXIT (errno == EIO);
TEST_VERIFY_EXIT (ret == -1);
/* Just continue tracee until it exits normally. */
TEST_VERIFY_EXIT (ptrace (PTRACE_CONT, pid, NULL, NULL) == 0);
}
Then the test runs on kernels with / without support for
PTRACE_SINGLEBLOCK. The first ptrace call ensures that request 12 is not
interpreted as PTRACE_GETREGS.
Bye.
Stefan