From: Mike Frysinger <vapier@gentoo.org>
To: sparclinux@vger.kernel.org
Subject: using ptrace to cancel a syscall on sparc
Date: Sun, 20 Dec 2015 05:47:54 +0000 [thread overview]
Message-ID: <20151220054754.GZ11489@vapier.lan> (raw)
[-- Attachment #1: Type: text/plain, Size: 1266 bytes --]
i've been playing with ptrace on sparc and trying to use it to watch and
cancel specific syscalls. i have this working for other arches already.
the test is pretty simple:
- call open("f", O_CREAT)
- call unlink("f")
the tracer will watch for the unlink, and when it gets notified, stuffs
the syscall # with -1 (so it'll get skipped). then when it gets called
a second time, it stuffs the exit with -1/EPERM.
i'm using PTRACE_GETREGS/PTRACE_SETREGS to read/write the regsets (and
i've swapped the addr/data args specifically for sparc). i extract the
syscall # from g1 (u_regs[0]) and syscalls args from o0..o5 (u_regs[7]
through u_regs[12]). this seems to be working fine.
when setting the return value, i set PSR_C in the psr register, and i
set o0 to EPERM. seems to be working (the unlink function returns a
-1 and errno is EPERM).
i'm having trouble with canceling of the syscall itself. seems like
no matter what i stuff into o0, the kernel executes the unlink. i've
tried tracing arch/sparc/kernel/syscalls.S and kernel/head_64.S, the
the entry is linux_sparc_syscall32 which calls linux_syscall_trace32,
but it seems like the o0 stuff doesn't seem to work for me. my sparc
asm foo isn't strong enough to figure out what's going wrong :/.
-mike
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next reply other threads:[~2015-12-20 5:47 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-20 5:47 Mike Frysinger [this message]
2015-12-20 23:31 ` using ptrace to cancel a syscall on sparc Dmitry V. Levin
2016-01-18 11:32 ` Mike Frysinger
2016-01-19 19:39 ` David Miller
2016-01-19 20:10 ` David Miller
2016-01-19 20:56 ` Mike Frysinger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151220054754.GZ11489@vapier.lan \
--to=vapier@gentoo.org \
--cc=sparclinux@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox