108 Star 72 Fork 298

src-openEuler/kernel

CVE-2022-49850

已完成
CVE和安全问题 拥有者
创建于  
2025-05-02 01:24

一、漏洞信息
漏洞编号:CVE-2022-49850
漏洞归属组件:kernel
漏洞归属的版本:4.19.140,4.19.194,4.19.90,5.10.0,6.1.19,6.4.0,6.6.0
CVSS V3.0分值:
BaseScore:5.5 Medium
Vector:CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
漏洞简述:
In the Linux kernel, the following vulnerability has been resolved:nilfs2: fix deadlock in nilfs_count_free_blocks()A semaphore deadlock can occur if nilfs_get_block() detects metadatacorruption while locating data blocks and a superblock writeback occurs atthe same time:task 1 task 2------ ------* A file operation *nilfs_truncate() nilfs_get_block() down_read(rwsem A) <-- nilfs_bmap_lookup_contig() ... generic_shutdown_super() nilfs_put_super() * Prepare to write superblock * down_write(rwsem B) <-- nilfs_cleanup_super() * Detect b-tree corruption * nilfs_set_log_cursor() nilfs_bmap_convert_error() nilfs_count_free_blocks() __nilfs_error() down_read(rwsem A) <-- nilfs_set_error() down_write(rwsem B) <-- *** DEADLOCK ***Here, nilfs_get_block() readlocks rwsem A (= NILFS_MDT(dat_inode)->mi_sem)and then calls nilfs_bmap_lookup_contig(), but if it fails due to metadatacorruption, __nilfs_error() is called from nilfs_bmap_convert_error()inside the lock section.Since __nilfs_error() calls nilfs_set_error() unless the filesystem isread-only and nilfs_set_error() attempts to writelock rwsem B (=nilfs->ns_sem) to write back superblock exclusively, hierarchical lockacquisition occurs in the order rwsem A -> rwsem B.Now, if another task starts updating the superblock, it may writelockrwsem B during the lock sequence above, and can deadlock trying toreadlock rwsem A in nilfs_count_free_blocks().However, there is actually no need to take rwsem A innilfs_count_free_blocks() because it, within the lock section, only readsa single integer data on a shared struct withnilfs_sufile_get_ncleansegs(). This has been the case after commitaa474a220180 ( nilfs2: add local variable to cache the number of cleansegments ), that is, even before this bug was introduced.So, this resolves the deadlock problem by just not taking the semaphore innilfs_count_free_blocks().
漏洞公开时间:2025-05-01 23:16:08
漏洞创建时间:2025-05-02 01:24:00
漏洞详情参考链接:
https://nvd.nist.gov/vuln/detail/CVE-2022-49850

