427 Star 1.5K Fork 1.6K

GVPopenEuler/kernel

 / 详情

【openEuler-1.0-LTS】回合cifs LTS补丁 2fe0e281f7ad,导致memory leak

已完成
任务
创建于  
2022-09-28 16:30

问题现象如下

[root@localhost ~]# echo scan > /sys/kernel/debug/kmemleak 
[root@localhost ~]# cat /sys/kernel/debug/kmemleak
unreferenced object 0xffff8881238de580 (size 512):
  comm "mount.cifs", pid 576, jiffies 4294805132 (age 398.116s)
  hex dump (first 32 bytes):
    00 30 63 10 81 88 ff ff e0 3d 63 10 81 88 ff ff  .0c......=c.....
    00 00 00 00 00 00 00 00 80 31 d1 22 81 88 ff ff  .........1."....
  backtrace:
    [<00000000aa76ee94>] cifs_smb3_do_mount+0xa2/0x5b0
    [<00000000b87d07fd>] mount_fs+0x5c/0x191
    [<000000006a4dd4d9>] vfs_kern_mount.part.0+0x51/0x1b0
    [<000000008da7b30f>] do_mount+0x30b/0x1320
    [<000000009a9aa187>] ksys_mount+0x7e/0xc0
    [<00000000df394707>] __x64_sys_mount+0x62/0x70
    [<0000000063676d8d>] do_syscall_64+0x7b/0x2c0
    [<00000000c2dae16f>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [<00000000aea7b412>] 0xffffffffffffffff
unreferenced object 0xffff888122d13180 (size 32):
  comm "mount.cifs", pid 576, jiffies 4294805132 (age 398.116s)
  hex dump (first 32 bytes):
    5c 5c 31 39 32 2e 31 36 38 2e 36 38 2e 37 37 5c  \\192.168.68.77\
    54 45 53 54 00 00 00 00 00 00 00 00 00 00 00 00  TEST............
  backtrace:
    [<00000000717a9281>] cifs_parse_mount_options+0x459/0x2230
    [<000000001aa09c5c>] cifs_setup_volume_info+0x1f/0x1f0
    [<00000000c1a42c36>] cifs_get_volume_info+0x4e/0x90
    [<00000000aa76ee94>] cifs_smb3_do_mount+0xa2/0x5b0
    [<00000000b87d07fd>] mount_fs+0x5c/0x191
    [<000000006a4dd4d9>] vfs_kern_mount.part.0+0x51/0x1b0
    [<000000008da7b30f>] do_mount+0x30b/0x1320
    [<000000009a9aa187>] ksys_mount+0x7e/0xc0
    [<00000000df394707>] __x64_sys_mount+0x62/0x70
    [<0000000063676d8d>] do_syscall_64+0x7b/0x2c0
    [<00000000c2dae16f>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [<00000000aea7b412>] 0xffffffffffffffff
unreferenced object 0xffff888110633000 (size 8):
  comm "mount.cifs", pid 576, jiffies 4294805132 (age 398.116s)
  hex dump (first 8 bytes):
    66 73 67 71 61 00 ff ff                          fsgqa...
  backtrace:
    [<000000006315b419>] cifs_parse_mount_options+0xe5b/0x2230
    [<000000001aa09c5c>] cifs_setup_volume_info+0x1f/0x1f0
    [<00000000c1a42c36>] cifs_get_volume_info+0x4e/0x90
    [<00000000aa76ee94>] cifs_smb3_do_mount+0xa2/0x5b0
    [<00000000b87d07fd>] mount_fs+0x5c/0x191
    [<000000006a4dd4d9>] vfs_kern_mount.part.0+0x51/0x1b0
    [<000000008da7b30f>] do_mount+0x30b/0x1320
    [<000000009a9aa187>] ksys_mount+0x7e/0xc0
    [<00000000df394707>] __x64_sys_mount+0x62/0x70
    [<0000000063676d8d>] do_syscall_64+0x7b/0x2c0
    [<00000000c2dae16f>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [<00000000aea7b412>] 0xffffffffffffffff
unreferenced object 0xffff888110633de0 (size 8):
  comm "mount.cifs", pid 576, jiffies 4294805132 (age 398.116s)
  hex dump (first 8 bytes):
    68 75 61 77 65 69 00 00                          huawei..
  backtrace:
    [<000000001aa09c5c>] cifs_setup_volume_info+0x1f/0x1f0
    [<00000000c1a42c36>] cifs_get_volume_info+0x4e/0x90
    [<00000000aa76ee94>] cifs_smb3_do_mount+0xa2/0x5b0
    [<00000000b87d07fd>] mount_fs+0x5c/0x191
    [<000000006a4dd4d9>] vfs_kern_mount.part.0+0x51/0x1b0
    [<000000008da7b30f>] do_mount+0x30b/0x1320
    [<000000009a9aa187>] ksys_mount+0x7e/0xc0
    [<00000000df394707>] __x64_sys_mount+0x62/0x70
    [<0000000063676d8d>] do_syscall_64+0x7b/0x2c0
    [<00000000c2dae16f>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [<00000000aea7b412>] 0xffffffffffffffff
unreferenced object 0xffff88810cf00120 (size 32):
  comm "mount.cifs", pid 701, jiffies 4294848207 (age 355.056s)
  hex dump (first 32 bytes):
    5c 5c 31 39 32 2e 31 36 38 2e 36 38 2e 37 37 5c  \\192.168.68.77\
    54 45 53 54 00 00 00 00 00 00 00 00 00 00 00 00  TEST............
  backtrace:
    [<00000000717a9281>] cifs_parse_mount_options+0x459/0x2230
    [<000000001aa09c5c>] cifs_setup_volume_info+0x1f/0x1f0
    [<00000000c1a42c36>] cifs_get_volume_info+0x4e/0x90
    [<00000000aa76ee94>] cifs_smb3_do_mount+0xa2/0x5b0
    [<00000000b87d07fd>] mount_fs+0x5c/0x191
    [<000000006a4dd4d9>] vfs_kern_mount.part.0+0x51/0x1b0
    [<000000008da7b30f>] do_mount+0x30b/0x1320
    [<000000009a9aa187>] ksys_mount+0x7e/0xc0
    [<00000000df394707>] __x64_sys_mount+0x62/0x70
    [<0000000063676d8d>] do_syscall_64+0x7b/0x2c0
    [<00000000c2dae16f>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [<00000000aea7b412>] 0xffffffffffffffff
unreferenced object 0xffff88814e6ed180 (size 8):
  comm "mount.cifs", pid 701, jiffies 4294848208 (age 355.055s)
  hex dump (first 8 bytes):
    68 75 61 77 65 69 00 00                          huawei..
  backtrace:
    [<000000001aa09c5c>] cifs_setup_volume_info+0x1f/0x1f0
    [<00000000c1a42c36>] cifs_get_volume_info+0x4e/0x90
    [<00000000aa76ee94>] cifs_smb3_do_mount+0xa2/0x5b0
    [<00000000b87d07fd>] mount_fs+0x5c/0x191
    [<000000006a4dd4d9>] vfs_kern_mount.part.0+0x51/0x1b0
    [<000000008da7b30f>] do_mount+0x30b/0x1320
    [<000000009a9aa187>] ksys_mount+0x7e/0xc0
    [<00000000df394707>] __x64_sys_mount+0x62/0x70
    [<0000000063676d8d>] do_syscall_64+0x7b/0x2c0
    [<00000000c2dae16f>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [<00000000aea7b412>] 0xffffffffffffffff
unreferenced object 0xffff88810f851680 (size 512):
  comm "mount.cifs", pid 747, jiffies 4295139638 (age 63.625s)
  hex dump (first 32 bytes):
    b0 c4 41 08 81 88 ff ff d0 ce 41 08 81 88 ff ff  ..A.......A.....
    00 00 00 00 00 00 00 00 00 60 7f 02 81 88 ff ff  .........`......
  backtrace:
    [<00000000aa76ee94>] cifs_smb3_do_mount+0xa2/0x5b0
    [<00000000b87d07fd>] mount_fs+0x5c/0x191
    [<000000006a4dd4d9>] vfs_kern_mount.part.0+0x51/0x1b0
    [<000000008da7b30f>] do_mount+0x30b/0x1320
    [<000000009a9aa187>] ksys_mount+0x7e/0xc0
    [<00000000df394707>] __x64_sys_mount+0x62/0x70
    [<0000000063676d8d>] do_syscall_64+0x7b/0x2c0
    [<00000000c2dae16f>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [<00000000aea7b412>] 0xffffffffffffffff
unreferenced object 0xffff8881027f6000 (size 32):
  comm "mount.cifs", pid 747, jiffies 4295139638 (age 63.625s)
  hex dump (first 32 bytes):
    5c 5c 31 39 32 2e 31 36 38 2e 36 38 2e 37 37 5c  \\192.168.68.77\
    54 45 53 54 00 ff ff ff 50 6a 57 ae ff ff ff ff  TEST....PjW.....
  backtrace:
    [<00000000717a9281>] cifs_parse_mount_options+0x459/0x2230
    [<000000001aa09c5c>] cifs_setup_volume_info+0x1f/0x1f0
    [<00000000c1a42c36>] cifs_get_volume_info+0x4e/0x90
    [<00000000aa76ee94>] cifs_smb3_do_mount+0xa2/0x5b0
    [<00000000b87d07fd>] mount_fs+0x5c/0x191
    [<000000006a4dd4d9>] vfs_kern_mount.part.0+0x51/0x1b0
    [<000000008da7b30f>] do_mount+0x30b/0x1320
    [<000000009a9aa187>] ksys_mount+0x7e/0xc0
    [<00000000df394707>] __x64_sys_mount+0x62/0x70
    [<0000000063676d8d>] do_syscall_64+0x7b/0x2c0
    [<00000000c2dae16f>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [<00000000aea7b412>] 0xffffffffffffffff
unreferenced object 0xffff88810841c4b0 (size 8):
  comm "mount.cifs", pid 747, jiffies 4295139638 (age 63.640s)
  hex dump (first 8 bytes):
    66 73 67 71 61 00 ff ff                          fsgqa...
  backtrace:
    [<000000006315b419>] cifs_parse_mount_options+0xe5b/0x2230
    [<000000001aa09c5c>] cifs_setup_volume_info+0x1f/0x1f0
    [<00000000c1a42c36>] cifs_get_volume_info+0x4e/0x90
    [<00000000aa76ee94>] cifs_smb3_do_mount+0xa2/0x5b0
    [<00000000b87d07fd>] mount_fs+0x5c/0x191
    [<000000006a4dd4d9>] vfs_kern_mount.part.0+0x51/0x1b0
    [<000000008da7b30f>] do_mount+0x30b/0x1320
    [<000000009a9aa187>] ksys_mount+0x7e/0xc0
    [<00000000df394707>] __x64_sys_mount+0x62/0x70
    [<0000000063676d8d>] do_syscall_64+0x7b/0x2c0
    [<00000000c2dae16f>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [<00000000aea7b412>] 0xffffffffffffffff
unreferenced object 0xffff88810841ced0 (size 8):
  comm "mount.cifs", pid 747, jiffies 4295139638 (age 63.640s)
  hex dump (first 8 bytes):
    68 75 61 77 65 69 00 00                          huawei..
  backtrace:
    [<000000001aa09c5c>] cifs_setup_volume_info+0x1f/0x1f0
    [<00000000c1a42c36>] cifs_get_volume_info+0x4e/0x90
    [<00000000aa76ee94>] cifs_smb3_do_mount+0xa2/0x5b0
    [<00000000b87d07fd>] mount_fs+0x5c/0x191
    [<000000006a4dd4d9>] vfs_kern_mount.part.0+0x51/0x1b0
    [<000000008da7b30f>] do_mount+0x30b/0x1320
    [<000000009a9aa187>] ksys_mount+0x7e/0xc0
    [<00000000df394707>] __x64_sys_mount+0x62/0x70
    [<0000000063676d8d>] do_syscall_64+0x7b/0x2c0
    [<00000000c2dae16f>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [<00000000aea7b412>] 0xffffffffffffffff

评论 (3)

LuoMeng 创建了任务 3年前

Hi Luo_meng_meng, welcome to the openEuler Community.
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here.
If you have any questions, please contact the SIG: Kernel, and any of the maintainers: @yangyingliang , @gatieme , @jiaoff , @zhengzengkai , @LiuYongQiang0816 , @wangxiongfeng , @kevinzhu1 , @jentlestea , @lujialin2 , @wuxu_buque , @xukuohai , @lengchao , @alvin-ling , @yuzenghui , @yuehaibing , @juntianlinux , @chenguangli , @gasonchen , @whoisxxx , @koulihong , @kailiu42 , @hanjun-guo , @woqidaideshi , @chiqijun , @wkfxxx , @thundertown , @guohaocs2c , @kylin-mayukun , @oskernel0719 , @liuxinux , @newbeats , @zhujianwei001 , @zhenpengzheng , @SuperSix173 , @colyli , @zhangyi089 , @htforge , @qiuuuuu , @xiexiuqi

openeuler-ci-bot 添加了
 
sig/Kernel
标签
3年前

LTS补丁2fe0e281f7ad 分析:
代码分析:

cifs_get_root # 此处失败
deactivate_locked_super
  cifs_kill_sb # 通过 fs->kill_sb 回调
    cifs_umount
      kfree(cifs_sb->prepath); # 已释放一次
       call_rcu(&cifs_sb->rcu, delayed_free)
       smb3_cleanup_fs_context(cifs_sb->ctx)
         kfree(ctx)
         kfree(cifs_sb->prepath); # 重复释放
        smb3_cleanup_fs_context(cifs_sb->ctx);
        kfree(cifs_sb); # 重复释放


delayed_free # 此处会释放
  smb3_cleanup_fs_context(cifs_sb->ctx);

根据上述流程补丁修复了double free的问题

在openEuler-1.0-LTS里流程如下:

cifs_get_root
  deactivate_locked_super
    cifs_kill_sb 
      cifs_umount
        kfree(cifs_sb->mountdata)
        kfree(cifs_sb->prepath)
        call_rcu(&cifs_sb->rcu, delayed_free)
  cifs_cleanup_volume_info(volume_info) # 回合补丁后该分支跳过
    kfree(volume_info)

在4,19的代码逻辑中不会发生double free,而此时若在合入LTS补丁会导致跳过cifs_cleanup_volume_info(),此时会导致memory leak。

登录 后才可以发表评论

状态
负责人
项目
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
预计工期 (小时)
开始日期   -   截止日期
-
置顶选项
优先级
分支
参与者(2)
5329419 openeuler ci bot 1632792936 LuoMeng-Luo_meng_meng
C
1
https://gitee.com/openeuler/kernel.git
git@gitee.com:openeuler/kernel.git
openeuler
kernel
kernel

搜索帮助