From: Blaisorblade <blaisorblade@yahoo.it>
To: user-mode-linux-devel@lists.sourceforge.net
Cc: Jeff Dike <jdike@addtoit.com>,
linux-kernel@vger.kernel.org,
Heiko Carstens <heiko.carstens@de.ibm.com>,
Bodo Stroesser <bstroesser@fujitsu-siemens.com>
Subject: Re: [uml-devel] [RFC] PATCH 3/4 - Time virtualization : PTRACE_SYSCALL_MASK
Date: Fri, 21 Apr 2006 20:34:52 +0200 [thread overview]
Message-ID: <200604212034.53486.blaisorblade@yahoo.it> (raw)
In-Reply-To: <200604131720.k3DHKqdr004720@ccure.user-mode-linux.org>
On Thursday 13 April 2006 19:20, Jeff Dike wrote:
> Add PTRACE_SYSCALL_MASK, which allows system calls to be selectively
> traced. It takes a bitmask and a length. A system call is traced
> if its bit is one. Otherwise, it executes normally, and is
> invisible to the ptracing parent.
> This is not just useful for UML - strace -e could make good use of it as
> well.
> Index: linux-2.6.17-mm-vtime/include/asm-i386/ptrace.h
> ===================================================================
> --- linux-2.6.17-mm-vtime.orig/include/asm-i386/ptrace.h 2006-04-13
> 13:48:02.000000000 -0400 +++
> linux-2.6.17-mm-vtime/include/asm-i386/ptrace.h 2006-04-13
> 13:49:32.000000000 -0400 @@ -53,6 +53,7 @@ struct pt_regs {
>
> #define PTRACE_GET_THREAD_AREA 25
> #define PTRACE_SET_THREAD_AREA 26
> +#define PTRACE_SYSCALL_MASK 27
I think there could be a reason we skipped that for SYSEMU - that's to see.
Also, if this capability will be implemented in other archs, we should use
the 0x4200-0x4300 range for it.
> #define PTRACE_SYSEMU 31
> #define PTRACE_SYSEMU_SINGLESTEP 32
> @@ -450,6 +451,41 @@ int ptrace_traceme(void)
> return 0;
> }
>
> +int set_syscall_mask(struct task_struct *child, char __user *mask,
> + unsigned long len)
> +{
> + int i, n = (NR_syscalls + 7) / 8;
> + char c;
> +
> + if(len > n){
> + for(i = NR_syscalls; i < len * 8; i++){
> + get_user(c, &mask[i / 8]);
This get_user() inside a loop is poor, it could slow down a valid call. It'd
be simpler to copy the mask from userspace in a local variable (with 400
syscalls that's 50 bytes, i.e. fully ok), and then perform the checks, if
wanted (I disagree with Heiko's message, this check is needed sometimes - see
my response to that).
And only after that set all at once child->syscall_mask. You copy twice that
little quantity of data but that's not at all time-critical, and you're
forced to do that to avoid partial updates; btw you've saved getting twice
the content from userspace (slow when address spaces are distinct, like for
4G/4G or SKAS implementation of copy_from_user).
Actually we would copy the whole struct in my API proposal (as I've described
in the other message, we need to pass another param IMHO, so we'd pack them
in a struct and pass its address).
> + if(!(c & (1 << (i % 8)))){
> + printk("Out of range syscall at %d\n", i);
> + return -EINVAL;
> + }
> + }
> +
> + len = n;
> + }
> +
> + if(child->syscall_mask == NULL){
> + child->syscall_mask = kmalloc(n, GFP_KERNEL);
> + if(child->syscall_mask == NULL)
> + return -ENOMEM;
> +
> + memset(child->syscall_mask, 0xff, n);
> + }
> +
> + /* XXX If this partially fails, we will have a partially updated
> + * mask.
> + */
> + if(copy_from_user(child->syscall_mask, mask, len))
> + return -EFAULT;
> +
> + return 0;
> +}
> +
--
Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!".
Paolo Giarrusso, aka Blaisorblade (Skype ID "PaoloGiarrusso", ICQ 215621894)
http://www.user-mode-linux.org/~blaisorblade
___________________________________
Yahoo! Mail: gratis 1GB per i messaggi e allegati da 10MB
http://mail.yahoo.it
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
next prev parent reply other threads:[~2006-04-21 18:35 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-04-13 17:20 [uml-devel] [RFC] PATCH 3/4 - Time virtualization : PTRACE_SYSCALL_MASK Jeff Dike
2006-04-18 12:57 ` [uml-devel] " Pavel Machek
2006-04-26 18:38 ` Jeff Dike
2006-04-20 9:05 ` Heiko Carstens
2006-04-20 14:17 ` Bodo Stroesser
2006-04-25 18:32 ` Jeff Dike
2006-04-26 20:26 ` Charles P. Wright
2006-04-26 19:40 ` Jeff Dike
2006-04-26 21:29 ` Charles P. Wright
2006-04-21 18:16 ` Blaisorblade
2006-04-21 18:38 ` Blaisorblade
2006-04-22 7:06 ` Heiko Carstens
2006-04-22 8:32 ` Blaisorblade
2006-04-25 15:59 ` Jeff Dike
2006-04-21 18:34 ` Blaisorblade [this message]
2006-04-25 16:29 ` [uml-devel] " Jeff Dike
2006-04-26 15:47 ` Blaisorblade
2006-04-26 15:46 ` Jeff Dike
2006-04-28 20:28 ` Blaisorblade
2006-04-29 1:49 ` Jeff Dike
2006-05-01 13:51 ` Daniel Jacobowitz
2006-05-01 13:45 ` Jeff Dike
2006-05-01 15:01 ` Daniel Jacobowitz
2006-04-29 8:49 ` Heiko Carstens
2006-05-01 17:02 ` Jeff Dike
2006-05-02 6:57 ` Heiko Carstens
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=200604212034.53486.blaisorblade@yahoo.it \
--to=blaisorblade@yahoo.it \
--cc=bstroesser@fujitsu-siemens.com \
--cc=heiko.carstens@de.ibm.com \
--cc=jdike@addtoit.com \
--cc=linux-kernel@vger.kernel.org \
--cc=user-mode-linux-devel@lists.sourceforge.net \
/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