From: Oren Laadan <orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
To: Dan Smith <danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
Cc: containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org
Subject: Re: [PATCH 2/2] Add support for the per-task sem_undo list (v2)
Date: Wed, 04 Aug 2010 17:29:52 -0400 [thread overview]
Message-ID: <4C59DBD0.1000107@cs.columbia.edu> (raw)
In-Reply-To: <87pqxyku9j.fsf-FLMGYpZoEPULwtHQx/6qkW3U47Q5hpJU@public.gmane.org>
On 08/04/2010 04:17 PM, Dan Smith wrote:
>>> +static void put_undo_list(struct sem_undo_list *ulp);
>
> OL> nit: to me it makes more sense to move
> OL> grab/drop/checkpoint/restart code, as well sem_init(), to the end
> OL> of the file (and avoid those statics...).
>
> Okay, was trying to avoid chopping the file up too much.
>
> OL> Can get rid of ..._users() since we don't collect them.
>
> Oops :)
>
> OL> semadj is short, so:
> OL> s/__u16/__s16/
>
> Gah, yeah, I always want everything to be unsigned for some reason :D
>
>>> - sma = sem_lock_check(tsk->nsproxy->ipc_ns, un->semid);
>>> + sma = sem_lock_check(ulp->ipc_ns, un->semid);
>
> OL> This hunk belongs to previous patch, no ?
>
> It could, but it seems more relevant when converting the function from
> using a task to using just the undo_list itself...
>
>>> + atomic_inc(&ulp->refcnt);
>
> OL> I suspect there is a leak here: atomic_inc is needed only for
> OL> tasks other than the first task; The first task already gets the
> OL> refcount deep inside find_alloc_undo(), and the hash-table gets
> OL> its ref via the obj->grab method.
>
> But then it drops that ref right after it inserts it, thus we need
> another one, right?. I think the confusion may come from the fact
> that the hash assumes the first refcount is its own and the caller of
> restore_obj() will grab another (for the task, in this case). Since
> we don't do that, we need to grab both early on. I hit this in
> another place in the network stuff, IIRC, which generated a similar
> review comment ;)
True ... but -
In that case, the atomic_inc for the first task should occur
earlier - as soon as it is attached to the task _and_ inserted
into the objhash.
Consider the following scenario: the task calls find_alloc_undo(),
so the undo_list is attached to the task; then when the restore
succeeds, the undo_list is also in the obj_hash. But one reference
is missing. A malicious user can make restart fail now - e.g. by
corrupting the image file - before the first tasks grabbed the
additional reference :(
So my point is valid if not accurate - the atomic_inc() does not
belong there.
---
And this made me think... I wonder if the following is a security
hazard for us:
In the current code, e.g. restore_file_table(), the first task
that restores a given file-table (or mm) will assume that it has
a "fresh" file-table (or mm) and will modify it on-the-spot.
This works because userspace restart will arrange for restarting
tasks to be like that (only threads will a-priori share mm). If
not, then a later task could "overwrite" the restore work of a
previous task in case they had shared e.g. file-table when the
restart starts.
That in itself is not a concern; but support a malicious user
modifies userspace restart, to have multiple tasks share their
file-table and/or mm. That user could arrange for the image to
force a certain state (file-table, mm, ..) on a previous task
when restoring a later task.
Again, in itself it is not a concern; but what if that previous
task was restored to have more privileges/credentials ? would
that allow a malicious user to break out ?
Oren.
next prev parent reply other threads:[~2010-08-04 21:29 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-04 17:02 Support for SEM_UNDO, round 2 Dan Smith
[not found] ` <1280941345-27566-1-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-08-04 17:02 ` [PATCH 1/2] Add ipc_namespace to struct sem_undo_list Dan Smith
2010-08-04 17:02 ` [PATCH 2/2] Add support for the per-task sem_undo list (v2) Dan Smith
[not found] ` <1280941345-27566-3-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-08-04 18:49 ` Oren Laadan
[not found] ` <4C59B625.7000007-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-08-04 20:17 ` Dan Smith
[not found] ` <87pqxyku9j.fsf-FLMGYpZoEPULwtHQx/6qkW3U47Q5hpJU@public.gmane.org>
2010-08-04 21:29 ` Oren Laadan [this message]
[not found] ` <4C59DBD0.1000107-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-08-04 21:38 ` Dan Smith
[not found] ` <87lj8mkqhk.fsf-FLMGYpZoEPULwtHQx/6qkW3U47Q5hpJU@public.gmane.org>
2010-08-04 21:48 ` Oren Laadan
2010-08-05 16:17 ` Dan Smith
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=4C59DBD0.1000107@cs.columbia.edu \
--to=orenl-eqauephvms7envbuuze7ea@public.gmane.org \
--cc=containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org \
--cc=danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.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 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.