• Jeremy Sowden's avatar
    lapb: fixed leak of control-blocks. · da930ec9
    Jeremy Sowden authored
    [ Upstream commit 6be8e297 ]
    
    lapb_register calls lapb_create_cb, which initializes the control-
    block's ref-count to one, and __lapb_insert_cb, which increments it when
    adding the new block to the list of blocks.
    
    lapb_unregister calls __lapb_remove_cb, which decrements the ref-count
    when removing control-block from the list of blocks, and calls lapb_put
    itself to decrement the ref-count before returning.
    
    However, lapb_unregister also calls __lapb_devtostruct to look up the
    right control-block for the given net_device, and __lapb_devtostruct
    also bumps the ref-count, which means that when lapb_unregister returns
    the ref-count is still 1 and the control-block is leaked.
    
    Call lapb_put after __lapb_devtostruct to fix leak.
    
    Reported-by: syzbot+afb980676c836b4a0afa@syzkaller.appspotmail.com
    Signed-off-by: default avatarJeremy Sowden <jeremy@azazel.net>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    da930ec9
lapb_iface.c 8.9 KB