• Herbert Xu's avatar
    tun: Fix device unregister race · d23e4365
    Herbert Xu authored
    It is currently possible for an asynchronous device unregister
    to cause the same tun device to be unregistered twice.  This
    is because the unregister in tun_chr_close only checks whether
    __tun_get(tfile) != NULL.  This however has nothing to do with
    whether the device has already been unregistered.  All it tells
    you is whether __tun_detach has been called.
    
    This patch fixes this by using the most obvious thing to test
    whether the device has been unregistered.
    
    It also moves __tun_detach outside of rtnl_unlock since nothing
    that it does requires that lock.
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d23e4365
tun.c 32.9 KB