EN JP CN

CWARN.MEMSET.SIZEOF.PTR

CWARN.MEMSET.SIZEOF.PTR

'sizeof' を持つ memset のような関数がポインターに適用されます

CWARN.MEMSET.SIZEOF.PTR チェッカーは、ポイントされたオブジェクトの代わりにポインターに sizeof が適用されている memset 型関数にフラグを立てます。

脆弱性とリスク

memset 関数に不適切なサイズが渡されると、呼び出しによって間違ったバイト数が入力されます。このような状況は、バッファオーバーフローのような脆弱性をもたらす場合があります。

脆弱コード例

1  #include <memory.h>

2  struct S {
3    int x, y;
4  };
  
5  void zero_S(struct S *ps) {
6    memset(ps, 0, sizeof(ps));
7  }

この例では、Klocwork は、ポインター ps に sizeof が適用されている 5 行目にフラグを立てます。

修正コード例

1  #include <memory.h>

2  struct S {
3     int x, y;
4  };

5  void zero_S(struct S *ps) {
7    memset(ps, 0, sizeof(*ps));     
8    memset(ps, 0, sizeof(struct S));
9  }

修正例では、コードが正しく入力されている 7 行目と 8 行目の 2 つのインスタンスを示します。