返される前にグローバルハッシュテーブルに返されたポインターアドレスを追加するmalloc/callocラッパーを実装し、解放する前にテーブル内のポインターの存在をチェックするフリーラッパーを実装することはできません(存在しない場合は削除し、存在する場合は削除します)。次に、二重解放から保護するために、Firefoxなどのプログラムでこれらのmalloc/callocおよび解放関数をLD_PRELOADしますか?標準のmalloc/callocおよびfree関数がこのような手法を使用しない理由、またはstrcpyの代わりにstrcpy_sが提案される方法と同様に提案される安全なバリアントがない理由はありますか?
いいえ。二重解放が脆弱性である理由は、2番目のfree
の前に、メモリが別の何かのために再割り当てされているためです。そのようなラッパーは、free
がそのアドレスでのメモリの最初または2番目の割り当てを意図したものかどうかを知る方法がありません。