From: "Gustavo F. Padovan" <padovan@profusion.mobi>
To: "Ilia, Kolominsky" <iliak@ti.com>
Cc: Peter Hurley <peter@hurleysoftware.com>,
linux-bluetooth <linux-bluetooth@vger.kernel.org>
Subject: Re: [PATCH] Bluetooth: Fix hidp disconnect deadlock
Date: Wed, 29 Jun 2011 17:24:56 -0300 [thread overview]
Message-ID: <20110629202456.GA6490@joana> (raw)
In-Reply-To: <AC090B9732AB2B4DB7FF476E907FE66001315315BF@dnce02.ent.ti.com>
* Ilia, Kolominsky <iliak@ti.com> [2011-06-26 09:16:58 +0200]:
> Hi!
> IMHO the fix isnt good due to possible race condition which
> will destroy session/task objects - either by a call to kthread_stop
> from the timer func or reentry to hidp_del_connection() on
> smp platforms.
> see the intopic comments
>
>
> > -----Original Message-----
> > From: linux-bluetooth-owner@vger.kernel.org [mailto:linux-bluetooth-
> > owner@vger.kernel.org] On Behalf Of Peter Hurley
> > Sent: Sunday, June 26, 2011 12:33 AM
> > To: linux-bluetooth
> > Subject: [PATCH] Bluetooth: Fix hidp disconnect deadlock
> >
> > Release reader lock on r/w sem before stopping khidp thread (which
> > needs to
> > claim the writer lock on sem before unlinking the session).
> >
> > NB: kthread_stop waits for thread completion.
> > ---
> > net/bluetooth/hidp/core.c | 5 ++++-
> > 1 files changed, 4 insertions(+), 1 deletions(-)
> >
> > diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
> > index c405a95..16d75d7 100644
> > --- a/net/bluetooth/hidp/core.c
> > +++ b/net/bluetooth/hidp/core.c
> > @@ -1096,6 +1096,7 @@ int hidp_del_connection(struct hidp_conndel_req
> > *req)
> > {
> > struct hidp_session *session;
> > int err = 0;
> > + bool stop_thread = false;
> >
> > BT_DBG("");
> >
> > @@ -1111,12 +1112,14 @@ int hidp_del_connection(struct hidp_conndel_req
> > *req)
> > skb_queue_purge(&session->ctrl_transmit);
> > skb_queue_purge(&session->intr_transmit);
> >
> > - kthread_stop(session->task);
> > + stop_thread = true;
> > }
> > } else
> > err = -ENOENT;
> >
> > up_read(&hidp_session_sem);
> > + if (stop_thread)
>
> Timer fires here - session is destroyed.
>
> > + kthread_stop(session->task);
> > return err;
> > }
> >
> > --
> > 1.7.4.1
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-
> > bluetooth" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
>
> I am working on a better solution which will ensure the async deletion
> of session kthread operates correctly from different exec. contexts
Are you going to deliver this soon? This needs to be fixed on 3.0.
Gustavo
next prev parent reply other threads:[~2011-06-29 20:24 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-25 21:32 [PATCH] Bluetooth: Fix hidp disconnect deadlock Peter Hurley
2011-06-26 7:16 ` Ilia, Kolominsky
2011-06-29 20:24 ` Gustavo F. Padovan [this message]
2011-06-29 20:52 ` Gustavo F. Padovan
2011-06-30 14:34 ` Peter Hurley
2011-06-30 14:46 ` gene heskett
2011-06-30 14:55 ` Ilia, Kolominsky
2011-06-30 17:47 ` Gustavo F. Padovan
2011-06-30 17:40 ` Gustavo F. Padovan
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=20110629202456.GA6490@joana \
--to=padovan@profusion.mobi \
--cc=iliak@ti.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=peter@hurleysoftware.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.