按顺序使用stat和mkdir的竞争条件

时间:2016-06-20 20:19:29

标签: mkdir stat coverity

Coverity抱怨。 toctou:调用在检查功能后使用DIR的函数mkdir。这可能导致检查时间,使用时间竞争条件

Iterable[Any]

将代码更改为是否足够好,我只使用stat进行文件存在检查

if (stat(DIR, &st) != 0)
{
    if (mkdir(DIR, 0755) < 0)
    {
        return ERROR;
    }
}

有没有更好的方法来修复代码?

1 个答案:

答案 0 :(得分:1)

您的两个代码段似乎都不正确和/或不完整。

在OpenBSD上,sys_mkdirreturn -1,并在目标文件存在时将errno设置为EEXIST。但是,这并不能保证目标文件是一个目录 - 现有的常规文件仍会导致mkdir(2)返回完全相同的EEXIST

要获得广泛接受的方法的指导,请查看mkdir(1) -p option如何在bin/mkdir/mkdir.c#mkpath in OpenBSDNetBSD之间实施mkdir(2)'sstat(2)错误,似乎立即调用S_ISDIR以便随后运行Python MySQL Connector library宏以确保现有文件是目录,而不仅仅是任何其他类型的文件。