ゼロクリアの削除
コンパイラの最適化により、memset()やZeroMemory()のコードが削除 されることがあるが、セキュリティ対策として意図的にゼロクリアしているコードまで 削除されている箇所がある。 対策1で進める。 なお、本対応によりユーザ見えには変化がないため、改版履歴には記載しない。 対策: 1. SecureZeroMemory()に置き換える MSDN上はXP以降のAPIとなっているが、実体は RtlSecureZeroMemory() というWinNT.h で定義されているインライン関数であるため、Windows95でもそのまま動く。 2. OpenSSH の explicit_bzero() のような自前の関数を使う。 /* * Indirect bzero through a volatile pointer to hopefully avoid * dead-store optimisation eliminating the call. */ static void (* volatile ssh_bzero)(void *, size_t) = bzero; void explicit_bzero(void *p, size_t n) { ssh_bzero(p, n); }
Details