git: c987d6a67766 - main - linux: map EBUSY returned by ptrace into ESRCH
Edward Tomasz Napierala
trasz at FreeBSD.org
Tue Jan 19 11:23:53 UTC 2021
The branch main has been updated by trasz:
URL: https://cgit.FreeBSD.org/src/commit/?id=c987d6a67766629daea0e4c51ee6baf03d4c5dfa
commit c987d6a67766629daea0e4c51ee6baf03d4c5dfa
Author: Edward Tomasz Napierala <trasz at FreeBSD.org>
AuthorDate: 2021-01-15 17:11:41 +0000
Commit: Edward Tomasz Napierala <trasz at FreeBSD.org>
CommitDate: 2021-01-19 11:21:55 +0000
linux: map EBUSY returned by ptrace into ESRCH
The ptrace(2) Linux man page claims the syscall returns ESRCH,
if the tracee is not stopped; the native ptrace(2) returns EBUSY.
Sponsored by: The FreeBSD Foundation
---
sys/amd64/linux/linux_ptrace.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/sys/amd64/linux/linux_ptrace.c b/sys/amd64/linux/linux_ptrace.c
index c1d05db5bc42..89fda7979359 100644
--- a/sys/amd64/linux/linux_ptrace.c
+++ b/sys/amd64/linux/linux_ptrace.c
@@ -583,7 +583,7 @@ linux_ptrace(struct thread *td, struct linux_ptrace_args *uap)
case LINUX_PTRACE_PEEKDATA:
error = linux_ptrace_peek(td, pid, addr, (void *)uap->data);
if (error != 0)
- return (error);
+ goto out;
/*
* Linux expects this syscall to read 64 bits, not 32.
*/
@@ -597,7 +597,7 @@ linux_ptrace(struct thread *td, struct linux_ptrace_args *uap)
case LINUX_PTRACE_POKEDATA:
error = kern_ptrace(td, PT_WRITE_D, pid, addr, uap->data);
if (error != 0)
- return (error);
+ goto out;
/*
* Linux expects this syscall to write 64 bits, not 32.
*/
@@ -665,5 +665,9 @@ linux_ptrace(struct thread *td, struct linux_ptrace_args *uap)
break;
}
+out:
+ if (error == EBUSY)
+ error = ESRCH;
+
return (error);
}
More information about the dev-commits-src-all
mailing list