malloc guard
http://marc.theaimsgroup.com/...
Hackathon が開催中なのでソースツリーが更新されまくってるんだけど、 なかにはこんなものが。
次のような馬鹿げたミスをしても停止してくれるようになった。
#include <stdio.h> #include <stdlib.h> struct foo { int i; char *t; }; main() { struct foo *f; struct foo b = { -1, "Invalid code has passed, why?" }; f = malloc(sizeof(f)); /* wrong! should be sizeof(*f) */ memcpy(f, &b, sizeof(b)); printf("%s\n", f->t); return 0; }
segmentation fault を吐いて異常終了してくれる。
もちろん環境変数 MALLOC_OPTIONS に 'G' を含ませるか、 /etc/malloc.conf の設定をしないと効果はないので注意 (このオプションと 'F(Freeguard)' は OpenBSD のみ完備。 FreeBSD や NetBSD には存在しない。残念でした)。
malloc の guard オプション 'F' や 'G' は、 設定しても実行時のパフォーマンスにそれほど影響はないので、 デフォルト On でもいいかもしれない。
# ln -s FG /etc/malloc.conf
動かないソフトが出るかもしれないけど、 それは運良く動いているだけのこと。 この際だから直しちゃえ。
参考: http://marc.theaimsgroup.com/...