我正在linux内核中进行一些系统调用。由于双kfree()
引发错误,可能是一个很好的保护措施呢?
我想到的一个明显的想法是在NULL
之后将指针设置为kfree()
,并在下一次可能NULL
之前检查它是否kfree()
。我不确定这是否是正确的方法。请指导我。
答案 0 :(得分:3)
通常,您希望通过 design 来避免这种情况。几个例子:
kmalloc()
在您的驱动程序.probe
上,kfree()
在您的驱动程序.remove
上。然后你很好,probe/remove
调用由内核平衡。kmalloc()
在您的char驱动程序.open
上,kfree()
在您的驱动程序.release
上。同样好,open/release
调用由内核平衡。但是,在某些情况下,出于某种原因,您只是想要释放对象如果它已被分配,那么您在kfree()
之前对指针进行NULL化并检查的方法就完全没问题了。 (我会说这是一些设计不佳的东西......但我已经去过那里并完成了它;)
将来,如果您有这样的问题,想要查看方法是否足够流行,您可以浏览内核源代码。寻找类似的驱动程序,看看使用了什么模式。它会给你很好的见解!