更多参考(点击展开)
参考来源 参考链接 来源链接
416baaa9-dc9f-4396-8d5f-8c081fb06d67 https://git.kernel.org/stable/c/1d4ff73062096c21b47954d2996b4df259777bda
416baaa9-dc9f-4396-8d5f-8c081fb06d67 https://git.kernel.org/stable/c/36ff974b0310771417c0be64b64aa221bd70d63d
416baaa9-dc9f-4396-8d5f-8c081fb06d67 https://git.kernel.org/stable/c/3c89ca6d3dfa6c09c515807a7a97a521f5d5147e
416baaa9-dc9f-4396-8d5f-8c081fb06d67 https://git.kernel.org/stable/c/8ac932a4921a96ca52f61935dbba64ea87bbd5dc
416baaa9-dc9f-4396-8d5f-8c081fb06d67 https://git.kernel.org/stable/c/8b4506cff6630bb474bb46a2a75c31e533a756ba
416baaa9-dc9f-4396-8d5f-8c081fb06d67 https://git.kernel.org/stable/c/abc082aac0d9b6b926038fc3adb7008306581be2
416baaa9-dc9f-4396-8d5f-8c081fb06d67 https://git.kernel.org/stable/c/cb029b54953420f7a2d65100f1c5107f14411bdc
416baaa9-dc9f-4396-8d5f-8c081fb06d67 https://git.kernel.org/stable/c/f0cc93080d4c09510b74ecba87fd778cca390bb1
suse_bugzilla http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2022-49850 https://bugzilla.suse.com/show_bug.cgi?id=1242164
suse_bugzilla https://www.cve.org/CVERecord?id=CVE-2022-49850 https://bugzilla.suse.com/show_bug.cgi?id=1242164
suse_bugzilla https://git.kernel.org/stable/c/1d4ff73062096c21b47954d2996b4df259777bda https://bugzilla.suse.com/show_bug.cgi?id=1242164
suse_bugzilla https://git.kernel.org/stable/c/36ff974b0310771417c0be64b64aa221bd70d63d https://bugzilla.suse.com/show_bug.cgi?id=1242164
suse_bugzilla https://git.kernel.org/stable/c/3c89ca6d3dfa6c09c515807a7a97a521f5d5147e https://bugzilla.suse.com/show_bug.cgi?id=1242164
suse_bugzilla https://git.kernel.org/stable/c/8ac932a4921a96ca52f61935dbba64ea87bbd5dc https://bugzilla.suse.com/show_bug.cgi?id=1242164
suse_bugzilla https://git.kernel.org/stable/c/8b4506cff6630bb474bb46a2a75c31e533a756ba https://bugzilla.suse.com/show_bug.cgi?id=1242164
suse_bugzilla https://git.kernel.org/stable/c/abc082aac0d9b6b926038fc3adb7008306581be2 https://bugzilla.suse.com/show_bug.cgi?id=1242164
suse_bugzilla https://git.kernel.org/stable/c/cb029b54953420f7a2d65100f1c5107f14411bdc https://bugzilla.suse.com/show_bug.cgi?id=1242164
suse_bugzilla https://git.kernel.org/stable/c/f0cc93080d4c09510b74ecba87fd778cca390bb1 https://bugzilla.suse.com/show_bug.cgi?id=1242164
suse_bugzilla https://git.kernel.org/pub/scm/linux/security/vulns.git/plain/cve/published/2022/CVE-2022-49850.mbox https://bugzilla.suse.com/show_bug.cgi?id=1242164
suse_bugzilla https://bugzilla.redhat.com/show_bug.cgi?id=2363377 https://bugzilla.suse.com/show_bug.cgi?id=1242164

漏洞分析指导链接:
https://gitee.com/openeuler/cve-manager/blob/master/cve-vulner-manager/doc/md/manual.md
漏洞数据来源:
openBrain开源漏洞感知系统
漏洞补丁信息:

详情(点击展开)
影响的包 修复版本 修复补丁 问题引入补丁 来源
https://git.kernel.org/stable/c/1d4ff73062096c21b47954d2996b4df259777bda nvd
https://git.kernel.org/stable/c/36ff974b0310771417c0be64b64aa221bd70d63d nvd
https://git.kernel.org/stable/c/3c89ca6d3dfa6c09c515807a7a97a521f5d5147e nvd
https://git.kernel.org/stable/c/8ac932a4921a96ca52f61935dbba64ea87bbd5dc nvd
https://git.kernel.org/stable/c/8b4506cff6630bb474bb46a2a75c31e533a756ba nvd
https://git.kernel.org/stable/c/abc082aac0d9b6b926038fc3adb7008306581be2 nvd
https://git.kernel.org/stable/c/cb029b54953420f7a2d65100f1c5107f14411bdc nvd
https://git.kernel.org/stable/c/f0cc93080d4c09510b74ecba87fd778cca390bb1 nvd

