From: ebiederm@xmission.com (Eric W. Biederman)
To: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: david@lang.hm, "H. Peter Anvin" <hpa@zytor.com>,
Alexey Dobriyan <adobriyan@gmail.com>,
LKML <linux-kernel@vger.kernel.org>,
Pavel Emelyanov <xemul@parallels.com>,
Andrey Vagin <avagin@openvz.org>, Ingo Molnar <mingo@elte.hu>,
Thomas Gleixner <tglx@linutronix.de>,
Glauber Costa <glommer@parallels.com>,
Andi Kleen <andi@firstfloor.org>, Tejun Heo <tj@kernel.org>,
Matt Helsley <matthltc@us.ibm.com>,
Pekka Enberg <penberg@kernel.org>,
Eric Dumazet <eric.dumazet@gmail.com>,
Vasiliy Kulikov <segoon@openwall.com>,
Andrew Morton <akpm@linux-foundation.org>,
Valdis.Kletnieks@vt.edu
Subject: Re: [RFC] syscalls, x86: Add __NR_kcmp syscall
Date: Thu, 19 Jan 2012 19:16:02 -0800 [thread overview]
Message-ID: <m1ty3rukr1.fsf@fess.ebiederm.org> (raw)
In-Reply-To: <20120119065541.GA31379@moon> (Cyrill Gorcunov's message of "Thu, 19 Jan 2012 10:55:41 +0400")
Cyrill Gorcunov <gorcunov@gmail.com> writes:
> On Wed, Jan 18, 2012 at 03:29:50PM -0800, Eric W. Biederman wrote:
>> >
>> > It doesn't matter. Even if we take a list of objects the kernel either
>> > should return us some ordering info or find duplicates, in any case it
>> > makes things more complex i think. So we wanted to bring some minimum
>> > into kernel leaving the rest of work to user-space.
>>
>> Agreed a syscall does the duplication is probably not the way to go.
>>
>> A syscall that takes a huge list of objects would solve any security
>> concerns that we have with returning the object order to user space if
>> done carefully, but it would require a bunch of additional user space
>> and kernel memory.
>>
>
> yes, an it increase syscall time itself since we will have to provide
> this memory dynamically
I just did a back of the napkin calculation.
struct kobj_id {
pid_t pid;
size_t descriptor;
size_t first_idx;
void *kernel_ignore_this_pointer;
};
int find_kobject_dups(int type, struct kobj_id __user *ids, size_t count);
Looks pretty reasonable on a 64bit machine for 100,000 file
descriptors.
3 Meg of input data.
4 Meg of an internal rbtree that remembers the first entry where
we saw an item.
struct {
struct rb_node node;
void *key;
size_t idx;
};
And the code is very straight forward. Insert each pointer to a kernel
object we find into an rbtree, and return the index we find. Then
finally tear down the rbtree.
8Meg worst case does not seem like a lot of memory to me. Especially
since half of it is userspace memory.
A simple implementation plus a guarantee that we will never ever
leak information that we don't intend to seem very attractive to me.
>> Sometimes taking a data structure transforming it into a weird form for
>> a specific task and then transforming the data structure back to it's
>> original form is a useful way to go. So I think a general kernel object
>> deduplicating system call is an interesting plan B, but a straight
>> comparison function if we can make it work is a lot more flexible and
>> useful.
>>
>
> I hope the root-only restriction would resolve the potential security
> problem, since as I mentioned if I've hijacked the machine and already
> goot root -- mem order is not that interesting info I could obtain from
> such computer :)
We either need a full comparison operator or we don't. Root-only is a
solution just looking to get abused.
Eric
next prev parent reply other threads:[~2012-01-20 3:13 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-17 14:27 [RFC] syscalls, x86: Add __NR_kcmp syscall Cyrill Gorcunov
2012-01-17 14:38 ` Alexey Dobriyan
2012-01-17 14:44 ` Cyrill Gorcunov
2012-01-17 18:47 ` H. Peter Anvin
2012-01-17 21:15 ` Cyrill Gorcunov
2012-01-17 21:40 ` Eric W. Biederman
2012-01-18 5:07 ` Pavel Emelyanov
2012-01-17 21:35 ` Eric W. Biederman
2012-01-18 8:01 ` Cyrill Gorcunov
2012-01-18 9:12 ` KOSAKI Motohiro
2012-01-18 9:19 ` Pavel Emelyanov
2012-01-18 9:23 ` KOSAKI Motohiro
2012-01-18 11:57 ` Cyrill Gorcunov
2012-01-18 16:46 ` KOSAKI Motohiro
2012-01-18 17:20 ` Cyrill Gorcunov
2012-01-18 22:05 ` david
2012-01-18 22:49 ` Cyrill Gorcunov
2012-01-18 23:29 ` Eric W. Biederman
2012-01-19 6:55 ` Cyrill Gorcunov
2012-01-20 3:16 ` Eric W. Biederman [this message]
2012-01-20 8:40 ` Cyrill Gorcunov
2012-01-20 9:02 ` Cyrill Gorcunov
2012-01-20 14:51 ` H. Peter Anvin
2012-01-20 16:29 ` Cyrill Gorcunov
2012-01-20 16:57 ` H. Peter Anvin
2012-01-20 18:19 ` Cyrill Gorcunov
2012-01-20 18:22 ` Cyrill Gorcunov
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=m1ty3rukr1.fsf@fess.ebiederm.org \
--to=ebiederm@xmission.com \
--cc=Valdis.Kletnieks@vt.edu \
--cc=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=andi@firstfloor.org \
--cc=avagin@openvz.org \
--cc=david@lang.hm \
--cc=eric.dumazet@gmail.com \
--cc=glommer@parallels.com \
--cc=gorcunov@gmail.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=matthltc@us.ibm.com \
--cc=mingo@elte.hu \
--cc=penberg@kernel.org \
--cc=segoon@openwall.com \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=xemul@parallels.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.