Misc Change Log

`OpenBSD で scheme のアプリ開発' みたいなことをやってます。

2005-05-25

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/...

Posted at 12:12 | Permalink | Category | Comments