二、漏洞分析结构反馈
影响性分析说明:
In the Linux kernel, the following vulnerability has been resolved:nilfs2: fix deadlock in nilfs_count_free_blocks()A semaphore deadlock can occur if nilfs_get_block() detects metadatacorruption while locating data blocks and a superblock writeback occurs atthe same time:task 1 task 2------ ------* A file operation *nilfs_truncate() nilfs_get_block() down_read(rwsem A) <-- nilfs_bmap_lookup_contig() ... generic_shutdown_super() nilfs_put_super() * Prepare to write superblock * down_write(rwsem B) <-- nilfs_cleanup_super() * Detect b-tree corruption * nilfs_set_log_cursor() nilfs_bmap_convert_error() nilfs_count_free_blocks() __nilfs_error() down_read(rwsem A) <-- nilfs_set_error() down_write(rwsem B) <-- *** DEADLOCK ***Here, nilfs_get_block() readlocks rwsem A (= NILFS_MDT(dat_inode)->mi_sem)and then calls nilfs_bmap_lookup_contig(), but if it fails due to metadatacorruption, __nilfs_error() is called from nilfs_bmap_convert_error()inside the lock section.Since __nilfs_error() calls nilfs_set_error() unless the filesystem isread-only and nilfs_set_error() attempts to writelock rwsem B (=nilfs->ns_sem) to write back superblock exclusively, hierarchical lockacquisition occurs in the order rwsem A -> rwsem B.Now, if another task starts updating the superblock, it may writelockrwsem B during the lock sequence above, and can deadlock trying toreadlock rwsem A in nilfs_count_free_blocks().However, there is actually no need to take rwsem A innilfs_count_free_blocks() because it, within the lock section, only readsa single integer data on a shared struct withnilfs_sufile_get_ncleansegs(). This has been the case after commitaa474a220180 ("nilfs2: add local variable to cache the number of cleansegments"), that is, even before this bug was introduced.So, this resolves the deadlock problem by just not taking the semaphore innilfs_count_free_blocks().The Linux kernel CVE team has assigned CVE-2022-49850 to this issue.
openEuler评分:
5.5
Vector:CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
受影响版本排查(受影响/不受影响):
1.openEuler-20.03-LTS-SP4(4.19.90):受影响
2.master(6.6.0):不受影响
3.openEuler-22.03-LTS-SP3(5.10.0):不受影响
4.openEuler-22.03-LTS-SP4(5.10.0):不受影响
5.openEuler-24.03-LTS(6.6.0):不受影响
6.openEuler-24.03-LTS-Next(6.6.0):不受影响
7.openEuler-24.03-LTS-SP1(6.6.0):不受影响
8.openEuler-24.03-LTS-SP2(6.6.0):不受影响

修复是否涉及abi变化(是/否):
1.master(6.6.0):否
2.openEuler-20.03-LTS-SP4(4.19.90):否
3.openEuler-22.03-LTS-SP3(5.10.0):否
4.openEuler-22.03-LTS-SP4(5.10.0):否
5.openEuler-24.03-LTS(6.6.0):否
6.openEuler-24.03-LTS-Next(6.6.0):否
7.openEuler-24.03-LTS-SP1(6.6.0):否
8.openEuler-24.03-LTS-SP2(6.6.0):否

原因说明:
1.openEuler-20.03-LTS-SP4(4.19.90):正常修复
2.master(6.6.0):不受影响-漏洞代码不能被攻击者触发
3.openEuler-22.03-LTS-SP3(5.10.0):不受影响-漏洞代码不能被攻击者触发
4.openEuler-22.03-LTS-SP4(5.10.0):不受影响-漏洞代码不能被攻击者触发
5.openEuler-24.03-LTS(6.6.0):不受影响-漏洞代码不能被攻击者触发
6.openEuler-24.03-LTS-Next(6.6.0):不受影响-漏洞代码不能被攻击者触发
7.openEuler-24.03-LTS-SP1(6.6.0):不受影响-漏洞代码不能被攻击者触发
8.openEuler-24.03-LTS-SP2(6.6.0):不受影响-漏洞代码不能被攻击者触发

三、漏洞修复
安全公告链接:https://www.openeuler.org/zh/security/safety-bulletin/detail/?id=openEuler-SA-2025-1513

评论 (7)

openeuler-ci-bot 创建了CVE和安全问题 29天前
openeuler-ci-bot 添加了
 
CVE/UNFIXED
标签
29天前
展开全部操作日志

Hi openeuler-ci-bot, 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.

openeuler-ci-bot 添加了
 
