从这个网页截图中,我们可以获取到以下关于漏洞的关键信息: 1. 漏洞描述: - 问题:memcg (memory control group) 的并发访问导致的内存控制组创建失败。 - 原因:memcg 的 ID 从 CSS ID 空间中分离出来,引入了 IDR (IDR) 来维护 memcg ID 空间。IDR 需要外部同步机制来保护修改。 - 问题根源:memcg_group_idr 的 idr_alloc() 和 idr_replace() 操作发生在 css 回调中,因此在并发修改时受到保护。然而,idr_remove() 对于 memcg_group_idr 并没有保护,导致在不同的 memcgs 中并发运行时,当它们的 refcnt 击零时,可能会发生内存控制组的创建失败。 2. 漏洞影响: - 触发条件:在 memcg 的 list_lru 基准代码中,包括 list_lru_add()、list_lru_del() 和重新分配代码。 - 触发机制:在特定的 memcg 操作中,list_lru_one 对象的 memcg 不在 memcg_group_idr 中,或者 memcg_group_idr 中存在多个具有相同 ID 的 memcg。 3. 修复措施: - 修复方法:在 memcg_group_idr 中引入 IDR 保护机制,确保 memcg 的 ID 在并发操作中保持一致。 - 修复代码:代码片段显示了对 memcg_group_idr 的 IDR 保护机制的实现,包括 idr_preload()、spin_lock()、idr_remove() 和 spin_unlock() 等操作。 4. 修复范围: - 修复范围:修复了多个 memcg 创建失败的问题,包括 73f576c04b94 和 6f0df8e16eb5 的问题。 - 修复代码:代码片段显示了对 memcg_group_idr 的 IDR 保护机制的实现,包括 idr_preload()、spin_lock()、idr_remove() 和 spin_unlock() 等操作。 5. 修复验证: - 验证方法:通过链接到的 LKML 论坛讨论和代码审查来验证修复的有效性。 - 验证结果:修复了多个 memcg 创建失败的问题,并且在后续的代码审查中得到了验证。 通过这些信息,我们可以了解到 memcg 的并发访问导致的内存控制组创建失败的问题,以及修复措施和验证过程。