• Jarek Poplawski's avatar
    [AX25] af_ax25: Possible circular locking. · ecd2ebde
    Jarek Poplawski authored
    Bernard Pidoux F6BVP reported:
    > When I killall kissattach I can see the following message.
    >
    > This happens on kernel 2.6.24-rc5 already patched with the 6 previously
    > patches I sent recently.
    >
    >
    > =======================================================
    > [ INFO: possible circular locking dependency detected ]
    > 2.6.23.9 #1
    > -------------------------------------------------------
    > kissattach/2906 is trying to acquire lock:
    >  (linkfail_lock){-+..}, at: [<d8bd4603>] ax25_link_failed+0x11/0x39 [ax25]
    >
    > but task is already holding lock:
    >  (ax25_list_lock){-+..}, at: [<d8bd7c7c>] ax25_device_event+0x38/0x84
    > [ax25]
    >
    > which lock already depends on the new lock.
    >
    >
    > the existing dependency chain (in reverse order) is:
    ...
    
    lockdep is worried about the different order here:
    
    #1 (rose_neigh_list_lock){-+..}:
    #3 (ax25_list_lock){-+..}:
    
    #0 (linkfail_lock){-+..}:
    #1 (rose_neigh_list_lock){-+..}:
    
    #3 (ax25_list_lock){-+..}:
    #0 (linkfail_lock){-+..}:
    
    So, ax25_list_lock could be taken before and after linkfail_lock. 
    I don't know if this three-thread clutch is very probable (or
    possible at all), but it seems another bug reported by Bernard
    ("[...] system impossible to reboot with linux-2.6.24-rc5")
    could have similar source - namely ax25_list_lock held by
    ax25_kill_by_device() during ax25_disconnect(). It looks like the
    only place which calls ax25_disconnect() this way, so I guess, it
    isn't necessary.
    
    This patch is breaking the lock for ax25_disconnect().
    Reported-and-tested-by: default avatarBernard Pidoux <f6bvp@free.fr>
    Signed-off-by: default avatarJarek Poplawski <jarkao2@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ecd2ebde
af_ax25.c 44.6 KB