lkml.org 
[lkml]   [2008]   [Apr]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[08/37] rose: Socket lock was not released before returning to user space
    2.6.25-stable review patch.  If anyone has any objections, please let us
    know.

    ------------------
    From: Bernard Pidoux <f6bvp@amsat.org>
    [ Upstream commit: 43837b1e6c5aef803d57009a68db18df13e64892 ]

    ================================================
    [ BUG: lock held when returning to user space! ]
    ------------------------------------------------
    xfbbd/3683 is leaving the kernel with locks still held!
    1 lock held by xfbbd/3683:
    #0: (sk_lock-AF_ROSE){--..}, at: [<c8cd1eb3>] rose_connect+0x73/0x420 [rose]
    INFO: task xfbbd:3683 blocked for more than 120 seconds.
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    xfbbd D 00000246 0 3683 3669
    c6965ee0 00000092 c02c5c40 00000246 c0f6b5f0 c0f6b5c0 c0f6b5f0 c0f6b5c0
    c0f6b614 c6965f18 c024b74b ffffffff c06ba070 00000000 00000000 00000001
    c6ab07c0 c012d450 c0f6b634 c0f6b634 c7b5bf10 c0d6004c c7b5bf10 c6965f40
    Call Trace:
    [<c024b74b>] lock_sock_nested+0x6b/0xd0
    [<c012d450>] ? autoremove_wake_function+0x0/0x40
    [<c02488f1>] sock_fasync+0x41/0x150
    [<c0249e69>] sock_close+0x19/0x40
    [<c0175d54>] __fput+0xb4/0x170
    [<c0176018>] fput+0x18/0x20
    [<c017300e>] filp_close+0x3e/0x70
    [<c01744e9>] sys_close+0x69/0xb0
    [<c0103bda>] sysenter_past_esp+0x5f/0xa5
    =======================
    INFO: lockdep is turned off.
    Signed-off-by: Bernard Pidoux <f6bvp@amsat.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    net/rose/af_rose.c | 6 ++++--
    1 file changed, 4 insertions(+), 2 deletions(-)
    --- a/net/rose/af_rose.c
    +++ b/net/rose/af_rose.c
    @@ -760,8 +760,10 @@ static int rose_connect(struct socket *s

    rose->neighbour = rose_get_neigh(&addr->srose_addr, &cause,
    &diagnostic);
    - if (!rose->neighbour)
    - return -ENETUNREACH;
    + if (!rose->neighbour) {
    + err = -ENETUNREACH;
    + goto out_release;
    + }

    rose->lci = rose_new_lci(rose->neighbour);
    if (!rose->lci) {
    --


    \
     
     \ /
      Last update: 2008-04-29 19:25    [from the cache]
    ©2003-2014 Jasper Spaans. Advertise on this site