pcap_close和关闭同时使用时可双倍释放

Double free when use pcap_close and fclose simultaneously

提问人:KS_No 提问时间:6/9/2023 最后编辑:ProgmanKS_No 更新时间:6/9/2023 访问量:25

问:

FILE* file = fopen(some file)

pcap_t* pd = pcap_fopen_offline(file)

pcap_close(pd)

fclose(file)

此代码发生双重释放错误。

你能解释一下这件事吗?

我的猜测是 pd 和文件指针正在共享一些数据。

c libpcap fclose 双自由

评论

1赞 KS_No 6/9/2023
它们共享文件描述符。我在调用之前和之后通过 fileno 检查了 *file 的文件描述符pcap_close。然后,文件描述符将 3 更改为 -1。*file 仍然可用,但系统没有文件描述符。不过,我不知道为什么这种情况会让双重免费,但是将 pcap_close 和 fclose 一起使用可能会出现一些问题。

答:

1赞 David Schwartz 6/9/2023 #1

正如文档所述,该函数关闭了与传递给它的结构关联的文件。再次关闭文件是错误的。pcap_closepcap_tfclose