lkml.org 
[lkml]   [2008]   [Aug]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 17/25] Bluetooth: Signal user-space for HIDP and BNEP socket errors
    2.6.26-stable review patch.  If anyone has any objections, please let us
    know.

    ------------------

    From: Marcel Holtmann <marcel@holtmann.org>

    commit ec8dab36e0738d3059980d144e34f16a26bbda7d upstream

    When using the HIDP or BNEP kernel support, the user-space needs to
    know if the connection has been terminated for some reasons. Wake up
    the application if that happens. Otherwise kernel and user-space are
    no longer on the same page and weird behaviors can happen.

    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    net/bluetooth/bnep/core.c | 5 +++++
    net/bluetooth/hidp/core.c | 10 ++++++++++
    2 files changed, 15 insertions(+)

    --- a/net/bluetooth/bnep/core.c
    +++ b/net/bluetooth/bnep/core.c
    @@ -507,6 +507,11 @@ static int bnep_session(void *arg)
    /* Delete network device */
    unregister_netdev(dev);

    + /* Wakeup user-space polling for socket errors */
    + s->sock->sk->sk_err = EUNATCH;
    +
    + wake_up_interruptible(s->sock->sk->sk_sleep);
    +
    /* Release the socket */
    fput(s->sock->file);

    --- a/net/bluetooth/hidp/core.c
    +++ b/net/bluetooth/hidp/core.c
    @@ -581,6 +581,12 @@ static int hidp_session(void *arg)
    hid_free_device(session->hid);
    }

    + /* Wakeup user-space polling for socket errors */
    + session->intr_sock->sk->sk_err = EUNATCH;
    + session->ctrl_sock->sk->sk_err = EUNATCH;
    +
    + hidp_schedule(session);
    +
    fput(session->intr_sock->file);

    wait_event_timeout(*(ctrl_sk->sk_sleep),
    @@ -879,6 +885,10 @@ int hidp_del_connection(struct hidp_conn
    skb_queue_purge(&session->ctrl_transmit);
    skb_queue_purge(&session->intr_transmit);

    + /* Wakeup user-space polling for socket errors */
    + session->intr_sock->sk->sk_err = EUNATCH;
    + session->ctrl_sock->sk->sk_err = EUNATCH;
    +
    /* Kill session thread */
    atomic_inc(&session->terminate);
    hidp_schedule(session);
    --


    \
     
     \ /
      Last update: 2008-08-04 23:53    [W:7.812 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site