sig/Kernel
标签
29天前
参考网址 关联pr 状态 补丁链接
https://nvd.nist.gov/vuln/detail/CVE-2022-49850NoneNonehttps://git.kernel.org/stable/c/1d4ff73062096c21b47954d2996b4df259777bda
https://git.kernel.org/stable/c/8b4506cff6630bb474bb46a2a75c31e533a756ba
https://git.kernel.org/stable/c/f0cc93080d4c09510b74ecba87fd778cca390bb1
https://git.kernel.org/stable/c/8ac932a4921a96ca52f61935dbba64ea87bbd5dc
https://git.kernel.org/stable/c/abc082aac0d9b6b926038fc3adb7008306581be2
https://git.kernel.org/stable/c/36ff974b0310771417c0be64b64aa221bd70d63d
https://git.kernel.org/stable/c/3c89ca6d3dfa6c09c515807a7a97a521f5d5147e
https://git.kernel.org/stable/c/cb029b54953420f7a2d65100f1c5107f14411bdc
https://ubuntu.com/security/CVE-2022-49850
https://www.opencve.io/cve/CVE-2022-49850NoneNonehttps://git.kernel.org/stable/c/1d4ff73062096c21b47954d2996b4df259777bda
https://git.kernel.org/stable/c/8b4506cff6630bb474bb46a2a75c31e533a756ba
https://git.kernel.org/stable/c/f0cc93080d4c09510b74ecba87fd778cca390bb1
https://git.kernel.org/stable/c/8ac932a4921a96ca52f61935dbba64ea87bbd5dc
https://git.kernel.org/stable/c/abc082aac0d9b6b926038fc3adb7008306581be2
https://git.kernel.org/stable/c/36ff974b0310771417c0be64b64aa221bd70d63d
https://git.kernel.org/stable/c/3c89ca6d3dfa6c09c515807a7a97a521f5d5147e
https://git.kernel.org/stable/c/cb029b54953420f7a2d65100f1c5107f14411bdc
https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2022-49850
https://security-tracker.debian.org/tracker/CVE-2022-49850NoneNonehttps://git.kernel.org/linus/8ac932a4921a96ca52f61935dbba64ea87bbd5dc
http://www.cnnvd.org.cn/web/vulnerability/queryLds.tag?qcvCnnvdid=CVE-2022-49850

说明:补丁链接仅供初步排查参考,实际可用性请人工再次确认,补丁下载验证可使用CVE补丁工具
若补丁不准确,烦请在此issue下评论 '/report-patch 参考网址 补丁链接1,补丁链接2' 反馈正确信息,便于我们不断优化工具,不胜感激。
如 /report-patch https://security-tracker.debian.org/tracker/CVE-2021-3997 https://github.com/systemd/systemd/commit/5b1cf7a9be37e20133c0208005274ce4a5b5c6a1

openeuler-ci-bot 修改了描述 28天前
openeuler-ci-bot 修改了描述 23天前
openeuler-ci-bot 修改了描述 23天前
openeuler-ci-bot 修改了描述 23天前
openeuler-ci-bot 计划开始日期设置为2025-05-02 23天前
openeuler-ci-bot 计划截止日期设置为2025-06-01 23天前
openeuler-ci-bot 优先级设置为次要 23天前

CVE-2022-49850

影响性分析说明:
In the Linux kernel, the following vulnerability has been resolved:

nilfs2: fix deadlock in nilfs_count_free_blocks()

A semaphore deadlock can occur if nilfs_get_block() detects metadata
corruption while locating data blocks and a superblock writeback occurs at
the same time:

task 1 task 2


  • A file operation *
    nilfs_truncate()
    nilfs_get_block()
    down_read(rwsem A) <--
    nilfs_bmap_lookup_contig()
    ... generic_shutdown_super()
    nilfs_put_super()
    * Prepare to write superblock *
    down_write(rwsem B) <--
    nilfs_cleanup_super()
    * Detect b-tree corruption * nilfs_set_log_cursor()
    nilfs_bmap_convert_error() nilfs_count_free_blocks()
    __nilfs_error() down_read(rwsem A) <--
    nilfs_set_error()
    down_write(rwsem B) <--

                         *** DEADLOCK ***
    

