CWARN.MEMSET.SIZEOF.PTR
'sizeof' を持つ memset のような関数がポインターに適用されます
CWARN.MEMSET.SIZEOF.PTR チェッカーは、ポイントされたオブジェクトの代わりにポインターに sizeof が適用されている memset 型関数にフラグを立てます。
脆弱性とリスク
memset 関数に不適切なサイズが渡されると、呼び出しによって間違ったバイト数が入力されます。このような状況は、バッファオーバーフローのような脆弱性をもたらす場合があります。
脆弱コード例
コピー
#include <memory.h>
struct S {
int x, y;
};
void zero_S(struct S *ps) {
memset(ps, 0, sizeof(ps));
}
この例では、Klocwork は、ポインター ps に sizeof が適用されている 5 行目にフラグを立てます。
修正コード例
コピー
#include <memory.h>
struct S {
int x, y;
};
void zero_S(struct S *ps) {
memset(ps, 0, sizeof(*ps));
memset(ps, 0, sizeof(struct S));
}
修正例では、コードが正しく入力されている 6 行目と 7 行目の 2 つのインスタンスを示します。