来自kzalloc的memset中的Linux内核NULL指针取消引用

问题描述 投票:4回答:1

很偶然地偶然发现了内核丛林中的一些代码,有些困惑。 kzalloc()有两种实现:在tools/virtio/linux/kernel.h中和在linux/slab.h中的主要实现。显然,在大多数情况下,使用第二个。但是有时会使用“ virtio” kzalloc()。“ virtio” kzalloc()看起来像这样:

static inline void *kzalloc(size_t s, gfp_t gfp)
{
    void *p = kmalloc(s, gfp);

    memset(p, 0, s);
    return p;
}

[我的困惑是,在“ tools”目录中使用的“ fake” kmalloc()可以返回NULL指针。同样,看起来memset()实现不检查NULL指针,因此可能存在NULL指针取消引用。是错误还是我错过了什么?

c linux linux-kernel memset kmalloc
1个回答
0
投票

标头主要用于用户空间测试,例如virtio_test

来自tools/virtio/virtio_test.c的git-log:

这是该工具的用户空间部分:它包括一堆用于linux API,有点类似于linuxsched。这样就可以在用户空间中重新编译铃声代码。

实现了一个小测试示例,将其与vhost_test结合在一起模块。

所以是的,代码有点不安全(干净的编码会在NULL之前测试memset()指针,并通过适当的错误消息进行纾困),但是由于它只是一个测试工具,因此似乎具有被认为无关紧要跳过此测试。

© www.soinside.com 2019 - 2024. All rights reserved.