From: Jan Kiszka <jan.kiszka@domain.hid>
To: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Cc: Xenomai core <Xenomai-core@domain.hid>
Subject: Re: [Xenomai-core] [PULL] native: Fix msendq fastlock leakage
Date: Mon, 20 Jun 2011 22:52:03 +0200 [thread overview]
Message-ID: <4DFFB2F3.5080508@domain.hid> (raw)
In-Reply-To: <4DFF8775.7080704@domain.hid>
[-- Attachment #1: Type: text/plain, Size: 2684 bytes --]
On 2011-06-20 19:46, Gilles Chanteperdrix wrote:
> On 06/20/2011 07:07 PM, Jan Kiszka wrote:
>>> static inline void do_cleanup_event(struct mm_struct *mm)
>>> {
>>> + struct task_struct *p = current;
>>> + struct mm_struct *old;
>>> +
>>> + old = xnshadow_mm(p);
>>> + xnshadow_mmptd(p) = mm;
>>> +
>>> ppd_remove_mm(mm, &detach_ppd);
>>> +
>>> + xnshadow_mmptd(p) = old;
>>
>> I don't have the full picture yet, but that feels racy: If the context
>> over which we clean up that foreign mm is also using xnshadow_mmptd,
>> other threads in that process may dislike this temporary change.
>
> This mmptd is only used by xnshadow_ppd_get (which never dereferences it
> by the way
I know that the current code is safe. Avoiding mm_struct types is about
keeping it safe in the future. Why track the type if its just an opaque
key and should be handled as such?
). And if the current thread is running the cleanup event, it
> is not running any other service at the same time. So, this is safe.
Ah, xnshadow_mmptd is per-thread, not per-process as I incorrectly
assumed. Then it's safe.
>
> An alternative implementation would be to use some global per-cpu
> variable and disable the preemption during cleanup. But that would not
> fix the case of the shadow cleanups where current->mm is already null.
>
> The remaining problem is an irq interrupting the cleanup, and using
> xnshadow_ppd_get. But I would not expect that to happen. I mean,
> xnshadow_ppd_get is more a service to be used for implementation of
> system calls.
Yes, that kind of usage would be a bug in the first place.
>
>>> diff --git a/ksrc/skins/posix/mutex.c b/ksrc/skins/posix/mutex.c
>>> index 6ce75e5..cc86852 100644
>>> --- a/ksrc/skins/posix/mutex.c
>>> +++ b/ksrc/skins/posix/mutex.c
>>> @@ -219,10 +219,6 @@ void pse51_mutex_destroy_internal(pse51_mutex_t *mutex,
>>> xnlock_put_irqrestore(&nklock, s);
>>>
>>> #ifdef CONFIG_XENO_FASTSYNCH
>>> - /* We call xnheap_free even if the mutex is not pshared; when
>>> - this function is called from pse51_mutexq_cleanup, the
>>> - sem_heap is destroyed, or not the one to which the fastlock
>>> - belongs, xnheap will simply return an error. */
>>
>> I think this comment is not completely obsolete. It still applies /wrt
>> shared/non-shared.
>
> If we apply this patch after the one changing the ppd cleanup order,
> everything falls in place (I can even put a warning in xnheap_destroy if
> the heap has some bytes still in use when destroyed).
"We call xnheap_free even if the mutex is not pshared." This still
applies and is unrelated to the ppd changes.
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 259 bytes --]
next prev parent reply other threads:[~2011-06-20 20:52 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-23 13:53 [Xenomai-core] [PULL] native: Fix msendq fastlock leakage Jan Kiszka
2011-05-24 4:31 ` Gilles Chanteperdrix
2011-05-24 9:13 ` Jan Kiszka
2011-05-24 9:32 ` Gilles Chanteperdrix
2011-05-24 9:36 ` Jan Kiszka
2011-05-24 9:58 ` Gilles Chanteperdrix
2011-05-24 10:36 ` Jan Kiszka
2011-05-24 10:41 ` Gilles Chanteperdrix
2011-05-24 12:23 ` Jan Kiszka
2011-05-24 12:30 ` Gilles Chanteperdrix
2011-05-24 13:52 ` Jan Kiszka
2011-05-24 14:03 ` Gilles Chanteperdrix
2011-05-25 11:20 ` Jan Kiszka
2011-05-25 11:58 ` Gilles Chanteperdrix
2011-05-25 12:12 ` Jan Kiszka
2011-05-25 12:19 ` Gilles Chanteperdrix
2011-05-25 12:22 ` Jan Kiszka
2011-05-25 18:48 ` Gilles Chanteperdrix
2011-05-26 7:18 ` Jan Kiszka
2011-05-26 7:29 ` Gilles Chanteperdrix
2011-05-26 7:37 ` Jan Kiszka
2011-05-26 7:58 ` Gilles Chanteperdrix
2011-06-19 10:14 ` Gilles Chanteperdrix
2011-06-19 11:17 ` Gilles Chanteperdrix
2011-06-19 13:00 ` Gilles Chanteperdrix
2011-06-20 17:07 ` Jan Kiszka
2011-06-20 17:46 ` Gilles Chanteperdrix
2011-06-20 20:52 ` Jan Kiszka [this message]
2011-06-23 9:37 ` Jan Kiszka
2011-06-23 11:11 ` Gilles Chanteperdrix
2011-06-23 11:15 ` Jan Kiszka
2011-06-23 17:32 ` Gilles Chanteperdrix
2011-06-23 18:13 ` Philippe Gerum
2011-06-23 18:24 ` Philippe Gerum
2011-06-23 18:56 ` Gilles Chanteperdrix
2011-06-23 19:08 ` Gilles Chanteperdrix
2011-06-24 7:01 ` Gilles Chanteperdrix
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=4DFFB2F3.5080508@domain.hid \
--to=jan.kiszka@domain.hid \
--cc=Xenomai-core@domain.hid \
--cc=gilles.chanteperdrix@xenomai.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.