タグ

セキュリティとCに関するxxxxxeeeeeのブックマーク (2)

  • ARR38-C. ライブラリ関数が無効なポインタを生成しないことを保証する

    1 2つのポインタと1つの整数を引数にとる。整数は、入力元バッファではなく、出力先バッファの要素数のみを指定する。 2 2つのポインタと1つの整数を引数にとる。整数は、出力先バッファではなく、入力元バッファの要素数のみを指定する。 3 2つのポインタと2つの整数を引数にとる。整数はいずれもポインタの要素数に対応する。 4 1つのポインタと2つのサイズに関する整数を引数にとる。第一の整数引数は、バッファの空きバイト数を指定する。第二の整数引数はバッファに書込むバイト数を指定する。 ポインタと整数を引数にとる関数の呼出しにおいて、与えるサイズはポインタの要素数より小さくなくてはならない。 違反コード (要素カウント) 次に示す違反コード例では、間違った要素数を使って wemcpy() を呼び出している。sizeof 演算子はサイズをバイト数で返すが、memcpy() は wchar_t * に

    ARR38-C. ライブラリ関数が無効なポインタを生成しないことを保証する
    xxxxxeeeee
    xxxxxeeeee 2011/01/13
    ポインタと配列のセキュリティリスク
  • 情報セキュリティ技術動向調査(2008 年上期):IPA 独立行政法人 情報処理推進機構

    このコードの意図は、「buf + len < buf の検査により、buf + len が大きすぎてアドレス空間の終端を越えてしまうならば、アドレス空間の終端を越えないようにlen を小さくする」というものである。 JVNVU#162289 は、直接的には、このbuf + len < buf の検査がC コンパイラの最適化によって常に偽になると判断される可能性があることを指摘している。その理由は、このbuf + len の足し算がオーバーフローしたとき、オーバーフローしたキャリービットを除いた値が結果として得られるという保証がないためである。 この「保証がない」というのはC の規格がその保証を要求していないためであり、C コンパイラは、そのような場合にどのような振舞をするかを自由に選べる。最適化は一般に高速なオブジェクトコードを目指すわけであるから、if 文自体を削除してもC の規格には反

  • 1