Here, nilfs_get_block() readlocks rwsem A (= NILFS_MDT(dat_inode)->mi_sem)
and then calls nilfs_bmap_lookup_contig(), but if it fails due to metadata
corruption, __nilfs_error() is called from nilfs_bmap_convert_error()
inside the lock section.

Since __nilfs_error() calls nilfs_set_error() unless the filesystem is
read-only and nilfs_set_error() attempts to writelock rwsem B (=
nilfs->ns_sem) to write back superblock exclusively, hierarchical lock
acquisition occurs in the order rwsem A -> rwsem B.

Now, if another task starts updating the superblock, it may writelock
rwsem B during the lock sequence above, and can deadlock trying to
readlock rwsem A in nilfs_count_free_blocks().

However, there is actually no need to take rwsem A in
nilfs_count_free_blocks() because it, within the lock section, only reads
a single integer data on a shared struct with
nilfs_sufile_get_ncleansegs(). This has been the case after commit
aa474a220180 ("nilfs2: add local variable to cache the number of clean
segments"), that is, even before this bug was introduced.

So, this resolves the deadlock problem by just not taking the semaphore in
nilfs_count_free_blocks().

The Linux kernel CVE team has assigned CVE-2022-49850 to this issue.

openEuler评分:(评分和向量)
5.5
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

受影响版本排查(受影响/不受影响):
1.master(6.1.0):不受影响
2.openEuler-20.03-LTS-SP4:受影响
3.openEuler-22.03-LTS-SP3:不受影响
4.openEuler-22.03-LTS-SP4:不受影响
5.openEuler-24.03-LTS:不受影响
6.openEuler-24.03-LTS-Next:不受影响
7.openEuler-24.03-LTS-SP1:不受影响
8.openEuler-24.03-LTS-SP2:不受影响

修复是否涉及abi变化(是/否):
1.master(6.1.0):否
2.openEuler-20.03-LTS-SP4:否
3.openEuler-22.03-LTS-SP3:否
4.openEuler-22.03-LTS-SP4:否
5.openEuler-24.03-LTS:否
6.openEuler-24.03-LTS-Next:否
7.openEuler-24.03-LTS-SP1:否
8.openEuler-24.03-LTS-SP2:否

原因说明:
1.master(23.08.5):不受影响-漏洞代码不能被攻击者触发
2.openEuler-20.03-LTS-SP4:正常修复
3.openEuler-22.03-LTS-SP3:不受影响-漏洞代码不能被攻击者触发
4.openEuler-22.03-LTS-SP4:不受影响-漏洞代码不能被攻击者触发
5.openEuler-24.03-LTS:不受影响-漏洞代码不能被攻击者触发
6.openEuler-24.03-LTS-Next:不受影响-漏洞代码不能被攻击者触发
7.openEuler-24.03-LTS-SP1:不受影响-漏洞代码不能被攻击者触发
8.openEuler-24.03-LTS-SP2:不受影响-漏洞代码不能被攻击者触发

CVE-2022-49850

影响性分析说明:
In the Linux kernel, the following vulnerability has been resolved:

nilfs2: fix deadlock in nilfs_count_free_blocks()

A semaphore deadlock can occur if nilfs_get_block() detects metadata
corruption while locating data blocks and a superblock writeback occurs at
the same time:

task 1 task 2


  • A file operation *
    nilfs_truncate()
    nilfs_get_block()
    down_read(rwsem A) <--
    nilfs_bmap_lookup_contig()
    ... generic_shutdown_super()
    nilfs_put_super()
    * Prepare to write superblock *
    down_write(rwsem B) <--
    nilfs_cleanup_super()
    * Detect b-tree corruption * nilfs_set_log_cursor()
    nilfs_bmap_convert_error() nilfs_count_free_blocks()
    __nilfs_error() down_read(rwsem A) <--
    nilfs_set_error()
    down_write(rwsem B) <--

                         *** DEADLOCK ***
    

Here, nilfs_get_block() readlocks rwsem A (= NILFS_MDT(dat_inode)->mi_sem)
and then calls nilfs_bmap_lookup_contig(), but if it fails due to metadata
corruption, __nilfs_error() is called from nilfs_bmap_convert_error()
inside the lock section.

Since __nilfs_error() calls nilfs_set_error() unless the filesystem is
read-only and nilfs_set_error() attempts to writelock rwsem B (=
nilfs->ns_sem) to write back superblock exclusively, hierarchical lock
acquisition occurs in the order rwsem A -> rwsem B.

Now, if another task starts updating the superblock, it may writelock
rwsem B during the lock sequence above, and can deadlock trying to
readlock rwsem A in nilfs_count_free_blocks().

However, there is actually no need to take rwsem A in
nilfs_count_free_blocks() because it, within the lock section, only reads
a single integer data on a shared struct with
nilfs_sufile_get_ncleansegs(). This has been the case after commit
aa474a220180 ("nilfs2: add local variable to cache the number of clean
segments"), that is, even before this bug was introduced.

So, this resolves the deadlock problem by just not taking the semaphore in
nilfs_count_free_blocks().

The Linux kernel CVE team has assigned CVE-2022-49850 to this issue.

openEuler评分:(评分和向量)
5.5
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

受影响版本排查(受影响/不受影响):
1.master(6.1.0):不受影响
2.openEuler-20.03-LTS-SP4:受影响
3.openEuler-22.03-LTS-SP3:不受影响
4.openEuler-22.03-LTS-SP4:不受影响
5.openEuler-24.03-LTS:不受影响
6.openEuler-24.03-LTS-Next:不受影响
7.openEuler-24.03-LTS-SP1:不受影响
8.openEuler-24.03-LTS-SP2:不受影响

修复是否涉及abi变化(是/否):
1.master(6.1.0):否
2.openEuler-20.03-LTS-SP4:否
3.openEuler-22.03-LTS-SP3:否
4.openEuler-22.03-LTS-SP4:否
5.openEuler-24.03-LTS:否
6.openEuler-24.03-LTS-Next:否
7.openEuler-24.03-LTS-SP1:否
8.openEuler-24.03-LTS-SP2:否

原因说明:
1.master(23.08.5):不受影响-漏洞代码不能被攻击者触发
2.openEuler-20.03-LTS-SP4:正常修复
3.openEuler-22.03-LTS-SP3:不受影响-漏洞代码不能被攻击者触发
4.openEuler-22.03-LTS-SP4:不受影响-漏洞代码不能被攻击者触发
5.openEuler-24.03-LTS:不受影响-漏洞代码不能被攻击者触发
6.openEuler-24.03-LTS-Next:不受影响-漏洞代码不能被攻击者触发
7.openEuler-24.03-LTS-SP1:不受影响-漏洞代码不能被攻击者触发
8.openEuler-24.03-LTS-SP2:不受影响-漏洞代码不能被攻击者触发

openeuler-ci-bot 修改了描述 22天前
openeuler-ci-bot 任务状态待办的 修改为进行中 22天前
openeuler-ci-bot 任务状态进行中 修改为待办的 22天前
openeuler-ci-bot 任务状态待办的 修改为进行中 22天前
openeuler-ci-bot 通过合并 Pull Request !16177: Fix CVE-2022-49850任务状态进行中 修改为已完成 17天前
openeuler-ci-bot 任务状态已完成 修改为进行中 17天前
openeuler-ci-bot 通过合并 Pull Request !2073: release 4.19.90-2505.3.0任务状态进行中 修改为已完成 17天前
openeuler-ci-bot 移除了
 
CVE/UNFIXED
标签
17天前
openeuler-ci-bot 移除了
 
sig/Kernel
标签
17天前
openeuler-ci-bot 添加了
 
CVE/FIXED
标签
17天前
openeuler-ci-bot 添加了
 
sig/Kernel
标签
17天前
openeuler-ci-bot 修改了描述 14天前

登录 后才可以发表评论

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

搜索帮助