漏洞成因
此漏洞与CVE-2021-22555利用方式相似。
@@ -320,7 +319,7 @@ long watch_queue_set_filter(struct pipe_inode_info *pipe,
tf[i].info_mask & WATCH_INFO_LENGTH)
goto err_filter;
/* Ignore any unknown types */
- if (tf[i].type >= sizeof(wfilter->type_filter) * 8)
+ if (tf[i].type >= WATCH_TYPE__NR)
continue;
nr_filter++;
}
@@ -336,7 +335,7 @@ long watch_queue_set_filter(struct pipe_inode_info *pipe,
q = wfilter->filters;
for (i = 0; i < filter.nr_filters; i++) {
- if (tf[i].type >= sizeof(wfilter->type_filter) * BITS_PER_LONG)
+ if (tf[i].type >= WATCH_TYPE__NR)
continue;
q->type = tf[i].type;
@@ -371,6 +370,7 @@ static void __put_watch_queue(struct kref *kref)
for (i = 0; i < wqueue->nr_pages; i++)
__free_page(wqueue->notes[i]);
+ bitmap_free(wqueue->notes_bitmap);
wfilter = rcu_access_pointer(wqueue

博客详细分析了一个Linux内核漏洞,CVE-2022-0995,该漏洞与CVE-2021-22555类似,涉及watch_queue_set_filter函数中的潜在溢出问题。通过用户态传递的structwatch_notification_filter可能导致内核内存访问越界,进而可能引发安全问题。博主提供了POC来演示漏洞触发过程,并解释了其与CVE-2021-22555的利用方式相仿。
最低0.47元/天 解锁文章
1136

被折叠的 条评论
为什么被折叠?



