From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: "Marek Marczykowski-Górecki" <marmarek@invisiblethingslab.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Daniel De Graaf <dgdegra@tycho.nsa.gov>,
David Vrabel <david.vrabel@citrix.com>,
xen-devel <xen-devel@lists.xen.org>
Subject: Re: race condition in xen-gntdev
Date: Mon, 29 Jun 2015 10:39:26 -0400 [thread overview]
Message-ID: <20150629143926.GA24629@l.oracle.com> (raw)
In-Reply-To: <20150626012824.GD967@mail-itl>
On Fri, Jun 26, 2015 at 03:28:24AM +0200, Marek Marczykowski-Górecki wrote:
> On Mon, Jun 22, 2015 at 03:14:16PM -0400, Daniel De Graaf wrote:
> > The reason that gntdev_release didn't have a lock is because there are not
> > supposed to be any references to the areas pointed to by priv->maps when it
> > is called. However, since the MMU notifier has not yet been unregistered,
> > it is apparently possible to race here; the comment on mmu_notifier_unregister
> > seems to confirm this as a possibility (as do the backtraces).
> >
> > I think adding the lock will be sufficient.
>
> Ok, so here is the patch:
Awesome!
Since you are the one who has been seeing this particular fault - any chance
you could give it some soak time? If I recall your emails correctly it takes
about a week or so before you saw the crash?
>
> -----------8<------------
>
> From b876e14888bdafa112c3265e6420543fa74aa709 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?=
> <marmarek@invisiblethingslab.com>
> Date: Fri, 26 Jun 2015 02:16:49 +0200
> Subject: [PATCH] xen/grant: fix race condition in gntdev_release
>
> While gntdev_release is called, MMU notifier is still registered and
> can traverse priv->maps list even if no pages are mapped (which is the
> case - gntdev_release is called after all). But gntdev_release will
> clear that list, so make sure that only one of those things happens at
> the same time.
>
> Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
> ---
> drivers/xen/gntdev.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c
> index 8927485..4bd23bb 100644
> --- a/drivers/xen/gntdev.c
> +++ b/drivers/xen/gntdev.c
> @@ -568,12 +568,14 @@ static int gntdev_release(struct inode *inode, struct file *flip)
>
> pr_debug("priv %p\n", priv);
>
> + mutex_lock(&priv->lock);
> while (!list_empty(&priv->maps)) {
> map = list_entry(priv->maps.next, struct grant_map, next);
> list_del(&map->next);
> gntdev_put_map(NULL /* already removed */, map);
> }
> WARN_ON(!list_empty(&priv->freeable_maps));
> + mutex_unlock(&priv->lock);
>
> if (use_ptemod)
> mmu_notifier_unregister(&priv->mn, priv->mm);
> --
> 1.9.3
>
>
> --
> Best Regards,
> Marek Marczykowski-Górecki
> Invisible Things Lab
> A: Because it messes up the order in which people normally read text.
> Q: Why is top-posting such a bad thing?
next prev parent reply other threads:[~2015-06-29 14:39 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-30 14:47 gntdev/gntalloc and fork Marek Marczykowski-Górecki
2015-05-27 23:45 ` gntdev/gntalloc and fork? - crash in gntdev Marek Marczykowski-Górecki
2015-06-17 19:42 ` race condition in xen-gntdev (was: Re: gntdev/gntalloc and fork? - crash in gntdev) Marek Marczykowski-Górecki
2015-06-22 17:46 ` Konrad Rzeszutek Wilk
2015-06-22 18:13 ` Marek Marczykowski-Górecki
2015-06-22 18:37 ` Konrad Rzeszutek Wilk
2015-06-22 19:14 ` race condition in xen-gntdev Daniel De Graaf
2015-06-26 1:28 ` Marek Marczykowski-Górecki
2015-06-29 14:39 ` Konrad Rzeszutek Wilk [this message]
2015-06-29 14:50 ` Marek Marczykowski-Górecki
2015-07-22 3:21 ` Marek Marczykowski-Górecki
2015-07-22 13:58 ` Konrad Rzeszutek Wilk
2015-06-30 15:26 ` David Vrabel
2015-06-30 15:51 ` Marek Marczykowski-Górecki
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=20150629143926.GA24629@l.oracle.com \
--to=konrad.wilk@oracle.com \
--cc=boris.ostrovsky@oracle.com \
--cc=david.vrabel@citrix.com \
--cc=dgdegra@tycho.nsa.gov \
--cc=marmarek@invisiblethingslab.com \
--cc=xen-devel@lists.xen.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.