G.SAF.FFI.03 禁止调用 C 不可重入函数
【级别】 要求
【描述】
在多线程条件下调用外部不可重入函数时,有可能会因竞争条件而导致意外的系统状态和不可预测的结 果,或导致拒绝服务和任意代码执行等内存安全问题。
C 语言标准库中常见的不可重入函数包括:
getenv()
, strtok()
, strerror()
, asctime()
, ctime()
, localtime()
, gmtime()
, setlocale()
, localeconv()
, syslog()
, getlogin()
等。
开发者能在 Unsafe Rust 下直接使用 extern "C"
或 libc
库调用这些函数。
一般情况下,开发者可将这些函数替换为其可重入版本,否则需要根据情况解决或预防因竞争而产生的问题。