Skip to content
Snippets Groups Projects
  • Yang Erkun's avatar
    7365d1f8
    nfsd: make sure exp active before svc_export_show · 7365d1f8
    Yang Erkun authored
    
    commit be8f982c369c965faffa198b46060f8853e0f1f0 upstream.
    
    The function `e_show` was called with protection from RCU. This only
    ensures that `exp` will not be freed. Therefore, the reference count for
    `exp` can drop to zero, which will trigger a refcount use-after-free
    warning when `exp_get` is called. To resolve this issue, use
    `cache_get_rcu` to ensure that `exp` remains active.
    
    ------------[ cut here ]------------
    refcount_t: addition on 0; use-after-free.
    WARNING: CPU: 3 PID: 819 at lib/refcount.c:25
    refcount_warn_saturate+0xb1/0x120
    CPU: 3 UID: 0 PID: 819 Comm: cat Not tainted 6.12.0-rc3+ #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
    1.16.1-2.fc37 04/01/2014
    RIP: 0010:refcount_warn_saturate+0xb1/0x120
    ...
    Call Trace:
     <TASK>
     e_show+0x20b/0x230 [nfsd]
     seq_read_iter+0x589/0x770
     seq_read+0x1e5/0x270
     vfs_read+0x125/0x530
     ksys_read+0xc1/0x160
     do_syscall_64+0x5f/0x170
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Fixes: bf18f163 ("NFSD: Using exp_get for export getting")
    Cc: stable@vger.kernel.org # 4.20+
    Signed-off-by: default avatarYang Erkun <yangerkun@huawei.com>
    Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    7365d1f8
    History
    nfsd: make sure exp active before svc_export_show
    Yang Erkun authored
    
    commit be8f982c369c965faffa198b46060f8853e0f1f0 upstream.
    
    The function `e_show` was called with protection from RCU. This only
    ensures that `exp` will not be freed. Therefore, the reference count for
    `exp` can drop to zero, which will trigger a refcount use-after-free
    warning when `exp_get` is called. To resolve this issue, use
    `cache_get_rcu` to ensure that `exp` remains active.
    
    ------------[ cut here ]------------
    refcount_t: addition on 0; use-after-free.
    WARNING: CPU: 3 PID: 819 at lib/refcount.c:25
    refcount_warn_saturate+0xb1/0x120
    CPU: 3 UID: 0 PID: 819 Comm: cat Not tainted 6.12.0-rc3+ #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
    1.16.1-2.fc37 04/01/2014
    RIP: 0010:refcount_warn_saturate+0xb1/0x120
    ...
    Call Trace:
     <TASK>
     e_show+0x20b/0x230 [nfsd]
     seq_read_iter+0x589/0x770
     seq_read+0x1e5/0x270
     vfs_read+0x125/0x530
     ksys_read+0xc1/0x160
     do_syscall_64+0x5f/0x170
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Fixes: bf18f163 ("NFSD: Using exp_get for export getting")
    Cc: stable@vger.kernel.org # 4.20+
    Signed-off-by: default avatarYang Erkun <yangerkun@huawei.com>
    Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>