在内核代码中防止双kfree?

时间:2016-09-28 22:09:10

标签: c linux memory-management linux-kernel kernel

我正在linux内核中进行一些系统调用。由于双kfree()引发错误,可能是一个很好的保护措施呢?

我想到的一个明显的想法是在NULL之后将指针设置为kfree(),并在下一次可能NULL之前检查它是否kfree()。我不确定这是否是正确的方法。请指导我。

1 个答案:

答案 0 :(得分:3)

通常,您希望通过 design 来避免这种情况。几个例子:

  • kmalloc()在您的驱动程序.probe上,kfree()在您的驱动程序.remove上。然后你很好,probe/remove调用由内核平衡。
  • kmalloc()在您的char驱动程序.open上,kfree()在您的驱动程序.release上。同样好,open/release调用由内核平衡。

但是,在某些情况下,出于某种原因,您只是想要释放对象如果它已被分配,那么您在kfree()之前对指针进行NULL化并检查的方法就完全没问题了。 (我会说这是一些设计不佳的东西......但我已经去过那里并完成了它;)

将来,如果您有这样的问题,想要查看方法是否足够流行,您可以浏览内核源代码。寻找类似的驱动程序,看看使用了什么模式。它会给你很好的见解!