从这个网页截图中,我们可以获取到以下关于漏洞的关键信息: 1. 漏洞描述: - 该漏洞与内核中的slub(slab allocator)模块有关。 - 在commit 946fa0dbf2d8之后,设置orig_size(原始大小)时,会将浪费的空间(object_size - orig_size)视为红区。然而,当init_on_free=1时,会清除整个对象的大小,包括红区。 - 此外,还会清除对象的元数据,包括存储的orig_size,使其变为零,这使得check_object()函数将整个对象视为红区。 2. 问题描述: - 这些问题导致了与slub_debug=FUZ相关的bug报告。 - bug报告中显示了内存泄漏和内存溢出的情况。 3. 修复措施: - 使用orig_size来清除使用的区域,并在清除剩余区域后恢复orig_size的值。 - 当CONFIG_SLUB_DEBUG未定义时,(get_orig_size())直接返回s->object_size。因此,当使用memset来初始化区域时,大小可以简单地设置为orig_size,因为orig_size在未启用CONFIG_SLUB_DEBUG时返回object_size。 4. 补丁内容: - 补丁代码中添加了对orig_size的处理,以确保在清除区域时正确处理orig_size。 - 补丁代码中还添加了对KASAN的处理,以确保在内存分配和释放时正确处理orig_size。 5. 补丁应用: - 补丁应用在mm/slab.c文件中,具体位置在slab_update_freelist函数中。 6. 补丁效果: - 补丁修复了在slab_debug=FUZ时的bug报告,减少了内存泄漏和内存溢出的情况。 通过这些信息,我们可以了解到该漏洞的背景、问题描述、修复措施以及补丁应用的具体位置和效果。