lkml.org 
[lkml]   [2022]   [Jul]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 14/58] net: tun: stop NAPI when detaching queues
    Date
    From: Jakub Kicinski <kuba@kernel.org>

    commit a8fc8cb5692aebb9c6f7afd4265366d25dcd1d01 upstream.

    While looking at a syzbot report I noticed the NAPI only gets
    disabled before it's deleted. I think that user can detach
    the queue before destroying the device and the NAPI will never
    be stopped.

    Fixes: 943170998b20 ("tun: enable NAPI for TUN/TAP driver")
    Acked-by: Petar Penkov <ppenkov@aviatrix.com>
    Link: https://lore.kernel.org/r/20220623042105.2274812-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/tun.c | 11 ++++++++++-
    1 file changed, 10 insertions(+), 1 deletion(-)

    --- a/drivers/net/tun.c
    +++ b/drivers/net/tun.c
    @@ -327,6 +327,12 @@ static void tun_napi_init(struct tun_str
    }
    }

    +static void tun_napi_enable(struct tun_file *tfile)
    +{
    + if (tfile->napi_enabled)
    + napi_enable(&tfile->napi);
    +}
    +
    static void tun_napi_disable(struct tun_file *tfile)
    {
    if (tfile->napi_enabled)
    @@ -709,8 +715,10 @@ static void __tun_detach(struct tun_file
    if (clean) {
    RCU_INIT_POINTER(tfile->tun, NULL);
    sock_put(&tfile->sk);
    - } else
    + } else {
    tun_disable_queue(tun, tfile);
    + tun_napi_disable(tfile);
    + }

    synchronize_net();
    tun_flow_delete_by_queue(tun, tun->numqueues + 1);
    @@ -864,6 +872,7 @@ static int tun_attach(struct tun_struct

    if (tfile->detached) {
    tun_enable_queue(tfile);
    + tun_napi_enable(tfile);
    } else {
    sock_hold(&tfile->sk);
    tun_napi_init(tun, tfile, napi, napi_frags);

    \
     
     \ /
      Last update: 2022-07-05 14:07    [W:4.409 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site