From a6550b9f2c051d0305a4b616805ea854e21cb6d5 Mon Sep 17 00:00:00 2001 From: cclk Date: Thu, 13 Oct 2022 11:47:00 +0800 Subject: [PATCH] =?UTF-8?q?add(c,c++/3.4):=20=E6=B7=BB=E5=8A=A0=E4=B8=8D?= =?UTF-8?q?=E5=8F=AF=E9=87=8D=E5=85=A5=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加了不重入函数使用建议及函数列表 --- ...11\345\205\250\346\214\207\345\215\227.md" | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git "a/C,C++\345\256\211\345\205\250\346\214\207\345\215\227.md" "b/C,C++\345\256\211\345\205\250\346\214\207\345\215\227.md" index 57d135b..b91a003 100644 --- "a/C,C++\345\256\211\345\205\250\346\214\207\345\215\227.md" +++ "b/C,C++\345\256\211\345\205\250\346\214\207\345\215\227.md" @@ -33,7 +33,8 @@ + [3.1 变量应确保线程安全性](#1.3.1) + [3.2 注意signal handler导致的条件竞争](#1.3.2) + [3.3 注意Time-of-check Time-of-use条件竞争](#1.3.3) - * [IV. 加密解密](#1.4) + + [3.4 注意不可重入函数](#1.3.4) + [IV. 加密解密](#1.4) + [4.1 不得明文存储用户密码等敏感数据](#1.4.1) + [4.2 内存中的用户密码等敏感数据应该安全抹除](#1.4.2) + [4.3 rand() 类函数应正确初始化](#1.4.3) @@ -1074,6 +1075,27 @@ TOCTOU难以修复,但是有以下缓解方案: `中风险-逻辑问题` + +#### 3.4 【建议】注意不可重入函数 + +不可重入函数:是指这样的一类函数,不可以在它还没有返回就再次被调用。例如printf,malloc,free等都是不可重入函数。函数不可重入大多数是因为在函数中引用了全局变量。例如,printf会引用全局变量stdout,malloc,free会引用全局的内存分配表。 + +不可重入函数,在多线程下可能无法达成预期结果,参考列表如下: + +1. rand、srand +2. asctime、ctime、localtime、gmtime +3. getenv、getenv_s +4. strtok +5. strerror +6. setlocale +7. atomic_init +8. gethostbyaddr、gethostbyname +9. inet_ntoa + +关联漏洞: + +`中风险-逻辑问题` + ### 4 加密解密