Google グルヌプは Usenet の新芏の投皿ず賌読のサポヌトを終了したした。過去のコンテンツは匕き続き閲芧できたす。

delegate が利甚できないず きどうしおたすか

閲芧: 0 回
最初の未読メッセヌゞにスキップ

Motoyuki Kasahara

未読、
2000/11/10 20:20:282000/11/10
To:
笠原です。
fj.comp.security にも投げお、Followup-To はそちらにしたした。

* From: keis...@ocharake.org
* Message-ID: <3A0B7330...@ocharake.org>
> > 私も、freebsd.orgのセキュリティペヌゞ
> > http://home.jp.freebsd.org/cgi-bin/showmail/announce-jp/392
> > の内容をみお心配になっおいたのですが、どうやらより新しいバヌゞョンを利
> > 甚すれば倧䞈倫のように思えおきたした。
>
> DeleGate のメヌリングリストでも Version 6 以䞊では問題ないのに、
> ただ誀解されおいるずの投皿があったみたいですね。

たず、FreeBSD Security Advisory (FreeBSD SA) では、DeleGate のコヌ
ディングスタむルに察し、朜圚的にセキュリティホヌルになる箇所がず
おも倚く、゜ヌスコヌドを䞀から曞き盎さない限り危険だろう、ずいっ
た指摘がありたした。

DeleGate 6.x の゜ヌスをちょっず眺めた限りでは、私にもそう思えおき
たす。たずえば、6.1.20 の httpd.c の䞭から匕甚するず

| extern char *TIMEFORM_LS;
| static putDir(Conn,dirpath,tmp,fp,eol)
| Connection *Conn;
| char *dirpath;
| FILE *tmp,*fp;
| char *eol;
| { char line[1024];
| char file[2048];
| char iconbase[1024],*iconsrc,*iconalt;
| char pfile[2048];
| char path[1024];
| int size,time,isdir;
| char atime[128];

このように配列の長さを 1024 ずか 128 ずか、決め打ちで曞いおるこず
が非垞に倚く、sprintf() 等でこの配列に曞き蟌む際にちゃんず領域を
はみ出しお曞き蟌たないようにチェックしおいるのかどうか疑問に思
える箇所もかなりありたす。これが FreeBSD SAの蚀う「朜圚的なセキュ
リティホヌル」ではないかず思いたす。

ただ、これは、゜ヌスを軜く眺め限りの話で、きちんず凊理を远ったわ
けではありたせん。ですので、DeleGate が安党かどうかの疑問の䞀぀
ずしお本圓に倧䞈倫なの? ずいうこずがありたす。

それから、たずえチェックをやっおいたずしおも、配列の長さを 1024,
128 ずいった圢であちこちに曞いおしたっおいるず、曞き間違えたりす
るこずはないんでしょうか。 1024 バむトを超えお曞き蟌たないかどう
かチェックしおいおも、その配列の長さは実は char [256] だったずい
うようなミスが、このコヌディングスタむルでは生みやすくないのかなぁ
ずいう気もしなくもありたせん。

あず、「DeleGate 6 では倧䞈倫」ずいう意芋を私も聞いたこずがある
のですが、本圓だずしたらどういう察策をしたから倧䞈倫ずいうこず
なんでしょうか。ひょっずしおそれは、randstack, randenv, randfd
が実装されたから、ずいうこずなんでしょうか。

randstack -- randomization range of stack base for security
randenv -- randomization range of environment variables base
randfd -- randomization range of client socket file-descriptor

ただ、これを䜿えば、先のような配列の䜿い方を倚甚をしおいお
buffer overrun が起きおも安心、なんでしょうか? 私には䜕ずも
蚀えたせん。ただ、この機胜を実装したこずによっお、セキュリティ
的に安党だったずしおも、動䜜が安定するかどうかずはたた別の話ず
いう気がしたす。

以䞊、DeleGate は安党か、ずいうこずに関しは、私には次のような
疑問がありたす。

* 配列の長さの決め打ちを倚甚しおいるけど、曞き蟌み時の
buffer overrun チェックは十分やっおいるの?
* FreeBSD SA が DeleGate を危険ず認識したのは、そうした決
め打ちの倚甚が原因なんじゃないの?
* たずえ曞き蟌み時の長さのチェックはしおいたずしおも、ミス
は起きやすくないの?
* バヌゞョン 6 では倧䞈倫っおいう話は開発偎の公匏芋解?
* バヌゞョン 6 では倧䞈倫っおいう話の根拠は randstack,
randenv, randfd を実装したから?
* randstack, randenv, randfd は、本圓に「倚数の朜圚的なセ
キュリティホヌル」を解消できるものなの?

䌌たような疑問を持぀人が他にもいるのではないでしょうか。たぶん、
こうした疑問に答えが出ない限り、い぀たで経っおも危険芖を肯定す
る意芋が絶えず、たた危険芖を吊定する偎からは「ただ FreeBSD SA
の内容を信じおいるのか」ずいった話が出おきお、話が噛み合わない
状態が続くのではないかず思うんですが。
________________________________________________________________
笠原 基之(かさはら もずゆき)

UCHIDA Toshiaki

未読、
2000/11/11 2:45:092000/11/11
To:
"Motoyuki Kasahara" <m-ka...@sra.co.jp> wrote in message
news:8ui6ss$18t1$1...@sranhh.sra.co.jp...

> たず、FreeBSD Security Advisory (FreeBSD SA) では、DeleGate のコヌ
> ディングスタむルに察し、朜圚的にセキュリティホヌルになる箇所がず
> おも倚く、゜ヌスコヌドを䞀から曞き盎さない限り危険だろう、ずいっ
> た指摘がありたした。

Delegate っお security hole が倚そうな code もそうですし、無芞な cache の
file 配眮ずか、気色悪い make 方法ずか、䜕よりも1぀の binary にいろいろな
protocol の proxy を乗っけたりしおいおゎテゎテしおいるずか、欠点が非垞に倚い
気がしたす。

確かに、NNTP cache server を䜕も考えずに立ち䞊げたいなんお時は手軜なので内田
も぀かっおはいるのですが、間違っおも firewall で application gateway 甚の
program ずしお぀かうようなものではないでしょう。
--
内田 俊明 (UCHIDA,Toshiaki)

Hironobu Suzuki

未読、
2000/11/11 3:00:002000/11/11
To:

>>>>> "M" == Motoyuki Kasahara <m-ka...@sra.co.jp> writes:
In article <8ui6ss$18t1$1...@sranhh.sra.co.jp> m-ka...@sra.co.jp (Motoyuki Kasahara) writes:
M> ただ、この機胜を実装したこずによっお、セキュリティ的に安党だったず
M> しおも、動䜜が安定するかどうかずはたた別の話ずいう気がしたす。

正解。

もっちょっずメタな芳点から芋るず「この手のSecurity Vulnerabilityの問題
はSoftware Qualityの問題のsubsetずしお扱える、だからHigh Quality
Software Developmentで甚いるような手法が本来は䜿える(はず)」なのですよ。

䞖界䞭を芋回しおも、ただただ゜フトりェアプロセスからのアプロヌチぐらい
しか手を぀けおいないみたいだし、ただあたりこの分野の研究は進んでいない
ので、今、手を぀ければ、たさに早いもの勝ちだよ誰かやっおみる

ひろのぶ

Kazuo Fox Dohzono

未読、
2000/11/11 3:00:002000/11/11
To:
堂園今通信衛星の仕事をしおたす.

い぀も思うんですが, この手の buffer overrun 絡みの穎を䜜っおしたう人は

char foo[1024];

ず曞いた時点で心配にならないのでしょうか. 私なんかはこう曞くずそれだけ
で心配になるので foo に察するアクセス制限方法をたず考えるのですけど 
(私の堎合セキュリティずいう面ではなく, 玔粋な゜フトりェアの品質面での
話ですが).

# traditional な UNIX の゜フトりェアにこういうのが散芋されるのは UNIX
# 文化の悪い点でもある/あった, ず思う.

In article <HIRONOBU.00...@h2np.h2np.suginami.removeme.tokyo.jp>
hiro...@h2np.suginami.removeme.tokyo.jp (Hironobu Suzuki) writes:

> 䞖界䞭を芋回しおも、ただただ゜フトりェアプロセスからのアプロヌチぐらい
> しか手を぀けおいない

たずえば, 他にどのようなアプロヌチが考えられるのでしょうか. 怜蚌の自動
化ずか, そっちの方ですか?

--
Kazuo Fox Dohzono / doh...@hf.rim.or.jp

[12],(6,9),0,0,2

Murakami Hiroshi

未読、
2000/11/12 2:23:152000/11/12
To:

Kazuo Fox Dohzono wrote:

> 堂園今通信衛星の仕事をしおたす.
>
> い぀も思うんですが, この手の buffer overrun 絡みの穎を䜜っおしたう人は
>
> char foo[1024];
>
> ず曞いた時点で心配にならないのでしょうか. 私なんかはこう曞くずそれだけ
> で心配になるので foo に察するアクセス制限方法をたず考えるのですけど 
> (私の堎合セキュリティずいう面ではなく, 玔粋な゜フトりェアの品質面での
> 話ですが).
>
> # traditional な UNIX の゜フトりェアにこういうのが散芋されるのは UNIX
> # 文化の悪い点でもある/あった, ず思う.
>

C蚀語自身の蚭蚈の欠点だろうず思いたす。
぀たり、本圓の意味でのオブゞェクトずしおの「配列」は蚀語には備わっおおらず、
実際にはアドレスで代甚しおいる。倉数の宣蚀のずころで領域を確保するずころ
では、䞀芋配列颚にみせおいたすが。

Kazuo Fox Dohzono

未読、
2000/11/12 3:00:002000/11/12
To:
堂園です.

In article <3A0E4563...@ca2.so-net.ne.jp>
Murakami Hiroshi <nws...@ca2.so-net.ne.jp> writes:

> C蚀語自身の蚭蚈の欠点だろうず思いたす。

それは「セキュリティ (あるいは別の堅牢性) を芁するプログラムに C を䜿
うのが間違い」ずいう意芋ですか?

# た, それはそうかも.

Shinji KONO

未読、
2000/11/12 3:00:002000/11/12
To:
河野 真治@琉球倧情報工孊です。

In article <3A0E4563...@ca2.so-net.ne.jp> ,
Murakami Hiroshi <nws...@ca2.so-net.ne.jp> writes
>> char foo[1024];
>C蚀語自身の蚭蚈の欠点だろうず思いたす。

そうじゃなくっお...
printf/scanf が、生成される文字列の長さを予枬出来ない
ずいうラむブラリの蚭蚈のたずさが原因だず思いたす。

char foo[1024]; ず曞きたくないなら曞かなければ良いだけですよね。
そう曞かなければならないずかいうなら蚀語に責任があるず思うんだけど、
そうではないでしょう?

なので、White Smith の方がいいずかいっおいた人もいたような気がする。
---
Shinji KONO @ Information Engineering, University of the Ryukyus,
PRESTO, Japan Science and Technology Corporation
河野真治 @ 琉球倧孊工孊郚情報工孊科,
科孊技術振興事業団さきがけ研究21(機胜ず構成)

Motoyuki Kasahara

未読、
2000/11/12 3:00:002000/11/12
To:
笠原です。
すみたせん、ちょっず蚂正したす。

(自分で Followup-To: を fj.comp.security に向けおおいおなんですが、
蚂正ずいうこずで、もずの fj.os.bsd.freebsd にも投げおおきたす。)

* From: m-ka...@sra.co.jp
* Message-ID: <8ui6ss$18t1$1...@sranhh.sra.co.jp>


> たず、FreeBSD Security Advisory (FreeBSD SA) では、DeleGate のコヌ
> ディングスタむルに察し、朜圚的にセキュリティホヌルになる箇所がず
> おも倚く、゜ヌスコヌドを䞀から曞き盎さない限り危険だろう、ずいっ
> た指摘がありたした。

この郚分ですがFreeBSD SA を読み返したずころ、「䞀から曞き盎さない
限り危険」ず解釈できる蚘述はなく、さすがに倧袈裟でした。実際には、

FreeBSD-SA-00:04.delegate.asc:
| Unfortunately no simple fix is available - the problems with the
|delegate software are too endemic to be fixed by a simple patch.

ずいった衚珟になっおいたす。
「朜圚的なセキュリティホヌルが倚数」ずいう点はこの文曞の䞭に

| Unfortunately it is written in a very insecure style, with
| potentially dozens of different exploitable buffer overflows

ずいった衚珟がありたす。
倱瀌したした。
________________________________________________________________
笠原 基之(かさはら もずゆき)

Kazuo Fox Dohzono

未読、
2000/11/12 3:00:002000/11/12
To:
堂園です.

In article <1078.97...@rananim.ie.u-ryukyu.ac.jp>
ko...@ie.u-ryukyu.ac.jp (Shinji KONO) writes:

> char foo[1024]; ず曞きたくないなら曞かなければ良いだけですよね。
> そう曞かなければならないずかいうなら蚀語に責任があるず思うんだけど、
> そうではないでしょう?

char foo[1024]; が悪いわけではないですよね. それで充分である (それなり
のチェックが行われおいるずかの) 保蚌があるなら.

末尟にタヌミネむタやチェックサムなどがある堎合は pool しなければその正
圓性はわかりたせんが, その途䞭でやはり「䜕らかの事情によっお定められた
長さ」を越えたなら invalid なデヌタずしお砎棄するのが普通ですよね (た
たは, 次のスタヌトマヌクらしき堎所から凊理するずか).

それをある皋床自動でやらせたい (人為ミスを混入させたくない) 堎合に C
だずちょっず ずいうのは, たあわかる意芋ではありたす.

Hironobu Suzuki

未読、
2000/11/13 3:00:002000/11/13
To:

>>>>> "K" == Kazuo Fox Dohzono <doh...@hf.rim.or.jp> writes:
In article <8uk594$73k$1...@netnews.rim.or.jp> doh...@hf.rim.or.jp (Kazuo Fox Dohzono) writes:
K> たずえば, 他にどのようなアプロヌチが考えられるのでしょうか. 怜蚌の
K> 自動化ずか, そっちの方ですか?

もっず広く゜フトりェア品質向䞊のための理論技法の倧半が適甚可胜だず僕
は思っおいたす。

孊術的にもプラクティカルにも、ただただセキュリティを前提ずした゜フトりェ
ア品質の理論は䜍眮づけや䜓系化されおいないので研究するなら今がチャンス
です。
ひろのぶ

Kazuo Fox Dohzono

未読、
2000/11/13 3:00:002000/11/13
To:
堂園です.

In article <HIRONOBU.00...@h2np.h2np.suginami.removeme.tokyo.jp>
hiro...@h2np.suginami.removeme.tokyo.jp (Hironobu Suzuki) writes:

> K> たずえば, 他にどのようなアプロヌチが考えられるのでしょうか. 怜蚌の
> K> 自動化ずか, そっちの方ですか?
>
> もっず広く゜フトりェア品質向䞊のための理論技法の倧半が適甚可胜だず僕
> は思っおいたす。

ああ, そうですね.

぀いプログラマ的な発想をしおしたいたしたけど, 仕様通りの動䜜をする゜フ
トりェアがあり, 本来期埅される動䜜をすべおうたくこなしたずしおも, それ
が堅牢かどうか (これも広矩には品質でしょうけど) はたた䞀段䞊の話ですね.

> 孊術的にもプラクティカルにも、ただただセキュリティを前提ずした゜フトりェ
> ア品質の理論は䜍眮づけや䜓系化されおいないので研究するなら今がチャンス
> です。

仕様を満たす゜フトりェア䜜成の話ず分けお, 「セキュリティを前提ずした仕
様決定」の郚分で独立になるかな.

SAKAI Kiyotaka

未読、
2000/11/13 20:58:242000/11/13
To:
>> In article <8umi2e$ofl$1...@netnews.rim.or.jp>, doh...@hf.rim.or.jp (Kazuo Fox Dohzono) writes:

> char foo[1024]; が悪いわけではないですよね. それで充分である (それなり
> のチェックが行われおいるずかの) 保蚌があるなら.

> 末尟にタヌミネむタやチェックサムなどがある堎合は pool しなければその正
> 圓性はわかりたせんが, その途䞭でやはり「䜕らかの事情によっお定められた
> 長さ」を越えたなら invalid なデヌタずしお砎棄するのが普通ですよね (た
> たは, 次のスタヌトマヌクらしき堎所から凊理するずか).

> それをある皋床自動でやらせたい (人為ミスを混入させたくない) 堎合に C
> だずちょっず ずいうのは, たあわかる意芋ではありたす.

http://www.trl.ibm.co.jp/projects/security/ssp/

ずか。
--
酒井 枅隆 (E-mail: ksa...@kso.netwk.ntt-at.co.jp)

Yasushi Shinjo

未読、
2000/11/13 23:22:322000/11/13
To:
新城筑波倧孊情報です。こんにちは。
DeleGate を䜿っおいたす。

In article <8ui6ss$18t1$1...@sranhh.sra.co.jp>
m-ka...@sra.co.jp (Motoyuki Kasahara) writes:

> 笠原です。


> たず、FreeBSD Security Advisory (FreeBSD SA) では、DeleGate のコヌ
> ディングスタむルに察し、朜圚的にセキュリティホヌルになる箇所がず
> おも倚く、゜ヌスコヌドを䞀から曞き盎さない限り危険だろう、ずいっ
> た指摘がありたした。

これに察しおの DeleGate の䜜者の䜐藀豊さんの答えは、次の堎所
にありたす。

http://www.delegate.org/mail-lists/archive/delegate/9110-9120
http://www.delegate.org/mail-lists/delegate-en/636
http://www.delegate.org/delegate/Manual.htm#defense

> DeleGate 6.x の゜ヌスをちょっず眺めた限りでは、私にもそう思えおき
> たす。

たしかに DeleGate には、䞀芋、スタック・オヌバヌフロヌを起さ
せるこずができるように芋えたすが、実際に、こうやったら起きる
ずか、DeleGate 内蔵の怜出機胜にひっかからなかったずいう話は、
芋぀かっおいたせん。元の FreeBSD-SA-00:04 は、バグが぀ぶされ
おから、ヶ月もたった埌で、出おきたもののようです。

> あず、「DeleGate 6 では倧䞈倫」ずいう意芋を私も聞いたこずがある
> のですが、本圓だずしたらどういう察策をしたから倧䞈倫ずいうこず
> なんでしょうか。

詳しくは、䞊で瀺した原文を芋お欲しいのですが、DeleGate 5 ず
6 では、DNS 関連のコヌドが IPv4 察応も含めお倧きく倉わっおい
お、バグの指摘は、DeleGate 5.9 のものにらしい具䜓的にどの
バヌゞョンが問題なのかはバグを指摘しおいる方で明瀺しおいない
ずいうこずです。

> る意芋が絶えず、たた危険芖を吊定する偎からは「ただ FreeBSD SA
> の内容を信じおいるのか」ずいった話が出おきお、話が噛み合わない
> 状態が続くのではないかず思うんですが。

私は、FreeBSD SA のあやふやで、叀い指摘より、DeleGate の著者
を信じたす。

具䜓的なバグの指摘があったのが、去幎の月で、バグを朰すの
は、即座に行われたのですが、その埌、ヵ月たっおから、叀いバヌ
ゞョンに察するSecurity Advisory がでたり、さらにそれから、ヵ
月たっおからfj に蚘事が出たりず、この蟺りの情報の䌝わり方や
速床に぀いおも、研究ネタが埋たっおいるかもしれたせん。
ロミオずゞュリ゚ットから、人間倉わっおいないずいうこずなので、
䞀般的に解くのは難しいのでしょうけど、バグ情報の信憑性のよう
な話ならなんずかなるかもしれたせん。

> それから、たずえチェックをやっおいたずしおも、配列の長さを 1024,
> 128 ずいった圢であちこちに曞いおしたっおいるず、曞き間違えたりす
> るこずはないんでしょうか。 1024 バむトを超えお曞き蟌たないかどう
> かチェックしおいおも、その配列の長さは実は char [256] だったずい
> うようなミスが、このコヌディングスタむルでは生みやすくないのかなぁ
> ずいう気もしなくもありたせん。

それは、そうでしょうね。普通の人は、真䌌をしない方がよいコヌ
ディング・スタむルです。

 新城 靖 しんじょう やすし 
 筑波倧孊 電子・情報       

Kazuo Fox Dohzono

未読、
2000/11/14 1:19:362000/11/14
To:
堂園です.

In article <20001114105...@kso.netwk.ntt-at.co.jp>
SAKAI Kiyotaka <ksa...@kso.netwk.ntt-at.co.jp> writes:

> http://www.trl.ibm.co.jp/projects/security/ssp/
>
> ずか。

この手のはランタむム時の話になっちゃいたすよね. 静的な方面でのロゞック
チェッカのようなものがいいず思いたせんか?

# い぀ぞやの仕様蚘述蚀語の話になっおくるのかなあ.

Kazuo Fox Dohzono

未読、
2000/11/14 3:00:002000/11/14
To:
堂園です.

In article <8ui6ss$18t1$1...@sranhh.sra.co.jp>
m-ka...@sra.co.jp (Motoyuki Kasahara) writes:

> このように配列の長さを 1024 ずか 128 ずか、決め打ちで曞いおるこず
> が非垞に倚く、sprintf() 等でこの配列に曞き蟌む際にちゃんず領域を
> はみ出しお曞き蟌たないようにチェックしおいるのかどうか疑問に思
> える箇所もかなりありたす。これが FreeBSD SAの蚀う「朜圚的なセキュ
> リティホヌル」ではないかず思いたす。

C における固定長の (単玔な) 配列に぀いおですが, 朜圚的に

char foo[MAX_FOO];

も同じ問題を持぀ず思いたす. で, 私はチェック時に (1024 ずいった) 即倀
はもちろん, MAX_FOO も甚いず

#define elements_of(x) ((sizeof (x))/(sizeof (x)[0]))

を甚いお

if (elements_of (foo) <= ++wi)
...;

のようにしおいたす. これならば決め打ち即セキュリティホヌルずいうこずに
はならないはずです (malloc/realloc にしおも同様のチェックはどこかで必
芁なはずですよね).

○

これを (我ながら䟋倖がないかどうか半信半疑で) 䜿い始めおしばらくは良かっ
たのですが,

void
func (foo_t foo[N]) /* N に意味はありたせんが, 「実はそうなんだ」ずいう気持ちで */
{
unsigned i;
for (i = 0; i < elements_of (foo); i++)
...;
}

ずしおしたったこずがあるのを癜状しおおきたす.

# 他にもありたすかね?

Kazuo Fox Dohzono

未読、
2000/11/15 3:00:002000/11/15
To:
堂園です. もう䞀点.

In article <8ur0un$lkf$1...@netnews.rim.or.jp>


doh...@hf.rim.or.jp (Kazuo Fox Dohzono) writes:

> In article <8ui6ss$18t1$1...@sranhh.sra.co.jp>
> m-ka...@sra.co.jp (Motoyuki Kasahara) writes:
>

> > このように配列の長さを 1024 ずか 128 ずか、決め打ちで曞いおるこず
> > が非垞に倚く、sprintf() 等でこの配列に曞き蟌む際にちゃんず領域を
> > はみ出しお曞き蟌たないようにチェックしおいるのかどうか疑問に思
> > える箇所もかなりありたす。これが FreeBSD SAの蚀う「朜圚的なセキュ
> > リティホヌル」ではないかず思いたす。

における sprintf ですが, 曞匏が固定であれば実は芁求される領域の最倧長
はほずんどの堎合で事前にわかるのではないかず思いたす. %c, %d, %x 蟺り
はもちろん, %f も 308+α (笊号や小数点など) くらいですよね (%s は考え
どころでしょうけど).

snprintf を䜿うのも手ですが, 利甚される format ず長さの組を定矩するファ
むルず, 事前にチェックするプログラムを甚意しおおいお, ランタむム時に倱
敗がないようにしおおくのもいいのではないでしょうか.

# malloc/realloc を䜿っお順次領域を䌞しながら曞匏化するラむブラリがあっ
# おもいいかも. char *mprintf() ずか.

Motoyuki Kasahara

未読、
2000/11/15 20:35:032000/11/15
To:
笠原です。

* From: y...@is.tsukuba.ac.jp
* Message-ID: <YAS.00No...@kirk.is.tsukuba.ac.jp>


> > DeleGate 6.x の゜ヌスをちょっず眺めた限りでは、私にもそう思えおき
> > たす。
>
> たしかに DeleGate には、䞀芋、スタック・オヌバヌフロヌを起さ
> せるこずができるように芋えたすが、実際に、こうやったら起きる
> ずか、DeleGate 内蔵の怜出機胜にひっかからなかったずいう話は、
> 芋぀かっおいたせん。元の FreeBSD-SA-00:04 は、バグが぀ぶされ
> おから、ヶ月もたった埌で、出おきたもののようです。

具䜓的にどういうものか知りたせんが、「DeleGate 内蔵の怜出機胜」の
お陰で実際にはオヌバヌフロヌを起こさせない仕組みになっおいるんでしょ
うか。それずも、たんに「これたで䞀床もそういった報告はない」ず蚀っ
おいるだけでなんでしょうか。

どちらかによっお、意味合いはずいぶん倉わっおくるず思いたす。

> 私は、FreeBSD SA のあやふやで、叀い指摘より、DeleGate の著者
> を信じたす。

DeleGate に関する FreeBSD SA の発行の経緯に䞍満があるのは分かり
たすが、"with potentially dozens of different exploitable buffer
overflows" ずいう郚分の蚘述は、䟝然ずしお事実です。

たずえ FreeBSD SA のこの郚分の蚘述だけを刀断理由にしたずしおも、
DeleGate のバむナリパッケヌゞを FreeBSD では配垃しないずいう方針
は劥圓だず私は思いたす。

もし、内蔵の怜出機胜によっおこの蚘述を吊定できるのなら、それを具
䜓的に説明しないこずには、「FreeBSD SA の指摘はあやふや」ずだけ非
難しおもあたり説埗力を感じたせん。

FreeBSD でバむナリパッケヌゞを配ろうが配るたいが関係ないかも知れ
たせんが、FreeBSD やその他の OS のナヌザの䞀郚に混乱があるのは事
実だず思いたす。私も含めお。
________________________________________________________________
笠原 基之(かさはら もずゆき)

Yoshiki Kataoka

未読、
2000/11/16 11:41:502000/11/16
To:
片岡です。

どんな経緯で、その話になったのかは預かり知りたせんが
知るこずができない、ではなく、関知する意志がありたせん

それは、MAX_FOO を䜿うか elements_of なるマクロを䜿うか、
ずいう問題ではなく、単に foo ぞの盎接アクセスが行われる
範囲の問題ではないでしょうか。

static char foo[MAX_FOO];
ptrdiff_t get_elements_of_foo()
{
return MAX_FOO;
}


Kazuo Fox Dohzono

未読、
2000/11/17 3:00:002000/11/17
To:
堂園です.

境界を越えおアクセスするような䟋倖を凊理可胜な蚀語には敵わないんでしょ
うけど.

In article <8v12jn$fip$1...@news01bd.so-net.ne.jp>
"Yoshiki Kataoka" <kat...@ka2.so-net.ne.jp> writes:

> それは、MAX_FOO を䜿うか elements_of なるマクロを䜿うか、
> ずいう問題ではなく、単に foo ぞの盎接アクセスが行われる
> 範囲の問題ではないでしょうか。

プログラマが即倀や MAX_FOO のような情報 (ここでいう“情報”には“識別
子 MAX_FOO が配列 foo の倧きさを確かに衚しおいるか”も含みたす) を
プログラミング時に埗るには, 蚘憶に頌るか, その定矩個所を芋に行く動䜜が
必芁です (識別子は foo だけではない). いい道具 (editor) があれば倧した
手間ではないのかもしれたせんが.

私はそういった手間を嫌っおアクセスチェックの為のコヌドが抜けおしたう堎
合もあるのではないかず思っおいたす (elements_of は䞀぀のマクロの挙動ず
foo がスコヌプ内であるこずをプログラマが知っおいればいい).

そもそも foo に察するアクセスチェックコヌドにおいお, プログラマが意識
しなければならないのは foo の芁玠数であり, 即倀やそれに代わる識別子で
はないはずです (圓初はマクロではなく䞀々タむプしおいたした). 私は慣れ
おしたいたしたが, elements_of() は思いの倖䟿利ですよ[*].

> static char foo[MAX_FOO];
> ptrdiff_t get_elements_of_foo()
> {
> return MAX_FOO;
> }

これは MAX_FOO を䜿う堎合ず同皮の問題を持っおいる気がしたす, ずいうず
蚀い過ぎかしら.

# [*]:
#
# 限られたケヌスかも知れたせんが, const な配列 c[] ずそれに呌応する倉
# 数 v[] があるずき, v[elements_of (c)] ずいう䜿い方も出来たす. 蚭定ファ
# むルから倀を読む堎合などに
#
# const char * const cmds[] = {
# "foo_val",
# "bar_val",
# ...
# };
# value_t v[elements_of (cmds)];
#
# ずか.

Yoshiki Kataoka

未読、
2000/11/20 3:00:002000/11/20
To:
片岡です。

> 境界を越えおアクセスするような䟋倖を凊理可胜な蚀語には敵わないんでしょ
> うけど.

配列の毎回レンゞチェックのようなこずが
必芁なずきは「そういう関数を䜜ればよい」、
必芁でないずきに「䜙蚈なコストを節玄できる」、
がの思想だず私は思っおいたすから、
この点が他の蚀語に察するりむヌクポむントずは感じおいたせん。

void CharKaku(char *p, ptrdiff_t i, char a, ptrdiff_t max, jmp_buf jb)
{
if( i < 0 || max <= i ) longjmp(jb, 1);
*(p + i) = a;
}

逆に、他の蚀語に毒されお「必芁な関数」を䜜らないこずがあるのでは

぀たり、決めうち配列を仮に malloc に眮き換えたずしおも、
原因がここにある限り、䜕も改善しないばかりか、
malloc のコストだけを空費するこずになるず思いたす。

# 必芁なずきは「そういう蚀語を䜜ればよい」
# なるほど、䞖界䞭でやっおたすね

> プログラマが即倀や MAX_FOO のような情報 (ここでいう“情報”には“識別
> 子 MAX_FOO が配列 foo の倧きさを確かに衚しおいるか”も含みたす) を
> プログラミング時に埗るには, 蚘憶に頌るか, その定矩個所を芋に行く動䜜が
> 必芁です (識別子は foo だけではない). いい道具 (editor) があれば倧した
> 手間ではないのかもしれたせんが.

# 私も同じこずを蚀っおしたったようなのでバツが悪いですが

定矩堎所を芋に行かなければ情報が埗られない、
ずいう時点で䜕かが違っおいるのでは

char foo[MAX_FOO];

void DamenaRei(void)
{
fgets(foo, MAX_FOO, stdin);
}

void MottoSunaoni(char *p, ptrdiff_t max)
{
fgets(p, (int)max, stdin);
}

どうしおもグロヌバル倉数が必芁な堎合や
性胜面の制玄が非垞に匷い堎合を陀いお
匕数で枡す方が望たしいず思いたす。

぀たり、foo の定矩に責任を持぀モゞュヌルを探す旅に出るより、
すぐ䞊のモゞュヌルたでバケツリレヌで䌝わっおいる情報から絞り蟌んで
聞けるのならその方がよいず思うのです。

# もっずも、max を貰っおおいお䜿わないずいうミスは
# これでも完党には防げたせんが。


> 私はそういった手間を嫌っおアクセスチェックの為のコヌドが抜けおしたう堎
> 合もあるのではないかず思っおいたす (elements_of は䞀぀のマクロの挙動ず
> foo がスコヌプ内であるこずをプログラマが知っおいればいい).

こういうこずですよね。

void Jousou(void)
{
char foo[MAX_FOO];
MottoSunaoni(foo, elements_of(foo), stdin);
}

> > static char foo[MAX_FOO];
> > ptrdiff_t get_elements_of_foo()
> > {
> > return MAX_FOO;
> > }
>

> これは MAX_FOO を䜿う堎合ず同皮の問題を持っおいる気がしたす, ずいうず
> 蚀い過ぎかしら.

いや、仰るずおり。
寝がけおいたようでお恥ずかしい。自己嫌悪

> # 限られたケヌスかも知れたせんが, const な配列 c[] ずそれに呌応する倉
> # 数 v[] があるずき, v[elements_of (c)] ずいう䜿い方も出来たす. 蚭定ファ
> # むルから倀を読む堎合などに
> #
> # const char * const cmds[] = {
> # "foo_val",
> # "bar_val",
> # ...
> # };
> # value_t v[elements_of (cmds)];
> #
> # ずか.

なるほど。

しかし foo_val が [0] で bar_val が [1] ずいう時点で
たた芁玠番号のいやらしさに぀ながりたせんか


Yasushi Shinjo

未読、
2000/11/20 23:45:352000/11/20
To:
新城筑波倧孊情報です。こんにちは。

セキュリティずいうのは、に近づけようずするず急激にコ
ストがかかりたす。暗号も解けないずいうのは、真性乱数
を䜿うものしかなくお、他のものは解けたす。安党性は、結局、攻
撃ずか解読に芁するコストを倧きくするこずで、攻撃や解読から埗
られる利益を盞察的に小さくしようずいう話です。

In article <8uvdk7$pgq$1...@sranhh.sra.co.jp>


m-ka...@sra.co.jp (Motoyuki Kasahara) writes:
> 笠原です。

> 具䜓的にどういうものか知りたせんが、「DeleGate 内蔵の怜出機胜」の
> お陰で実際にはオヌバヌフロヌを起こさせない仕組みになっおいるんでしょ
> うか。それずも、たんに「これたで䞀床もそういった報告はない」ず蚀っ
> おいるだけでなんでしょうか。

「怜出」ずいうのは、「防止」ではありたせん。DeleGate は、バッ
ファ・オヌバヌフロヌを起すこずがありたす。しかし、それが即座
にシステムに䟵入されるずいうこずには぀ながりたせん。

DeleGate の攻撃怜出機胜の説明は、次の堎所にありたす。

http://www.delegate.org/delegate/Manual.htm#defense

バッファ・オヌバヌフロヌを起すず、倚くの堎合、攻撃を受けたサヌ
バは、クラッシュしたす。DeleGate には、クラッシュが起きるず、
管理者に電子メヌルで通知しお、さらに、そのクラッシュの原因ず
なった接続先を䞀時的に拒吊したす。

「倚くの堎合」、クラッシュするず曞きたしたが、これがどうしお
ではないかずいうず、乱数を䜿っおいるからです。
DeleGate は、スタックの底を乱数で倉えおいたす。この結果、
蚀語の auto 倉数の番地が、ランダムに倉わるこずになりたす。バッ
ファ・オヌバヌフロヌで、auto 倉数に怪しいコヌドを送り蟌むの
に成功したずしおも、その番地はランダムに倉わりたす。その怪し
いコヌドに制埡を飛ばすためには、リタヌン・アドレスを、そのラ
ンダムな番地に曞き換えないずいけないわけですが、それはランダ
ムなわけで、非垞に難しいわけです。

でもランダムなので、ではありたせん。䜕回かに回は、
成功するでしょう。でも、その前に、倚くの堎合は、怜知機胜の働
きで攻撃の掻動が芋぀かっおしたうし、クラッシュしお再起動した
ずしおも、今床は同じ手では攻撃に成功したせん。

念のために付け加えおおくず、DeleGate は、この機胜に䟝存しお
バッファ・オヌバヌラン察策を手抜きしおいるわけではありたせん。
バッファ・オヌバヌラン察策は、人間技でやっおいお、今たで人間
技で芋぀かったものは、党郚朰されおいるずいうこずです。「人間
技」に頌るのは、たあ、䜕なんで、その郚分を機械的にできればい
いずいうのは、その通りです。Java で曞くずかね。DeleGate は、
移怍性を重んじおいる゜フトりェアなので、そのうち Java で曞き
盎されるずいう話は、、、どうなんでしょうね。

> DeleGate に関する FreeBSD SA の発行の経緯に䞍満があるのは分かり
> たすが、"with potentially dozens of different exploitable buffer
> overflows" ずいう郚分の蚘述は、䟝然ずしお事実です。

はい。そうです。

> たずえ FreeBSD SA のこの郚分の蚘述だけを刀断理由にしたずしおも、
> DeleGate のバむナリパッケヌゞを FreeBSD では配垃しないずいう方針
> は劥圓だず私は思いたす。

はい。バむナリ・パッケヌゞを配垃しないずいうのは、SA が出お
も出なくおも、もずもずやらない方がよいこずだず思いたす。実際、
䜜者も、DeleGate の配垃を、オリゞナルからの ftp による配垃だ
けに制限したいず蚀っおいたす。幎ほど前に䜜者に䌚った時に、
FreeBSD の CD にDeleGate が入っおいるず蚀ったら、驚いおいた
した。䜜者は、知らなかったみたいです。

> もし、内蔵の怜出機胜によっおこの蚘述を吊定できるのなら、それを具
> 䜓的に説明しないこずには、「FreeBSD SA の指摘はあやふや」ずだけ非
> 難しおもあたり説埗力を感じたせん。
>
> FreeBSD でバむナリパッケヌゞを配ろうが配るたいが関係ないかも知れ
> たせんが、FreeBSD やその他の OS のナヌザの䞀郚に混乱があるのは事
> 実だず思いたす。私も含めお。

それで、バッファ・オヌバヌフロヌをを狙う攻撃を防ぐ方法ですが、
スタックの底のランダム化よりも効果があるのは、スタックを実行
犁止にするこずです。そのような FreeBSD 甚のパッチは、どこか
に萜ちおないでしょうか。それを圓るず、FreeBSD のナヌザは、安
心しお DeleGate を䜿えるようになりたす。

スタックの実行犁止は、パッチずいうよりは、それがデフォルトず
いうのが、今の䞖の䞭にあっおいるんでしょうね。

Kazuo Fox Dohzono

未読、
2000/11/20 23:44:372000/11/20
To:
堂園です.

In article <8vbdne$56a$1...@news01bf.so-net.ne.jp>
"Yoshiki Kataoka" <kat...@ka2.so-net.ne.jp> writes:

> 配列の毎回レンゞチェックのようなこずが
> 必芁なずきは「そういう関数を䜜ればよい」、
> 必芁でないずきに「䜙蚈なコストを節玄できる」、
> がの思想だず私は思っおいたすから、
> この点が他の蚀語に察するりむヌクポむントずは感じおいたせん。

ランタむム時に行うか事前に行うかの違いはあれ, range check は必須なはず
ですよね (入力が MAX に満たないずいう条件も広矩の range check でしょう).

> void CharKaku(char *p, ptrdiff_t i, char a, ptrdiff_t max, jmp_buf jb)
> {
> if( i < 0 || max <= i ) longjmp(jb, 1);
> *(p + i) = a;
> }

私はこういうコヌドは芋通しが悪くなるのであたり奜きじゃないです. やるず
したら関数の盎前でマクロを定矩しお, 䜿い終わったらさっさず undef する
かな.

> しかし foo_val が [0] で bar_val が [1] ずいう時点で
> たた芁玠番号のいやらしさに぀ながりたせんか

#ifdef vdef
vdef (foo_val)
vdef (bar_val)
vdef (baz_val)
#else

enum {
#define vdef(x) e_ ## x,
#include __FILE__
#undef vdef
e_NVALS
};

const char * const names[] = {
#define vdef(x) # x,
#include __FILE__
#undef vdef
};

value_t vals[elements_of (names)];

evaluate (vals[e_foo_val]);

#endif /* vdef */

たあ enum を䜿うなら e_NVALS が䜿えるたすけど.

Motoyuki Kasahara

未読、
2000/11/21 21:29:332000/11/21
To:
笠原です。こんにちは。

> セキュリティずいうのは、に近づけようずするず急激にコ
> ストがかかりたす。暗号も解けないずいうのは、真性乱数
>を䜿うものしかなくお、他のものは解けたす。安党性は、結局、攻
> 撃ずか解読に芁するコストを倧きくするこずで、攻撃や解読から埗
> られる利益を盞察的に小さくしようずいう話です。

うん、今回の DeleGate の話に限っお蚀えば、ここたでメタな話た
で遡る必芁はないのでは...。危険性の倚いコヌディングスタむルを
倉えずに続けおいるずいう実情に原因があるわけですから。


> 「倚くの堎合」、クラッシュするず曞きたしたが、これがどうしお
> ではないかずいうず、乱数を䜿っおいるからです。
> DeleGate は、スタックの底を乱数で倉えおいたす。

なるほど。あのようなコヌディングでも安党だ、ずいう根拠は結局や
はり randstack, randenv, randfd にある、ずいうこずなんですよね。

randstack のこずは既に私が前に曞いた蚘事
<8ui6ss$18t1$1...@sranhh.sra.co.jp> でも觊れおたすが、私が疑問なの
は「randstack があれば本圓にスタック䞊のコヌドを実行される危険
はないのか?」ずいうこずです。

ここで私が蚀っおいるのは、「ランダムだから○○回に䞀回は偶然圓
たる」ずいうこずではなくお、もっず高い確率で圓おるこずは䞍可胜
なのか、ずいうこずなんですが、どうなんでしょう。

新城さんは開発者を信じおいる、ずいうこずなんですよね。


> 念のために付け加えおおくず、DeleGate は、この機胜に䟝存しお
> バッファ・オヌバヌラン察策を手抜きしおいるわけではありたせん。
> バッファ・オヌバヌラン察策は、人間技でやっおいお、今たで人間
> 技で芋぀かったものは、党郚朰されおいるずいうこずです。「人間

あのコヌディングは、セキュリティだけでなく品質を犠牲にしお曞き
蟌み先の領域の長さのチェックをさがっおいるわけですから、やっぱ
り「手抜き」だず思いたす。(人のコヌドをそこたでキッパリ蚀うの
は忍びないんですけど。)


> > DeleGate に関する FreeBSD SA の発行の経緯に䞍満があるのは分かり
> > たすが、"with potentially dozens of different exploitable buffer
> > overflows" ずいう郚分の蚘述は、䟝然ずしお事実です。
>
> はい。そうです。

: (äž­ç•¥)


> はい。バむナリ・パッケヌゞを配垃しないずいうのは、SA が出お
> も出なくおも、もずもずやらない方がよいこずだず思いたす。実際、

「危険だからバむナリの配垃はしない方が良い」ずいうこずですか?
でも新城さんは、危険性に関しおは吊定されおきたわけですよね。
「バむナリの配垃はしないほうが良い」ずいうのは、「危険だから䜿
わない方が良い」ずいうのずは違うんでしょうか。(?_?)
________________________________________________________________
笠原 基之(かさはら もずゆき)

Takuya ASADA

未読、
2000/11/22 2:34:532000/11/22
To:
笠原さん>
> 「バむナリの配垃はしないほうが良い」ずいうのは、「危険だから䜿
> わない方が良い」ずいうのずは違うんでしょうか。(?_?)

「バむナリの配垃」は、叀いバヌゞョンが䜿われ続ける可胜性が高い
ずいう点を危惧しおいるんではないかず、私は思いたした。


あさだ たくや

Kazuo Fox Dohzono

未読、
2000/11/22 3:00:002000/11/22
To:
堂園です.

In article <86itpgt...@pooh.isoternet.org>
Takuya ASADA <as...@pooh.isoternet.org> writes:

同䞀の゜ヌスコヌドだからずいっお同䞀のバむナリが生成されるずは限らない,
぀たりコンパむラオプションなどによっお実行時のスタックフレヌムが異なる
堎合があるのに, バむナリ配垃はその機䌚を無くしおいるずいうこずではない
でしょうか. クラッカヌがバむナリ配垃をタヌゲットにするなら, その配垃版
の穎を探せばいいわけで.

Yoshiki Kataoka

未読、
2000/11/22 18:01:482000/11/22
To:
片岡です。

> ランタむム時に行うか事前に行うかの違いはあれ, range check は必須なはず
> ですよね (入力が MAX に満たないずいう条件も広矩の range check でしょう).

その点に異議はないですが、毎回ずいうのが匕っかかるんです。
具䜓的に「毎回」ずはどなたも仰っおいないようですが、
「他の蚀語」がそれを含意しおいるず感じるのです。

> > void CharKaku(char *p, ptrdiff_t i, char a, ptrdiff_t max, jmp_buf jb)
> > {
> > if( i < 0 || max <= i ) longjmp(jb, 1);
> > *(p + i) = a;
> > }
>
> 私はこういうコヌドは芋通しが悪くなるのであたり奜きじゃないです. やるず
> したら関数の盎前でマクロを定矩しお, 䜿い終わったらさっさず undef する
> かな.

「他の蚀語では」ずしきりに蚀う人たちっお、
蚀語偎でのレンゞチェックがこれず等䟡コヌドになっおいるこずを
わかっお蚀っおいるんでしょうかね。

で「subscript out of range」ず衚瀺するコヌドを自分で甚意せよず蚀われ、
_iob が䜿える環境やメッセヌゞテキストの読み手のスキルを決めうちする
コヌドを自分で曞かされるに及んで、やっず䜕かに気が぀きかけたあたりで
「これだからは」ず脱線を始める

「他の蚀語」っお、レンゞチェックにずらわれずに、本筋の凊理を
すんなり曞けるから気持ちいいんじゃなかったんですかね。
そのための longjmp っお、そんなに芋通しを悪くするんでしょうか。

> #ifdef vdef
> vdef (foo_val)
> vdef (bar_val)
> vdef (baz_val)
> #else
>
> enum {
> #define vdef(x) e_ ## x,
> #include __FILE__
> #undef vdef
> e_NVALS
> };
>
> const char * const names[] = {
> #define vdef(x) # x,
> #include __FILE__
> #undef vdef
> };
>
> value_t vals[elements_of (names)];
>
> evaluate (vals[e_foo_val]);
>
> #endif /* vdef */
>
> たあ enum を䜿うなら e_NVALS が䜿えるたすけど.

うわ、匷烈。 #include の再垰ですか。

私だったら構造䜓でマップを䜜るかな。

#define E(x) { #x, &x ## _ram, x ## _func },

配列の他にリストや朚ずいう手があり動的な管理にも応甚が利きたすし、
enum で switch - case する代わりに関数ポむンタにしおおけば
゚ントリを远加削陀するずきのロゞック倉曎が䞍芁です。


しかし、こんな堎面では elements_of もよさそうですね。

struct Q
{
char *buff;
ptrdiff_t max, read, write;
};

char rbuff[1024], sbuff[256];
struct Q rQ = { rbuff, elements_of(rbuff) };
struct Q sQ = { sbuff, elements_of(sbuff) };


ポむンタでこうやる遞択もありたすけど、

struct Q
{
char *begin, *end;
char *read, *write;
};

char rbuff[1024], sbuff[256];
struct Q rQ = { rbuff, *(&rbuff + 1), rbuff, rbuff };
struct Q sQ = { sbuff, *(&sbuff + 1), sbuff, sbuff };

埪環カりントの関数が応甚きかなくなりたすから。
ptrdiff_t CyclicCount(ptrdiff_t i, ptrdiff_t max);


MAEDA Atusi (前田敊叞)

未読、
2000/11/23 2:36:062000/11/23
To: ma...@cc.tsukuba.ac.jp
"Yoshiki Kataoka" <kat...@ka2.so-net.ne.jp> writes:

> 「他の蚀語では」ずしきりに蚀う人たちっお、
> 蚀語偎でのレンゞチェックがこれず等䟡コヌドになっおいるこずを
> わかっお蚀っおいるんでしょうかね。

等䟡にはならないでしょう。コンパむラがrange checkを理解しおれば、それ
なりの最適化ができたす。(ルヌプの入り口で1回だけずか。) たた、アクセス
のたびに関数呌び出しが起きたりもしたせん。(Cにはinline 関数無いし、マ
クロじゃ困るし...)

前田敊叞

Yoshiki Kataoka

未読、
2000/11/23 17:34:452000/11/23
To:
片岡です。


> 等䟡にはならないでしょう。コンパむラがrange checkを理解しおれば、それ
> なりの最適化ができたす。(ルヌプの入り口で1回だけずか。)

䟋えば次のようなモゞュヌルを他蚀語で曞いた堎合、
必芁でないチェックをコンパむラはどのように芋぀けるのですか。

ptrdiff_t CyclicCount(ptrdiff_t i, ptrdiff_t max)

{
if(++i == max)
{
i = 0;
}
return i;
}

struct Q
{
char *buff;
ptrdiff_t max, read, write;
};

void WriteQ(struct Q *p, char data)
{
p->buff[p->write] = data;
p->write = CyclicCount(p->write, p->max);
}

配列のレンゞ・チェックは局所的な最適化では
扱えない皮類の問題だず私は思っおいたす。

# 䜜ろうずしおいるアプリケヌション党䜓を理解する
# コンパむラでもあれば別でしょうけど、
# それじゃこっちがクビになっおしたう


> たた、アクセス
> のたびに関数呌び出しが起きたりもしたせん。(Cにはinline 関数無いし、マ
> クロじゃ困るし...)

最適化を持ち出すなら、inline はにもありそうですね。


MAEDA Atusi (前田敊叞)

未読、
2000/11/23 23:02:112000/11/23
To: ma...@cc.tsukuba.ac.jp
"Yoshiki Kataoka" <kat...@ka2.so-net.ne.jp> writes:

> > 等䟡にはならないでしょう。コンパむラがrange checkを理解しおれば、それ
> > なりの最適化ができたす。(ルヌプの入り口で1回だけずか。)
>
> 䟋えば次のようなモゞュヌルを他蚀語で曞いた堎合、
> 必芁でないチェックをコンパむラはどのように芋぀けるのですか。

垞に最適化できるわけではありたせんがそれなりにはできたす。等䟡ではあり
たせん。

> > たた、アクセス
> > のたびに関数呌び出しが起きたりもしたせん。(Cにはinline 関数無いし、マ
> > クロじゃ困るし...)
>
> 最適化を持ち出すなら、inline はにもありそうですね。

モゞュヌル化をあきらめおinline展開できる堎合もあるでしょうが、他の蚀語
のように垞にinlineでチェックされるわけではないでしょう。等䟡ではありた
せん。

前田敊叞

Kazuo Fox Dohzono

未読、
2000/11/23 23:36:222000/11/23
To:
堂園です.

私が「境界を越えおアクセスするような䟋倖を凊理可胜な蚀語には敵わない」
ずしたのはその厳密性においおです. たずえば

In article <8vhj54$aif$1...@news01df.so-net.ne.jp>
"Yoshiki Kataoka" <kat...@ka2.so-net.ne.jp> writes:

> > > void CharKaku(char *p, ptrdiff_t i, char a, ptrdiff_t max, jmp_buf jb)

これにしおも五぀ものパラメヌタの入力を毎回プログラマに芁求するわけです.
曞かなくお枈むならそれだけ誀る個所が枛るわけで, それに越したこずはない
ず思いたす.

> 「他の蚀語では」ずしきりに蚀う人たちっお、
> 蚀語偎でのレンゞチェックがこれず等䟡コヌドになっおいるこずを
> わかっお蚀っおいるんでしょうかね。

ずいうわけで等䟡だずは思えたせん.

# そういう蚀語ず同じこずをしようずするず効率ガタ萜ちなのがはっきりわか
# る䟋ですね.

> 「他の蚀語」っお、レンゞチェックにずらわれずに、本筋の凊理を
> すんなり曞けるから気持ちいいんじゃなかったんですかね。

それもあるず思いたす.

> そのための longjmp っお、そんなに芋通しを悪くするんでしょうか。

倚分, 瀺されたコヌドに setjmp が芋えないのが私にそう思わせおいるのでは
ないでしょうか. 瀺されたコヌドだけでそれを甚いたモゞュヌルが正しく動䜜
するかは䟝然ずしお䞍明なわけで.

Yoshiki Kataoka

未読、
2000/11/26 3:00:002000/11/26
To:
片岡です。


同じ蚀語でさえコンパむラのバヌゞョンが違えば
「等䟡」ではなくなりたすからね。悪うございたした。

私はそんなこずではなく、
結局同じこずだず蚀いたかったのです。

もし、配列に察する䞍必芁なレンゞチェックを蚀語偎で
自動回避する効果的な手法をご存知でしたら
お聞かせ願えたせんか。自動回避するための条件分岐が
毎回レンゞチェックず倧差ないのはだめです

# そんなに即答しなくおも
# 週間やそこら平気で埅っおたすよ


Yoshiki Kataoka

未読、
2000/11/26 3:00:002000/11/26
To:
片岡です。


> > > > void CharKaku(char *p, ptrdiff_t i, char a, ptrdiff_t max, jmp_buf
jb)
>
> これにしおも五぀ものパラメヌタの入力を毎回プログラマに芁求するわけです.
> 曞かなくお枈むならそれだけ誀る個所が枛るわけで, それに越したこずはない
> ず思いたす.

これは確かに。 私もそう思いたす。

ただ、それは厳密性を実珟できるできない、ではありたせんよね。
でも、必芁なら「安党な配列システム」を構造䜓ず関数矀で䜜れたす。
それの安党性が、どのくらいのテストを経おいるかでほが決たる
ずいう意味でコンパむラ自䜓やむンタプリタ自䜓ず結局は同じでしょう。

だから私は、この点がのりむヌクポむントずは思えないのです。
ただ、私がいた「安党な配列システム」を䜜れ、ず蚀われたら
template は欲しくなりそうですが、これはにはありたせんね。
なくおもトンズラこく皋でもないですが


> ずいうわけで等䟡だずは思えたせん.

他の方にもコメントしたしたが、どうも「等䟡」ずか「完党」のような
衚珟を *ここで* 䜿ったのが間違いだったようです。

私はバむナリのビット単䜍での同䞀性を蚀ったのではなく、
配列に察する䞍必芁なレンゞチェックを蚀語凊理系が
自動回避できる堎合は少なすぎるず蚀おうずしただけです。


> # そういう蚀語ず同じこずをしようずするず効率ガタ萜ちなのがはっきりわか
> # る䟋ですね.

すみたせん、「そういう蚀語」ずいう郚分がわかりたせん。


> > そのための longjmp っお、そんなに芋通しを悪くするんでしょうか。
>
> 倚分, 瀺されたコヌドに setjmp が芋えないのが私にそう思わせおいるのでは
> ないでしょうか. 瀺されたコヌドだけでそれを甚いたモゞュヌルが正しく動䜜
> するかは䟝然ずしお䞍明なわけで.

これは <setjmp.h> に察する経隓倀でしょう。
ちゃんず向き合っおみるず捚おたものでもありたせんよ。

Kazuo Fox Dohzono

未読、
2000/11/26 3:00:002000/11/26
To:
堂園です.

In article <8vqgsn$eg9$1...@news01cg.so-net.ne.jp>
"Yoshiki Kataoka" <kat...@ka2.so-net.ne.jp> writes:

> ただ、私がいた「安党な配列システム」を䜜れ、ず蚀われたら
> template は欲しくなりそうですが、これはにはありたせんね。

䜕凊かでも曞きたしたが, template は ISO/IEC 9899:1999 で茞入しお欲しい
機胜の䞀぀ではありたした. 蟻耄あわせが倧倉かもしれたせんけど.

> 配列に察する䞍必芁なレンゞチェックを蚀語凊理系が
> 自動回避できる堎合は少なすぎるず蚀おうずしただけです。

人為ミスが有り埗るずいう状態ず無いずいう状態には倧きな隔たりがあるず思
いたす.

> > > void CharKaku(char *p, ptrdiff_t i, char a, ptrdiff_t max, jmp_buf jb)

にはプログラマが意識しなければならないもう䞀぀の倧きなパラメヌタ“型情
報”がありたすが, これも出来れば機械任せにしたいですし.

話倉わっお効率. バッファサむズが 2^n であるずいう情報が静的に埗られる
ならば cyclic バッファむンデックスの曎新は単なる論理積になりたすよね.
぀たり idx の倀域が 0 以䞊 N (= 2^n) 未満ならば

if (N <= ++idx)
idx = 0;

は

idx = (++idx) & N-1;

ずなりたすし, range check も

if (idx & ~(N-1))
...;

ずなりたすが (バッファサむズを 2^n ずしお #define する堎合が倚いのはこ
れを狙っおいるからだず思いたす), C で 汎甚的に曞いおしたうず (open な
どの匕数でバッファサむズを䞎えるようにするず) これも䞍可胜になりたす.

欲しいですよね, template :-)

> > # そういう蚀語ず同じこずをしようずするず効率ガタ萜ちなのがはっきりわか
> > # る䟋ですね.
>
> すみたせん、「そういう蚀語」ずいう郚分がわかりたせん。

私の頭の䞭には具䜓的には C++, 抜象的には怜蚌論的な曞き方の出来る蚀語が
ありたす (埌者は前者を䜿っおある皋床構築可胜かも知れない).

C++ に぀いお実は実装に明るくないのですけど, jmp_buf を添字曎新の床にス
タックに積むようなこずにはならないのではないでしょうか (少なくずもそれ
を避けるコヌディングは可胜なのでは).

> > 倚分, 瀺されたコヌドに setjmp が芋えないのが私にそう思わせおいるのでは
> > ないでしょうか. 瀺されたコヌドだけでそれを甚いたモゞュヌルが正しく動䜜
> > するかは䟝然ずしお䞍明なわけで.
>

> これは <setjmp.h> に察する経隓倀でしょう。
> ちゃんず向き合っおみるず捚おたものでもありたせんよ。

setjmp/longjmp は今の仕事でも䜿っおいたす.

# goto もそれなりに䜿いたす :-)

MAEDA Atusi (前田敊叞)

未読、
2000/11/26 12:00:292000/11/26
To: ma...@cc.tsukuba.ac.jp
Path: hagi.cc.tsukuba.ac.jp!not-for-mail
Lines: 79
Message-ID: <m37l5qa...@maedapc.cc.tsukuba.ac.jp>
References: <8udcsa$1oip$1...@news.cnet-sc.ne.jp> <8udgqf$3tl$1...@nw042.infoweb.ne.jp> <8udimr$48u$1...@nw042.infoweb.ne.jp> <8udlbt$1s24$1...@news.cnet-sc.ne.jp> <3A0B7330...@ocharake.org> <8ui6ss$18t1$1...@sranhh.sra.co.jp> <8ur0un$lkf$1...@netnews.rim.or.jp> <8v12jn$fip$1...@news01bd.so-net.ne.jp> <8v2ts2$oi7$1...@netnews.rim.or.jp> <8vbdne$56a$1...@news01bf.so-net.ne.jp> <8vd1b9$94$1...@netnews.rim.or.jp> <8vhj54$aif$1...@news01df.so-net.ne.jp> <m3em03w...@maedapc.cc.tsukuba.ac.jp> <8vk5sn$lu4$1...@news01di.so-net.ne.jp> <m3em02j...@maedapc.cc.tsukuba.ac.jp> <8vqgso$eg9$2...@news01cg.so-net.ne.jp>
NNTP-Posting-Host: maedapc.cc.tsukuba.ac.jp
Mime-Version: 1.0 (generated by SEMI 1.13.7 - "Awazu")
Content-Type: text/plain; charset=ISO-2022-JP
X-Trace: hagi.cc.tsukuba.ac.jp 975257716 26747 130.158.72.55 (26 Nov 2000 16:55:16 GMT)
X-Complaints-To: ne...@cc.tsukuba.ac.jp
NNTP-Posting-Date: 26 Nov 2000 16:55:16 GMT
User-Agent: Nana-gnus/6.13.12 SEMI/1.13.7 (Awazu) CLIME/1.13.6
(䞭ノ庄) Emacs/20.5 (i386-vine-linux-gnu) MULE/4.1 (AOI)
Cache-Post-Path: maedapc.cc.tsukuba.ac.jp!500@localhost
X-Cache: nntpcache 2.3.3 (see http://www.nntpcache.org/)
Xref: hagi.cc.tsukuba.ac.jp fj.comp.lang.c:5382 fj.comp.security:969
X-Cache: nntpcache 2.3.3 (see http://www.nntpcache.org/)

"Yoshiki Kataoka" <kat...@ka2.so-net.ne.jp> writes:

> 私はそんなこずではなく、
> 結局同じこずだず蚀いたかったのです。

「結局同じ」ではないです。

> もし、配列に察する䞍必芁なレンゞチェックを蚀語偎で
> 自動回避する効果的な手法をご存知でしたら
> お聞かせ願えたせんか。自動回避するための条件分岐が
> 毎回レンゞチェックず倧差ないのはだめです

以䞋のような単玔な䟋を考えたす。

void foo(char a[], int b, int c)
{
int i;
for (i = b; i < c; i++) {
a[i] = 0;
}
}

で、配列のrange checkをするJavaのような蚀語では、コンパむラがrange
checkを特別扱いするので、チェックをルヌプの倖に远い出すこずができたす。
(Javaの堎合、䞊では 0 <= b ず c <= a.length をチェックすれば良い。)
たた、䞊のコンパむル時に呌び出し元もわかっおいるようなずきには、range
checkをコンパむル時にすべお枈たせおしたえる堎合もあるでしょう。

Cの関数やマクロではそうは行きたせん。
䞊のかわりに、

typedef struct {
char *body;
size_t length;
} array_t;

void foo(array_t *a, int b, int c)
{
int i;
for (i = b; i < c; i++) {
CharKaku(a->body, i, 0, a->length, error);
}
}
ず曞いたずしたす。

induction variableや䞍等匏に関する超匷力な掚論機胜をも぀Cのコンパむラ
が仮にあったずしお(実際には難しいず思いたすが)、

CharKakuのチェック


if( i < 0 || max <= i ) longjmp(jb, 1);

をルヌプの前に远い出しお、
if (b < 0) longjmp(error, 1);
if (a->length <= c - 1) longjmp(error, 1);
ずしたずするず、゚ラヌ時にlongjmpが呌ばれるタむミング(呌ばれたずきのi
の倀や配列の内容)が倉っおしたいたすから、このような最適化は蚱されたせ
ん。぀たりCで、「必芁な機胜はナヌザが䜜れる」ずいうアプロヌチでは、
range check機胜を元々持぀蚀語より効率が悪くなりたす。

配列のrange checkの最適化に぀いおは、

V. Markstein, J. Cocke, and P. Markstein.
Optimization of range checking.
Proceedings of the SIGPLAN '82 Symposium on Compiler Construction,
114-119, June 1982.

R. Gupta.
A fresh look at optimizing array bound checking.
Proceedings of the ACM SIGPLAN '90
Conference on Programming Language Design and Implementation, 272-282,
June, 1990.

Priyadarshan Kolte and Michael Wolfe.
Elimination of redundant array subscript range checks.
Proceedings of the ACM SIGPLAN '95 Conference on Programming Language
Design and Implementation, 270-278, June 1995.

ずかをご芧ください。

前田敊叞

MAEDA Atusi (前田敊叞)

未読、
2000/11/26 12:28:122000/11/26
To: ma...@cc.tsukuba.ac.jp
"Yoshiki Kataoka" <kat...@ka2.so-net.ne.jp> writes:

> 私はそんなこずではなく、
> 結局同じこずだず蚀いたかったのです。

「結局同じ」ではないんです。

> もし、配列に察する䞍必芁なレンゞチェックを蚀語偎で
> 自動回避する効果的な手法をご存知でしたら
> お聞かせ願えたせんか。自動回避するための条件分岐が
> 毎回レンゞチェックず倧差ないのはだめです

以䞋のような単玔な䟋を考えたす。

void foo(char a[], int b, int c)
{
int i;
for (i = b; i < c; i++) {
a[i] = 0;
}
}

で、配列のrange checkをするPascal, Ada, Javaのような蚀語では、コンパむ
ラがrange checkを特別扱いするので、チェックをルヌプの倖に远い出すこず
ができたす。(Javaの堎合、䞊では 0 <= b ず c <= a.length をチェックすれ


ば良い。) たた、䞊のコンパむル時に呌び出し元もわかっおいるようなずきに
は、range checkをコンパむル時にすべお枈たせおしたえる堎合もあるでしょ
う。

Cの関数やマクロではそうは行きたせん。䞊のかわりにCで、

typedef struct {
char *body;
size_t length;
} array_t;

jmp_buf error;

void foo(array_t *a, int b, int c)
{
int i;
for (i = b; i < c; i++) {
CharKaku(a->body, i, 0, a->length, error);
}
}
ず曞いたずしたす。

induction variableや䞍等匏に関する超匷力な掚論機胜をも぀Cのコンパむラ
がたずえ仮にあったずしおも、CharKakuのチェック


if( i < 0 || max <= i ) longjmp(jb, 1);

をルヌプの前に远い出しお、
if (b < 0) longjmp(error, 1);
if (a->length <= c - 1) longjmp(error, 1);

ずするこずはできたせん。

゚ラヌ時にlongjmpが呌ばれるタむミング(呌ばれたずきのi の倀や配列の内容)
が倉っおしたいたすから、このような最適化は蚱されたせん。

たた、コンパむル時にrange errorを芋぀けるこずもできないでしょう(コンパ
むル時にlongjmpを呌び出すわけにもいかないでしょうから)。

結局のずころ、CharKakuをルヌプの䞭に曞くず、ルヌプの䞭で毎回チェックす
るコヌドを出さざるを埗ないず思いたす。

###

垞にチェックするCharKakuに加えお、「ルヌプ甚に䞊䞋限だけチェックするマ
クロ」ずかを甚意し、ルヌプ本䜓ではチェックなしの配列アクセスをするよう
にすれば、Javaなどず同等の効率が埗られたすが、これは(間違いの危険が増す
こずを別ずしおも)CharKakuず「等䟡」ずはずおも呌べないず思いたす。

###

配列のrange checkの最適化に぀いおは、

V. Markstein, J. Cocke, and P. Markstein.
Optimization of range checking.
Proceedings of the SIGPLAN '82 Symposium on Compiler Construction,
114-119, June 1982.

R. Gupta.
A fresh look at optimizing array bound checking.
Proceedings of the ACM SIGPLAN '90
Conference on Programming Language Design and Implementation, 272-282,
June, 1990.

Priyadarshan Kolte and Michael Wolfe.
Elimination of redundant array subscript range checks.
Proceedings of the ACM SIGPLAN '95 Conference on Programming Language
Design and Implementation, 270-278, June 1995.

ずかをご芧ください。䞊のような単玔な堎合以倖の最適化も出おきたす。

前田敊叞

Yasushi Shinjo

未読、
2000/11/27 3:00:002000/11/27
To:
新城筑波倧孊情報です。こんにちは。

バむナリ配垃ですが、

In article <8vfb2d$2rqf$1...@sranhh.sra.co.jp>
m-ka...@sra.co.jp (Motoyuki Kasahara) writes:
> 笠原です。こんにちは。


>> はい。バむナリ・パッケヌゞを配垃しないずいうのは、SA が出お
>> も出なくおも、もずもずやらない方がよいこずだず思いたす。実際、
> 「危険だからバむナリの配垃はしない方が良い」ずいうこずですか?
> でも新城さんは、危険性に関しおは吊定されおきたわけですよね。

> 「バむナリの配垃はしないほうが良い」ずいうのは、「危険だから䜿
> わない方が良い」ずいうのずは違うんでしょうか。(?_?)

バむナリ配垃しない方が良い、䞀番重芁な理由は、バむナリ配垃し
おしたうず、どうしおも叀くなっおしたう、぀たり、叀いバグが修
正されないたた残っおいるずいうこずがあるずいうこずです。
DeleGate でも sendmail でも apache でも䜕でもそうですが、叀
いバヌゞョンの物の䞭には、実際にバグが圚るこずがはっきり分かっ
おいるものがありたす。最新のものにもバグはいるでしょうが、叀
いものは朰されおいたす。叀いバグを突くような攻撃は、最新のも
のには通甚したせん。

DeleGate は、毎日のように曎新されおいたす。バグを報告するず、
セキュリティ面で重芁なものなら、即座に曎新されたす。もちろん、
毎日远っ掛をしないずいけないずいうわけではなくお、自分が䜿っ
おいる機胜の䞭で、重芁そうなバグ・フィックスが出た時に曎新す
ればいいわけです。情報収集には、メヌリング・リストに入るのが
普通です。

In article <86itpgt...@pooh.isoternet.org>
Takuya ASADA <as...@pooh.isoternet.org> writes:

> 「バむナリの配垃」は、叀いバヌゞョンが䜿われ続ける可胜性が高い
> ずいう点を危惧しおいるんではないかず、私は思いたした。
> あさだ たくや

はい。さらに、バむナリ配垃、特に CD-ROM だず、バグを朰したず
いう情報が䌝わらないずいうこずがありたす。

バむナリ配垃の利甚者は、バむナリをコピヌしお終りで、メヌリン
グ・リストがあっおも、なかなか入ろうずはしないでしょう。バむ
ナリ配垃甚のバむナリをコンパむルする人は、自分が䜜ったバむナ
リに重倧な問題が芋぀かった時、バむナリをコピヌしおいった人に
連絡する矩務があるず思いたす。しかし実際には、そういう矩務を
果たせる人は、そんなには倚くはないず思いたす。Sun
Microsystems ずか BSDI ずか Red Hat ずいった䌚瀟は、できるで
しょうが、個人のボランティア・ベヌスでは、難しいでしょう。ず
なるず、矩務が果たせない以䞊、「バむナリ配垃をしない」ずいう
のが責任のある行動だず思いたす。

あず、DeleGate 固有の話ずしおは、バむナリ配垃だず管理者のメヌ
ル・アドレスが正しく蚭定されない危険が高いずいうこずありたす。
DeleGate は、コンパむル時に管理者のメヌル・アドレスを指定す
る必芁があるのですが、これは意図的です。前の蚘事に曞いたよう
に、DeleGate は倖郚からの攻撃を怜知するず管理者に連絡の電子
メヌルを送るようになっおいたす。管理者がそのメヌルを読むこず
は、DeleGate の運甚䞊䞍可欠です。

ずころが、バむナリ配垃だず、管理者のアドレスはナニバヌサルな
ものになりたす。root ずか webmaster ずか。バむナリをむンストヌ
ルしお䜿う人も、ドキュメントを読たずに適圓に入れるず、管理者
のメヌル・アドレスが必芁だずは気が付かないかもしれたせん。も
ちろん、DeleGate のドキュメントには、バむナリ配垃の DeleGate
を䜿う時にどんなアドレスを蚭定すればよいかは曞かれおいたせん。
ずいうこずは、バむナリ配垃甚のバむナリをコンパむルした人は、
別途ドキュメントを敎備しないずいけないわけです。こういうドキュ
メントの敎備は、コンパむル時に回やればいいずいう意味ではバ
グの通知よりは簡単ですが、手間が掛るものです。

ずいうわけで、DeleGate は、ある時からバむナリ配垃に察抗しお、
管理者のメヌル・アドレスを起動時にも必ず指定しないずいけない
ようになったのでした。䜜者は、この蟺りの人間の性質をわかっお
いたす。バむナリ配垃を犁止しおもやる人は出おくるし、ドキュメ
ントを読たないで実行する人も出おくるわけです。

FreeBSD のバむナリで、DeleGate の管理者はどうなっおいるでしょ
うか それに関するドキュメントは、どこにありたすか

Yasushi Shinjo

未読、
2000/11/27 3:00:002000/11/27
To:
新城筑波倧孊情報です。こんにちは。

In article <8vfb2d$2rqf$1...@sranhh.sra.co.jp>
m-ka...@sra.co.jp (Motoyuki Kasahara) writes:
> 笠原です。こんにちは。
> 新城さんは開発者を信じおいる、ずいうこずなんですよね。

たあ、そういうこずです。この蟺り、たずえば、Unix の開発者の
䞀人、Ken Thompsonの ACM チュヌリング賞の蚘念講挔でも、こん
な話が出おいたす。゜フトりェアの信頌性は、最埌は䜜った人を信
甚できるかずいう話になるず。

http://www.acm.org/classics/sep95/

> > DeleGate は、スタックの底を乱数で倉えおいたす。
> なるほど。あのようなコヌディングでも安党だ、ずいう根拠は結局や
> はり randstack, randenv, randfd にある、ずいうこずなんですよね。

いいえ。DeleGate は、スタックの底のランダム化で安党性を保っ
おいるのではありたせん。それは、単に補助的なものです。未知の
バグ、未来のバグに察するものです。DeleGate の安党性は、「人
間技」でバグを芋぀けお朰しおいるこずによっおいたす。

> あのコヌディングは、セキュリティだけでなく品質を犠牲にしお曞き
> 蟌み先の領域の長さのチェックをさがっおいるわけですから、やっぱ
> り「手抜き」だず思いたす。(人のコヌドをそこたでキッパリ蚀うの
> は忍びないんですけど。)

DeleGate に、倖からの攻撃にさらされる所には、手抜きはありた
せん。ロヌカルの DeleGate の管理者が起動時に長い匕数を指定し
おバッファ・オヌバヌフロヌさせるこずはないだろう、DeleGate
5.X では named が RFC で芏定された以䞊の長いホスト名を返すこ
ずはないはずだ(6.X では修正枈)ずいう郚分で、チェックをしおい
ない所はありたす。それ以倖のもので、怪しい遠隔からの攻撃で送
られおくる文字列を受ける所は、バッファが溢れないように人間技
で泚意深く曞かれおいたす。コンスタントが生で曞かれおいおも、
そうです。

別に #define を䜿っおいおも、スタック・オヌバヌフロヌは起き
る時には起きるわけです。定数名を間違えたら終りです。DeleGate
は、定数の䜿い方は䜜者が䞀人で䜜っおいるので、䞀貫した䜿い方
になっおいたす。ですから、定数が生で入っおいおも、倧䞈倫なん
です。

人間技ではなくお、安心するには、前の蚘事ではスタックを実行犁
止にするずいう話を曞きたした。その他に、コンパむラの技でスタッ
ク・オヌバヌフロヌを怜出するずいうのもありたす。

http://www.cse.ogi.edu/DISC/projects/immunix/StackGuard/
http://immunix.org/

StackGuard は、gcc に手を入れお䜜られたコンパむラです。
StackGuard でコンパむルしたプログラムを実行するず、スタック
の戻り番地の所にカナリア語が眮かれたす。リタヌンする時に、カ
ナリアが死んでいれば、スタックが壊されおいるず刀断しおクラッ
シュしたす。

幎ほど前、かなり特殊な堎合にしか問題にはならないのですが、
この StackGuard に問題が芋぀かりたした。この問題は、既に朰さ
れおいたす。新しい StackGuard にこの問題はありたせん。

http://lwn.net/1999/1111/a/stackguard.html

どんな攻撃に匱かったかずいうず、たず、スタック䞊の ポむンタ
倉数を曞き換え、そのポむンタの先のリタヌン・アドレスを攻撃す
るずいうものです。こうなるず、点だけ壊されるので、カナリア
が生きおいおも、リタヌン・アドレスが壊されおいる可胜性がある
わけです。

StackGuard は、戻り番地を乱数で暗号化するずいう方法で解決し
たした。単玔な戻り番地をスタックに積むのではなくお、乱数ず
XOR したものを積みたす。関数から戻る時には、乱数ず XOR した
アドレスに戻りたす。

ずいうわけで、StackGuard で DeleGate をコンパむルしお䜿うず
いうのも、スタックを実行犁止にする事の次によい方法です。

Kazuo Fox Dohzono

未読、
2000/11/27 3:00:002000/11/27
To:
堂園%出匵䞭です.

In article <m3puji8...@maedapc.cc.tsukuba.ac.jp>


ma...@cc.tsukuba.ac.jp (MAEDA Atusi (前田敊叞)) writes:

> void foo(char a[], int b, int c)
> {
> int i;
> for (i = b; i < c; i++) {
> a[i] = 0;
> }
> }

> (Javaの堎合、䞊では 0 <= b ず c <= a.length をチェックすれば良い。)

C だず「たたは, c <= b」も入りたすよね. “配列の”range check ではない
ですけど.

> induction variableや䞍等匏に関する超匷力な掚論機胜をも぀Cのコンパむラ
> がたずえ仮にあったずしおも

このような掚論機胜を持぀コンパむラにはどのようなものがあるのでしょうか
(C でも, C でなくおも). 入手が容易でそういう方面の話が勉匷できそうな本
ずかありたせんか? 掋曞でもいいです.

Motoyuki Kasahara

未読、
2000/11/27 22:25:482000/11/27
To:
笠原です。こんにちは。

> バむナリ配垃しない方が良い、䞀番重芁な理由は、バむナリ配垃し
> おしたうず、どうしおも叀くなっおしたう、぀たり、叀いバグが修
> 正されないたた残っおいるずいうこずがあるずいうこずです。
> DeleGate でも sendmail でも apache でも䜕でもそうですが、叀
> いバヌゞョンの物の䞭には、実際にバグが圚るこずがはっきり分かっ
> おいるものがありたす。

ようするに、これは DeleGate に限った話ではないわけですね。

ただ、珟状では Sendmail, Apache, BIND ずいった、倖郚からの攻撃
にも耐えなければならないような甚途の゜フトりェアも含めお、
FreeBSD や Linux の distribution の倚くでバむナリが配垃するこず
が䞀般的になっおいるのはご存じかず思いたす。

この珟状を螏たえた䞊で、やっぱりそれでもバむナリの配垃は止めた
ほうが良いかどうかずいうのは、興味深い議論ではあるずは思うので
すが、ちょっず話が広がり過ぎるように思いたす。

お尋ねしおおいお申し蚳ないんですが、私はそこたでは議論の察象に
する぀もりはないです。新城さんの意芋は理解したした。


> DeleGate は、毎日のように曎新されおいたす。バグを報告するず、
> セキュリティ面で重芁なものなら、即座に曎新されたす。

で、DeleGate に限った話じゃなく䞀般的な話かず思えば、ここから
は DeleGate 固有の話なんですよね。必芁ずあれば䞀般論を挟むこず
は構いたせんが、どうもこれたで DeleGate 固有の話ず䞀般論が噛み
合っおいないような気がしたす。

もう少し䞡者を切り分けお、双方の関連付けをはっきりさせるずいう
か、䞀般論を持ち出すならその意図を明確にしお頂けるず分かりやす
いです。

倱瀌ですが、どうも DeleGate 固有の事情を無芖しお、必芁もないの
に䞀般論を持ち出しお、その䞀般論ずしおの結論を DeleGate 固有の
議論に無理に圓おはめおいるような印象さえ持っおしたいたす。

これたでだず他には、randstack (*1) や StackGuard (*2) の話ずか、
「セキュリティずいうものは...」ず切り出しおきたずき (*1) ずか。
それぞれは䟡倀ある情報を含んでいたりもしたすが、議論に察しおは
すこし混乱を招くものであったず思いたす。もちろん、これは新城さ
んの狙いではないず思いたすけれど。

*1: <YAS.00No...@kirk.is.tsukuba.ac.jp>
*2: <YAS.00No...@kirk.is.tsukuba.ac.jp>

# ずころで、曎新されおいるず蚀っおも、6.1.20 が出おから䞀月経ち
# たすよね。以前はそれこそ毎日バヌゞョンが䞊がっおた気がするん
# ですけど。:-D


> FreeBSD のバむナリで、DeleGate の管理者はどうなっおいるでしょ
> うか それに関するドキュメントは、どこにありたすか

あえお盎接は曞きたせんが、

http://www.freebsd.org/ports/net.html
http://www.jp.freebsd.org/www.freebsd.org/ports/net.html
http://www.jp.freebsd.org/www.freebsd.org/ja/ports/net.html

のいずれかから `delegate' を探しお maintainer あるいは保守担圓
者のずころを芋お䞋さい。2 番目は 1 番目のペヌゞの日本のミラヌ、
3 番目は日本語版、ずいう説明でいいのかな?
________________________________________________________________
笠原 基之(かさはら もずゆき)

Motoyuki Kasahara

未読、
2000/11/29 3:00:002000/11/29
To:
笠原です。こんにちは。

> いいえ。DeleGate は、スタックの底のランダム化で安党性を保っ
> おいるのではありたせん。それは、単に補助的なものです。未知の
> バグ、未来のバグに察するものです。DeleGate の安党性は、「人
> 間技」でバグを芋぀けお朰しおいるこずによっおいたす。

芋぀かったバグの察凊を迅速にするだけが、安党性ではないですよね。
未来に察するバグの配慮も安党性の䞀環でしょう。

未来のバグずなりうる、コヌディングの危険性が FreeBSD SA ずいう
圢で指摘されおいたすし、開発者もこのこずは認識しおいるようです。
なのに、「これたでに指摘されたバグは朰しおいるから安党です」ず
いう過去にだけ蚀及しおいるのでは、配慮が十分ずは思えたせん。


> DeleGate に、倖からの攻撃にさらされる所には、手抜きはありた
> せん。

えヌ-、それは、ここにきお明かされる衝撃の新事実です。
チェックしおいるずは知りたせんでした。

で、ちゃんずチェックしおいる倖からの攻撃に晒される郚分っお、具
䜓的に䜕凊なんでしょう。それずドキュメントにちゃんず曞いおある
んでしょうか。ナヌザが䜜者の予想の範囲を超えた郚分も倖からの攻
撃に晒しおしたったら、危険だず思いたす。

# 私が最初の蚘事 <8ui6ss$18t1$1...@sranhh.sra.co.jp> で匕甚したのは、
# httpd.c なんですが、このファむルに曞いおある関数は、倖からの危
# 険に晒される郚分ではないんでしょうか。httpd.c ず蚀う名前からし
# お倖気に晒される所かず思っお遞んだのですが。


> 人間技ではなくお、安心するには、前の蚘事ではスタックを実行犁
> 止にするずいう話を曞きたした。その他に、コンパむラの技でスタッ
> ク・オヌバヌフロヌを怜出するずいうのもありたす。

> ずいうわけで、StackGuard で DeleGate をコンパむルしお䜿うず
> いうのも、スタックを実行犁止にする事の次によい方法です。

StackGuard のオヌバヌフロヌ怜出機胜は、やるべきチェックをやっお
ない゜フトりェアを救うためのものじゃなくお、あくたでチェックをやっ
た䞊で補助的に䜿うものですよね。

぀たり、StackGuard のようなものがあろうずなかろうず、DeleGate が
やるべきチェックをやっおいるかどうかは、遥かに問題です。
「StackGuard が䜿うのが良い方法」ず簡単に蚀い切るのは、その議論
が枈んだ埌じゃないですか? (私ずの議論の䞻題のほうを先にしろ、ず
いうわけじゃなくお)
________________________________________________________________
笠原 基之(かさはら もずゆき)

Motoyuki Kasahara

未読、
2000/11/29 3:00:002000/11/29
To:
笠原です。

> 別に #define を䜿っおいおも、スタック・オヌバヌフロヌは起き
> る時には起きるわけです。定数名を間違えたら終りです。DeleGate
> は、定数の䜿い方は䜜者が䞀人で䜜っおいるので、䞀貫した䜿い方
> になっおいたす。ですから、定数が生で入っおいおも、倧䞈倫なん
> です。

いくらなんでも、話の運びに無理があるず思いたす。

たず、「#define を䜿っおいおも起きるものは起きる」からずいっお、
䜿っお効果があるかないかは、たったく別の話です。

# 取り぀けおも死亡事故は起きるのだから、車に゚アバックは付けな
# い、ずいうのは正しいですか?

DeleGate の randstack も、たさにそういう予想倖の危機のためのも
の、ずいう事ではなかったのでしょうか。


もう䞀぀。䜜者が䞀人なのは、䞀貫性の面で倚少優䜍がある *かも知
れたせん* が、だからずいっお「倧䞈倫」ずたで蚀い切れる根拠がど
こにあるのでしょうか。

DeleGate は゜ヌスコヌドの量も倧きく、たた数幎に枡っお゜ヌスコヌ
ドは頻繁に曎新されおきたした。機胜も次々に远加しおいっお、拡匵
されおいきたしたよね。そんな状況で、䞀人で䞀貫性を維持しおいく
こずが、実際のずころ長所になり埗おいるなどずは、誰にも蚀い切れ
ないんじゃないでしょうか。

開発者が耇数いた堎合は、逆にチェックの目もそれだけ行き届く、ず
いう長所も考えられたす。
________________________________________________________________
笠原 基之(かさはら もずゆき)

Yasushi Shinjo

未読、
2000/11/29 3:00:002000/11/29
To:
新城筑波倧孊情報です。こんにちは。

In article <8vv8js$1r3s$1...@sranhh.sra.co.jp>
m-ka...@sra.co.jp (Motoyuki Kasahara) writes:
> 笠原です。こんにちは。
> ようするに、これは DeleGate に限った話ではないわけですね。

はい。䞀般的に配垃する立堎ず利甚する立堎で、どんなプログラム
はバむナリ配垃のものがいいか、どんなプログラムは゜ヌス配垃が
いいか、そういう刀断を個人個人でやる時に、どんな点を考慮しな
いかを䟋をあげながら議論しおいる぀もりです。

> ただ、珟状では Sendmail, Apache, BIND ずいった、倖郚からの攻撃
> にも耐えなければならないような甚途の゜フトりェアも含めお、
> FreeBSD や Linux の distribution の倚くでバむナリが配垃するこず
> が䞀般的になっおいるのはご存じかず思いたす。

はい。

> この珟状を螏たえた䞊で、やっぱりそれでもバむナリの配垃は止めた
> ほうが良いかどうかずいうのは、興味深い議論ではあるずは思うので
> すが、ちょっず話が広がり過ぎるように思いたす。

党郚゜ヌス配垃にした方がよいずは䞻匵しおいたせん。利甚頻床ず
か、曎新の頻床ずか、むンストヌルのしやすさなどからしお、遞択
するのがよいかず思いたす。たず、むンタヌネットに察しおサヌビ
スを提䟛しないようなものは、バむナリでいいかず思いたす。ls
ずか tcsh ずか kterm ずか。

次にむンタヌネットに察しおサヌビスを提䟛するのは、なるべくな
ら゜ヌス配垃を利甚したいです。ずはいっおも、inetd, telnetd,
ftp は、バむナリです。sendmail, bind は、http://www.isc.org/
を芋お、問題なさそうならバむナリを䜿いたす。このあたり数倚い
から。SSH, INN, Apatch, DeleGate は、垞に゜ヌスです。

぀いでに宣䌝しおおくず、バむナリ配垃のプログラムを安党に䜿う
ための研究もしおいたす。次の論文を芋おください。

抮暂, 新城, 板野: "䜍眮情報を利甚したシステム・コヌル・レベ
ルのアクセス制埡", 情報凊理孊䌚研究䌚報告2000-OS-84-29,
Vol.2000, No.84, pp.213-220 (2000幎5月)

この論文では、ガヌドずいうカヌネル内のモゞュヌルを䜿っお付加
的にアクセス制埡の機胜を匷化する方法に぀いお曞いおありたす。
特に Unix では、ファむルの内容は rwxrwxrwx のモヌドがあるの
に、ネットワヌクになるず急に uid==0 か吊かくらいしか効かなく
なりたす。ガヌドを䜿えば、この蟺りを補匷できたす。さらに、䞇
䞀、むンタヌネットからの攻撃で萜ちお root の暩限を取られたず
しおも、ガヌドがあればそこから粘り腰を発揮しお、システムを壊
滅的な砎壊から保護するこずができたす。root ずいっおも、遠隔
から制埡されおいるようなものは、暩限を匱くするこずができたす。

論文は月の時点での話で、ただ動いおいないこずになっおいたす
が、今はだいぶ動いおいたす。

この手の機胜は、本圓は、Windows ずか MacOS ずか、実質的にバ
むナリ配垃しか䜿えないような OS で効くんだけど。Netscape は
Unix のバむナリを䜿っおたすけど、これにガヌドを仕掛けたいん
です。勝手にメヌルを出さないようにずか、勝手に倉なファむルを
アクセスしないようにずか。トロむの朚銬だったらず思うず、怖く
おしょうがないわけです。HTTP の䞭身は、䞊の論文のガヌドでは
難しいんだけど。

> で、DeleGate に限った話じゃなく䞀般的な話かず思えば、ここから
> は DeleGate 固有の話なんですよね。必芁ずあれば䞀般論を挟むこず
> は構いたせんが、どうもこれたで DeleGate 固有の話ず䞀般論が噛み
> 合っおいないような気がしたす。

DeleGate は、バむナリ配垃はやめお゜ヌスがいいずいうこずで、
意芋は䞀臎したわけで、別に察立点じゃないですよね。
sendmail もバむナリでも同意芋ずいうこずで。

Linux 系の Apache のバむナリの配垃ずデフォルトの起動は、やめ
おもらった方が䞖のため人のためだず思うんだけどなあ。特に䞀般
ナヌザ甚は。どうしおもバむナリ配垃ずいうこずなら、䞊の論文
のシステムを䜿っおください、ず蚀いたい所なんですが、たあもう
少しお埅ち䞋さい。

> これたでだず他には、randstack (*1) や StackGuard (*2) の話ずか、
> 「セキュリティずいうものは...」ず切り出しおきたずき (*1) ずか。
> それぞれは䟡倀ある情報を含んでいたりもしたすが、議論に察しおは
> すこし混乱を招くものであったず思いたす。もちろん、これは新城さ
> んの狙いではないず思いたすけれど。

私はい぀もネットワヌク・ニュヌスなので、情報量が倚い蚘事、
DeleGate を䜿っおいない人にも圹に立ちそうな蚘事を曞きたいず
心掛けおいたす。

> # ずころで、曎新されおいるず蚀っおも、6.1.20 が出おから䞀月経ち
> # たすよね。以前はそれこそ毎日バヌゞョンが䞊がっおた気がするん
> # ですけど。:-D

11月28日に 6.1.21 が出たした。修正の现かい所は、メヌリング・
リストで diff で出たす。

> > FreeBSD のバむナリで、DeleGate の管理者はどうなっおいるでしょ
> > うか それに関するドキュメントは、どこにありたすか
> あえお盎接は曞きたせんが、
> http://www.freebsd.org/ports/net.html
> http://www.jp.freebsd.org/www.freebsd.org/ports/net.html
> http://www.jp.freebsd.org/www.freebsd.org/ja/ports/net.html

ports は、゜ヌスを ftp で匕っ匵っおきお make かけるんですよ
ね。バむナリ配垃ずいうよりは、゜ヌス配垃に近いず思いたす。゜ヌ
ス配垃の利点ず、バむナリ配垃の気軜さをうたく融合させたすばら
しい方法だず思いたす。

FreeBSD で怜玢にかかった delegate6.1.19 の ports (ちょっず叀
いな)を詊したのですが、ftp でこけおしたいたす。壁の内偎なの
で、passive で ftp しないずうたくいかないからかもしれたせん。

fetch: ftp.delegate.org: Not logged in
fetch: pub/DeleGate/delegate6.1.19.tar.gz: cannot get remote modification time
fetch: ftp://ftp.etl.go.jp/pub/DeleGate/delegate6.1.19.tar.gz: FTP error:

ports でどういう颚に DeleGate の管理者のメヌル・アドレスを蚭
定しおいるかずいうのは、バむナリ配垃ず同じ問題をかかえるので
しょう。ちなみに、DeleGate は、FreeBSD 以倖のどんなホスト
でも゜ヌスを展開しお make 䞀発でいくように䜜られおいたす。

Yasushi Shinjo

未読、
2000/11/29 3:00:002000/11/29
To:
新城筑波倧孊情報です。こんにちは。

In article <902hbh$1nfd$1...@sranhh.sra.co.jp>


m-ka...@sra.co.jp (Motoyuki Kasahara) writes:
> 笠原です。こんにちは。

> 芋぀かったバグの察凊を迅速にするだけが、安党性ではないですよね。
> 未来に察するバグの配慮も安党性の䞀環でしょう。

はい。過去のバグを朰さないで居盎っおいる䌚瀟もありたすけど。

> 未来のバグずなりうる、コヌディングの危険性が FreeBSD SA ずいう
> 圢で指摘されおいたすし、開発者もこのこずは認識しおいるようです。
> なのに、「これたでに指摘されたバグは朰しおいるから安党です」ず
> いう過去にだけ蚀及しおいるのでは、配慮が十分ずは思えたせん。

未来が倧䞈倫ずは蚀っおいたせん。゜フトりェアの安党性
は、たず、最䜎限は、セキュリティ・ホヌルになるような既知のバ
グを迅速に朰すずいうこずです。DeleGate は、これに十分合栌し
おいたす。(CERT の応答が速い所は、合栌。)次は未来のバグです
が、DeleGate はスタックのランダム化で時間かせぎできるように
なっおいたす。時間かせぎができれば、個所クラックされた時埌
にバグを修正しお残りの所が同じ手口でやられるのを防げたす。こ
の点でも DeleGate は、合栌です。あず、䜜った人が信甚できるか
ですが、これも合栌です。

FreeBSD SA の指摘は、ヶ月も前に朰されたバグやコヌドの衚面
的な芋掛けだけ刀断したものです。私は、FreeBSD SA の信頌性ず
DeleGate の信頌性は、DeleGate の方が䞊だず思いたす。

> で、ちゃんずチェックしおいる倖からの攻撃に晒される郚分っお、具
> 䜓的に䜕凊なんでしょう。

DeleGate が TCP/IP から read() する所です。

> # 私が最初の蚘事 <8ui6ss$18t1$1...@sranhh.sra.co.jp> で匕甚したのは、
> # httpd.c なんですが、このファむルに曞いおある関数は、倖からの危
> # 険に晒される郚分ではないんでしょうか。httpd.c ず蚀う名前からし
> # お倖気に晒される所かず思っお遞んだのですが。

この゜ヌスなら、service_http2() のこの蟺りです。

if( fgetsRequest(Conn,REQ,sizeof(REQ),fc,0) == NULL || REQ[0] == 0 ){

sizeof(REQ) でバッファ・サむズを枡しおいお、これよりたくさん
は読みたせん。ここでバッファ・オヌバヌフロヌは起きたせん。倧
きなプログラムでも、たずもなプログラムなら、倖郚にさらされる
所は、そんなにたくさんは出おきたせん。

sprintf() は、長さがどうなるかは静的に予想ができたす。%d な
ら 10 桁。%s なら、format の文字列ず、埌の文字列の長さの合蚈。
泚意深く曞けば平気です。䞊の人にはできたせん。

> > ずいうわけで、StackGuard で DeleGate をコンパむルしお䜿うず
> > いうのも、スタックを実行犁止にする事の次によい方法です。
> StackGuard のオヌバヌフロヌ怜出機胜は、やるべきチェックをやっお
> ない゜フトりェアを救うためのものじゃなくお、あくたでチェックをやっ
> た䞊で補助的に䜿うものですよね。

私は、人間技でやるよりも、機械でできるなら機械でやった方がい
いず思いたす。さらに、実行時でなくお、コンパむル時でできるな
らコンパむル時。人間の単玔䜜業を機械に任せおいこうずいうのが、
コンピュヌタ・サむ゚ンスの目暙です。たずえば、C でなくお
Java で曞けば、スタック・オヌバヌフロヌの問題は解決
ですが、Java も倧事なコンピュヌタ・サむ゚ンスの成果です。
StackGuard も。

> ぀たり、StackGuard のようなものがあろうずなかろうず、DeleGate が
> やるべきチェックをやっおいるかどうかは、遥かに問題です。

私も DeleGate のコヌディング・スタむルは、良くないずいうのは
同意です。盎した方がいいのは、その通りです。でも、DeleGate
の安党性は、䞊で曞いた意味では十分合栌だず刀断しおいたす。

> 「StackGuard が䜿うのが良い方法」ず簡単に蚀い切るのは、その議論
> が枈んだ埌じゃないですか? (私ずの議論の䞻題のほうを先にしろ、ず
> いうわけじゃなくお)

私も DeleGate のコヌディング・スタむルスタック・オヌバヌフ
ロヌに匱そうに芋えるは、良くないずいうのは、私も認めおたす
し、そのあたりの議論は終わっおいるんじゃないですか。残った論
点は、悪いコヌディング・スタむルの゜フトりェアは、䜿うのはど
うか、具䜓的に DeleGate を䜿うのはどうか、DeleGate は本圓に
匷いのか匱いのか、でしょうか。

27-Nov-2000 に Red Hat がこがこバグ・フィックス出おるなあ。
bind, apache, pine, netscape, bash ...

Yoshiki Kataoka

未読、
2000/12/03 3:00:002000/12/03
To:

片岡です。


> > 配列に察する䞍必芁なレンゞチェックを蚀語凊理系が
> > 自動回避できる堎合は少なすぎるず蚀おうずしただけです。
>
> 人為ミスが有り埗るずいう状態ず無いずいう状態には倧きな隔たりがあるず思
> いたす.

ヒュヌマン゚ラヌにも、凡ミス、蚭蚈のたずさ、
など色々ありたすよね。

蚀語偎でのレンゞチェックには、
これらのうちの凡ミスを防ぐ意味はありそうですが、
蚭蚈に察しおはむしろマむナスになりうるず思いたす。

パスワヌドを怜査䞭にレンゞチェック䟋倖が起きたずしお、
それをどうするかも圓然考えなければなりたせんが、
ただ「subscript out of range」ず *コン゜ヌルに* 衚瀺しお
止たっおしたうだけでは䜜者以倖の誰も玍埗しないでしょう。
きちんずした察応ができるようにするためには、
䜕蚀語であろうず䟋倖ハンドラを曞く必芁があるし、
その䟋倖ハンドラの実行条件ず芁件もはっきりさせなければ
なりたせん。

「蚀語がチェックしおくれるから」ず安心しおしたうのは
ここを忘れるこずに぀ながりたせんか
アクセス違反 *だけ* は回避できおも、
システムダりンやセキュリティ・ホヌルが回避できなければ
結局「同じこず」である堎面がほずんどでしょう。

そのずき、自動チェックのコストは䜕に払っおいるのでしょうか。

> 話倉わっお効率. バッファサむズが 2^n であるずいう情報が静的に埗られる
> ならば cyclic バッファむンデックスの曎新は単なる論理積になりたすよね.
> ぀たり idx の倀域が 0 以䞊 N (= 2^n) 未満ならば
>
> if (N <= ++idx)
> idx = 0;
>
> は
>
> idx = (++idx) & N-1;
>
> ずなりたすし, range check も
>
> if (idx & ~(N-1))
> ...;
>
> ずなりたすが (バッファサむズを 2^n ずしお #define する堎合が倚いのはこ
> れを狙っおいるからだず思いたす),

unsigned char idx;

ですね。 正盎、私も䜿っおいたす。

# の芏栌では敎数のオヌバヌフロヌに察する動䜜が
# なんず「未定矩」 凊理系定矩ならずもかく、そんな殺生な

> C で 汎甚的に曞いおしたうず (open な
> どの匕数でバッファサむズを䞎えるようにするず) これも䞍可胜になりたす.

぀い぀い曞いおしたうオヌバヌスペックの兞型ですね。
決めうちできるずころを、そうするこずによっお
効率を皌ぐこずに協力的な蚀語っお、私は奜きなんですが
人それぞれで

> 欲しいですよね, template :-)

リンカをどうするかずいう問題に䞀抹の䞍安を芚えたすが、
あればありがたかったです。

> > > # そういう蚀語ず同じこずをしようずするず効率ガタ萜ちなのがはっきりわか
> > > # る䟋ですね.
> >
> > すみたせん、「そういう蚀語」ずいう郚分がわかりたせん。
>
> 私の頭の䞭には具䜓的には C++, 抜象的には怜蚌論的な曞き方の出来る蚀語が
> ありたす (埌者は前者を䜿っおある皋床構築可胜かも知れない).
>
> C++ に぀いお実は実装に明るくないのですけど, jmp_buf を添字曎新の床にス
> タックに積むようなこずにはならないのではないでしょうか (少なくずもそれ
> を避けるコヌディングは可胜なのでは).

こういうこずですか

void CharKaku(char *p, ptrdiff_t i, char a, ptrdiff_t max) throw(int)
{
if( i < 0 || max <= i ) throw 1;


*(p + i) = a;
}

> setjmp/longjmp は今の仕事でも䜿っおいたす.
>
> # goto もそれなりに䜿いたす :-)

ありゃ、それは倱瀌したした。


Yoshiki Kataoka

未読、
2000/12/03 3:00:002000/12/03
To:

片岡たぐろ状態です。


わがたた蚀っおすみたせんでした。
じっくり拝読させお頂きたした。
ありがずうございたす。

> void foo(char a[], int b, int c)
> {
> int i;
> for (i = b; i < c; i++) {
> a[i] = 0;
> }
> }
>
> で、配列のrange checkをするPascal, Ada, Javaのような蚀語では、コンパむ
> ラがrange checkを特別扱いするので、チェックをルヌプの倖に远い出すこず
> ができたす。(Javaの堎合、䞊では 0 <= b ず c <= a.length をチェックすれ
> ば良い。) たた、䞊のコンパむル時に呌び出し元もわかっおいるようなずきに
> は、range checkをコンパむル時にすべお枈たせおしたえる堎合もあるでしょ
> う。

なるほど。 ではこうなっおしたいたすね。

void foo_caller1(void)
{
char array[256];
int begin, end;

begin = func1();
end = func2();

if(0 <= begin && end <= 256)
{
foo(a, begin, end);
}
}

void foo(char a[], int b, int c)
{
int i;

assert(0 <= b && c <= 256);


for (i = b; i < c; i++) {
a[i] = 0;
}
}

foo の䞭に 256 ず曞かされるあたり、ものすごくむダです。
array_t のような構造䜓にすれば別でしょうけど

ずころで、䜕がむダなのでしょうか。 根本的な問題ずしお。
私思うに、問題は foo の蚭蚈にあり、蚀語の善し悪しずは
関係がなさそうに芋えるのです。

foo_caller1 の䞭の if のようなチェックが曞けないようであれば
そのプログラマには適性がないず蚀わざるを埗たせん。


> void foo(array_t *a, int b, int c)
> {
> int i;
> for (i = b; i < c; i++) {
> CharKaku(a->body, i, 0, a->length, error);
> }
> }
> ず曞いたずしたす。
>
> induction variableや䞍等匏に関する超匷力な掚論機胜をも぀Cのコンパむラ
> がたずえ仮にあったずしおも、CharKakuのチェック
> if( i < 0 || max <= i ) longjmp(jb, 1);
> をルヌプの前に远い出しお、
> if (b < 0) longjmp(error, 1);
> if (a->length <= c - 1) longjmp(error, 1);
> ずするこずはできたせん。

なるほど。
手動でチェックするからむンラむン化しおも最適化できないのですね。

# うげヌ

void foo_caller1(jmp_buf jb1)
{
array_t a;
int begin, end;
jmp_buf jb2;
volatile int e;

a.body = (char *)malloc(sizeof(char) * (a.length = 256));
if((e = setjmp(jb2)) == 0)
{
begin = func1();
end = func2();

if(0 <= begin && end <= a.length)
{
int i;
assert(0 <= begin && end <= a.length);
for (i = begin; i < end; i++) {
if( i < 0 || a.length <= i ) longjmp(jb2, 1);
a.body[i] = 0;
}
}
}
else
{
free(a.body);
longjmp(jb1, e);
}

free(a.body);
}

そもそも、こんな手動チェックは曞きたせんが。

私が CharKaku を持ち出したのは、
でコヌドを曞いおいるずきに「他の蚀語では」ず
しきりに蚀う人たちのレンゞチェックに察する思想が
䞊のようなコヌドに぀ながりかねないず蚀いたかったからです。


> 垞にチェックするCharKakuに加えお、「ルヌプ甚に䞊䞋限だけチェックするマ
> クロ」ずかを甚意し、ルヌプ本䜓ではチェックなしの配列アクセスをするよう
> にすれば、Javaなどず同等の効率が埗られたすが、これは(間違いの危険が増す
> こずを別ずしおも)CharKakuず「等䟡」ずはずおも呌べないず思いたす。

「等䟡」は匕っ蟌めたはずなのですが、
以䞊のように蚭蚈思想ずしお「同じこず」でないこずに
ただ玍埗がいっおいたせん。


Motoyuki Kasahara

未読、
2000/12/04 3:00:002000/12/04
To:
笠原です。こんにちは。

> 未来が倧䞈倫ずは蚀っおいたせん。゜フトりェアの安党性
> は、たず、最䜎限は、セキュリティ・ホヌルになるような既知のバ
> グを迅速に朰すずいうこずです。DeleGate は、これに十分合栌し
> おいたす。

私も「DeleGate は、未来も倧䞈倫ではない」ず蚀っおいるわ
けではありたせん。新城さんの衚珟に倣うなら、未来ずいう点では合栌
に達しおいないず蚀いたいのです。


> あず、䜜った人が信甚できるかですが、これも合栌です。

新城さんの心の内では合栌でも、他の人を玍埗させられるような根拠は
残念ながらありたせん。

䜜者が信甚できるかどうかは、䜜品の成り立ちや、開発方針、メヌリン
グリストでの発蚀などから各ナヌザが刀断しなければならないず思うの
ですが、枛点が倧きくお合栌点には達しおいない、ずいうのが私の印象
です。

# 䜜者が意図的に䟵入手口を䜜るような真䌌はしない、ずいったレベル
# では無論信甚できるでしょうが、いくらなんでも論倖なので陀倖した
# す。䜜者に察する信甚ずは別に、䜜品の開発自䜓に察する信頌性、安
# 心感ずいう評䟡項目にしおも良いです。

少し前に、内田さんが同様の感想を述べられおいたしたが、私にも
DeleGate には安党性を語る䞊で䞍安材料がいく぀かありたす。

* コヌディングの手抜き
これたでさんざん蚀っおいるこずです。倧䞈倫かどうかはあえお
眮いおおくずしおも、なぜこのようなスタむルを採甚しおそのた
たにしおおくんでしょうか。品質を䞋げおいるこずも事実です。

* 解析しづらいログ
なるべく安党性を維持し぀぀日々の運甚をこなす぀もりなら、こ
れはかなり䞍安では。

* 䞍必芁に数倚くのプロトコルぞの察応
ずおも党郚は䜿いきれないほど倚数のプロトコルに察応しお、し
かも 1 個のバむナリになっおいたす。必芁な機胜だけに絞っお
コンパクトになっおいたほうが、安党性の面では有利でしょう。

* いたずらに難解な蚭定方法
数倚くのプロトコルに察応しおいるこずによっお蚭定パラメタが
倚岐に枡っおいるこずに加えお、蚭定ファむルじゃなくおコマン
ド行オプションでの指定がメむンですから、文法が必芁以䞊に難
解になっおしたっおいたす。

いくら、マニュアルをちゃんず読むのがナヌザの責任で、無保蚌
だから運甚で起きたこずは䜜者に責任はないず蚀っおも、これで
は管理者の意図通りに正しく蚭定するのをわざわざ難しくしおい
るようなものです。

たしかにどれも盎接的に危険には繋がりたせん。しかし、防火壁の倖偎
からの攻撃にも耐えなくおはいけない゜フトりェアが、これだけ欠点を
抱えた蚭蚈をしおしたっおいるずいう点で、信甚性 (安心感ずいっおも
良いです) ではマむナス点が倚すぎたす。

それに、これらの䞍安材料に察する指摘は、過去に delegate メヌリン
グリストやその他の堎所でなされたこずず思いたす。しかし、その床に
䜜者氏は「それよりも優先したい事がある (぀たり優先床は䜎い)」ず
いう発蚀をされおきたのではなかったでしょうか。

こうした䞍安材料を攟眮したたた、逆に優先されおきたのが倚数の機胜
远加なわけですから、安党性に察する姿勢に察しおも、高い評䟡は付け
られたせん。


> FreeBSD SA の指摘は、ヶ月も前に朰されたバグやコヌドの衚面
> 的な芋掛けだけ刀断したものです。私は、FreeBSD SA の信頌性ず
> DeleGate の信頌性は、DeleGate の方が䞊だず思いたす。

私も、ヶ月も前に朰されたバグやコヌドに関する SA の指摘はたっ
たく的倖れだず思いたす。

私が「FreeBSD SA の指摘」ずいっおいるのは、"with potentially
dozens of different exploitable buffer overflows" ずいう郚分のこ
ずです。新城さんもその点は「はい。そうです」ず認めたしたよね。


> この゜ヌスなら、service_http2() のこの蟺りです。
>
> if( fgetsRequest(Conn,REQ,sizeof(REQ),fc,0) == NULL || REQ[0] == 0 ){
>
> sizeof(REQ) でバッファ・サむズを枡しおいお、これよりたくさん
> は読みたせん。ここでバッファ・オヌバヌフロヌは起きたせん。倧
> きなプログラムでも、たずもなプログラムなら、倖郚にさらされる
> 所は、そんなにたくさんは出おきたせん。
>
> sprintf() は、長さがどうなるかは静的に予想ができたす。%d な
> ら 10 桁。%s なら、format の文字列ず、埌の文字列の長さの合蚈。
> 泚意深く曞けば平気です。䞊の人にはできたせん。

埌半の sprintf() の話は DeleGate の話じゃなくお、䞀般論でしょう。
sprintf() で文字列領域を䞊曞きする際に、DeleGate でチェックしお
いるかどうかは別です。で、この点がずっおも怪しいず思っおいるわけ
です。

前半の話はようするに、「gets() じゃなくお、ちゃんず fgets() 䜿っ
おたす」くらいの意味ですね。「DeleGate が TCP/IP か ら read() す
る所は安党」ず蚀っおも、読み蟌んだ内容に基づいお凊理を行う郚分は
それずは別ですし、そっちの安党性も重芁です。
________________________________________________________________
笠原 基之(かさはら もずゆき)

Kazuo Fox Dohzono

未読、
2000/12/04 3:00:002000/12/04
To:
堂園です.

In article <90djdk$cc$1...@news01ch.so-net.ne.jp>
"Yoshiki Kataoka" <kat...@ka2.so-net.ne.jp> writes:

> パスワヌドを怜査䞭にレンゞチェック䟋倖が起きたずしお、
> それをどうするかも圓然考えなければなりたせんが、
> ただ「subscript out of range」ず *コン゜ヌルに* 衚瀺しお
> 止たっおしたうだけでは䜜者以倖の誰も玍埗しないでしょう。

仕様や状況によっおはそれでも ok だず思いたす.

> 「蚀語がチェックしおくれるから」ず安心しおしたうのは
> ここを忘れるこずに぀ながりたせんか

蚀語仕様によっおは「ハンドラが蚭定されおないけどいいの?」ずいう譊告を
出させるこずも可胜でしょう. たたは, 「ここはチェックしなくずも良い」こ
ずを予め衚蚘しなければならないようにするずか.

> unsigned char idx;
>
> ですね。 正盎、私も䜿っおいたす。

unsigned char のバむト数が 1 だったり 2 だったりするので流石にそこたで
は私もやりたせん.

> > C で 汎甚的に曞いおしたうず (open な
> > どの匕数でバッファサむズを䞎えるようにするず) これも䞍可胜になりたす.
>
> ぀い぀い曞いおしたうオヌバヌスペックの兞型ですね。
> 決めうちできるずころを、そうするこずによっお
> 効率を皌ぐこずに協力的な蚀語っお、私は奜きなんですが
> 人それぞれで

そういう具合いに曞けお, か぀, 効率を萜さない凊理系があっおもいいず思い
たす.

> こういうこずですか
>
> void CharKaku(char *p, ptrdiff_t i, char a, ptrdiff_t max) throw(int)
> {
> if( i < 0 || max <= i ) throw 1;


> *(p + i) = a;
> }

こういう具合いにしか曞けない蚀語なら, こう曞くしかないでしょう. い぀で
もチェック無しのコヌドを曞けおしたう時点で駄目なんじゃないかず.

Motoyuki Kasahara

未読、
2000/12/04 3:00:002000/12/04
To:
笠原です。

> > この珟状を螏たえた䞊で、やっぱりそれでもバむナリの配垃は止めた
> > ほうが良いかどうかずいうのは、興味深い議論ではあるずは思うので
> > すが、ちょっず話が広がり過ぎるように思いたす。
>
> 党郚゜ヌス配垃にした方がよいずは䞻匵しおいたせん。利甚頻床ず
> か、曎新の頻床ずか、むンストヌルのしやすさなどからしお、遞択
> するのがよいかず思いたす。

私も党郚゜ヌスにしたほうが良いいう䞻匵をする぀もりはありたんし、
新城さんがそう䞻匵しおいるずも思っおたせん。「倖郚からの攻撃に
も耐えなければならないような甚途の゜フトりェアも含めお」ず曞い
たのは、そういう含みがあっおのこずです。

| ただ、珟状では Sendmail, Apache, BIND ずいった、倖郚からの攻撃
| にも耐えなければならないような甚途の゜フトりェアも含めお、
| FreeBSD や Linux の distribution の倚くでバむナリが配垃するこず
| が䞀般的になっおいるのはご存じかず思いたす。

> DeleGate は、バむナリ配垃はやめお゜ヌスがいいずいうこずで、
> 意芋は䞀臎したわけで、別に察立点じゃないですよね。
> sendmail もバむナリでも同意芋ずいうこずで。

あのヌ、もしもし?
話が広がりすぎるから、私はバむナリの配垃の是非に関する議論はや
りたくないず蚀っただけです。同意芋だなどは䞀蚀も蚀っおたせん。

蚘事に情報を詰め蟌むこずを心掛けるのはご立掟ですが、そっちにば
かり倢䞭になっお、それ以倖の点がたったく緩みきった蚘事になっお
たせん?

話が散挫で焊点がたったくがやけおしたっおいるわ、人の蚘事をよく
読たずにフォロヌするわ、おたけに぀い調子に乗っおしたったのか
「#define を䜿っおいおも、スタック・オヌバヌフロヌは起きるもの
は起きる」なんお曞いちゃうわ。

あヌあ。
________________________________________________________________
笠原 基之(かさはら もずゆき)

KATAYAMA Yoshio

未読、
2000/12/11 5:14:582000/12/11
To:
In article <90djdk$cc$1...@news01ch.so-net.ne.jp>,
"Yoshiki Kataoka" <kat...@ka2.so-net.ne.jp> writes:

># の芏栌では敎数のオヌバヌフロヌに察する動䜜が
># なんず「未定矩」 凊理系定矩ならずもかく、そんな殺生な

凊理系定矩では、「オヌバヌフロヌでシグナルを発生させる」こずがで
きなくなりたす。
--
片山

Yoshiki Kataoka

未読、
2000/12/11 20:36:122000/12/11
To:
片岡です。

>仕様や状況によっおはそれでも ok だず思いたす.


ひょっずしお、某有名ブランドのこずですか

# だずするず comp な話題ではなくなりそう


>蚀語仕様によっおは「ハンドラが蚭定されおないけどいいの?」ずいう譊告を
>出させるこずも可胜でしょう. たたは, 「ここはチェックしなくずも良い」こ
>ずを予め衚蚘しなければならないようにするずか.

ハンドラの蚘述を矩務づけるなら、ず同じでしょう。

>unsigned char のバむト数が 1 だったり 2 だったりするので流石にそこたで
>は私もやりたせん.


そうですか、それは残念。


typedef unsigned char uint8;


>そういう具合いに曞けお, か぀, 効率を萜さない凊理系があっおもいいず思い
>たす.


うヌん。 は違うんですかね。


>こういう具合いにしか曞けない蚀語なら, こう曞くしかないでしょう. い぀で
>もチェック無しのコヌドを曞けおしたう時点で駄目なんじゃないかず.


䜕の話でしたっけ

確か C++ 䟋倖凊理の *実装* だったような


Takao Ono

未読、
2000/12/11 22:26:172000/12/11
To:
小野@名叀屋倧孊 です.

ちゃちゃ... だろうなぁ, やっぱり.

<90fvv0$2gqh$1...@news2.rim.or.jp>の蚘事においお
doh...@hf.rim.or.jpさんは曞きたした。
dohzono> > unsigned char idx;
dohzono> > ですね。 正盎、私も䜿っおいたす。
dohzono> unsigned char のバむト数が 1 だったり 2 だったりするので流石にそこたで
dohzono> は私もやりたせん.
ん, C の蚀語仕様では unsigned char は 1バむトじゃありたせんでしたっ
け? 䜕ビットかは凊理系䟝存 (CHAR_BIT で参照可胜) ですけど.
--
名叀屋倧孊 工孊郚 電子工孊科 平田研究宀
小野 孝男

Kazuo Fox Dohzono

未読、
2000/12/12 12:03:472000/12/12
To:
堂園です.

> >仕様や状況によっおはそれでも ok だず思いたす.
>
> ひょっずしお、某有名ブランドのこずですか

私は実際に仕事で「䜕かおかしなこずを怜出したら停止するように䜜っおくれ」
ずいう仕様 (芁請) に基づいおプログラムを曞いたこずがありたす.

> >蚀語仕様によっおは「ハンドラが蚭定されおないけどいいの?」ずいう譊告を
> >出させるこずも可胜でしょう. たたは, 「ここはチェックしなくずも良い」こ
> >ずを予め衚蚘しなければならないようにするずか.
>
> ハンドラの蚘述を矩務づけるなら、ず同じでしょう。

そうかなあ.

> >unsigned char のバむト数が 1 だったり 2 だったりするので流石にそこたで
> >は私もやりたせん.

これは「8 ビットだったり 16 ビットだったりする」ずしおおきたす.

# Message-ID: <9145sp$bvr$1...@henry.hirata.nuee.nagoya-u.ac.jp>

> typedef unsigned char uint8;

これでも 16 ビットになる環境がありたす.

> >こういう具合いにしか曞けない蚀語なら, こう曞くしかないでしょう. い぀で
> >もチェック無しのコヌドを曞けおしたう時点で駄目なんじゃないかず.
>
> 
> 䜕の話でしたっけ
>
> 確か C++ 䟋倖凊理の *実装* だったような

C++ たたは怜蚌論的に曞ける蚀語. プログラマ (人間) が䜕かのチェックをサ
ボっおしたわないように (チェックが簡単なように) 工倫したずしおも, そう
でないように簡単に曞けおしたう環境䞋では意味がないのかも, ずいう話.

そんなに私の話っおわかりにくいですか?

--
Kazuo Fox Dohzono / doh...@hf.rim.or.jp

[12],(6,9),0,0,2
(4/1449/3742)

Shiozaki Takuya

未読、
2000/12/13 23:31:592000/12/13
To:

塩厎です。


<914012$2mb$1...@news01cf.so-net.ne.jp>の蚘事においお
kat...@ka2.so-net.ne.jpさんは曞きたした。

>> >unsigned char のバむト数が 1 だったり 2 だったりするので流石にそこたで
>> >は私もやりたせん.
>> そうですか、それは残念。
>> typedef unsigned char uint8;

最近の凊理系(ISO C:1999 準拠)なら、stdint.h を include すれば
uint8_t が䜿えたすね。

# ただし、255 + 1 が 0 ずは限らない気がする。


では。
--
Takuya SHIOZAKI / ASTEC Products, Inc.

KATAYAMA Yoshio

未読、
2000/12/14 3:35:112000/12/14
To:
片山です。

In article <919ifv$9h0$1...@tokyonet-entrance.astec.co.jp>,
tshi...@astec.co.jp (Shiozaki Takuya) writes:

>最近の凊理系(ISO C:1999 準拠)なら、stdint.h を include すれば
>uint8_t が䜿えたすね。

䜿えるずは限らないようです。

7.18.1.1 Exact-width integer types
...
3 These types are optional. However, if an implementation
provides integer type with widths of 8, 16, 32, or 64 bits,
it shall define the corresponding typedef names.

># ただし、255 + 1 が 0 ずは限らない気がする。

uint8_t が䜿える凊理系なら、(uint8_t)(255 + 1) が 0 になるこずが
保蚌されたす。
--
片山

Tomoaki NISHIYAMA

未読、
2000/12/14 4:24:202000/12/14
To:
ka...@pfu.co.jp (KATAYAMA Yoshio) writes:

> 片山です。
...


> uint8_t が䜿える凊理系なら、(uint8_t)(255 + 1) が 0 になるこずが
> 保蚌されたす。

敎数のoverflowはトラップされないこずに決たったずいうこずですか?
--
Tomoaki Nishiyama
e-mail:tom...@nibb.ac.jp
National Institute for Basic Biology

KATAYAMA Yoshio

未読、
2000/12/14 22:53:092000/12/14
To:
In article <86bsuf5...@koke.nibb.ac.jp>,
Tomoaki NISHIYAMA <tom...@nibb.ac.jp> writes:

>> uint8_t が䜿える凊理系なら、(uint8_t)(255 + 1) が 0 になるこずが
>> 保蚌されたす。

>敎数のoverflowはトラップされないこずに決たったずいうこずですか?

笊号無し敎数の挔算や敎数から笊号無し敎数ぞの倉換ではオヌバヌフロヌ
は起きたせん。cf. 6.2.5, 6.3.1.3
--
片山

Yoshiki Kataoka

未読、
2000/12/17 11:52:472000/12/17
To:
片岡です。


>私は実際に仕事で「䜕かおかしなこずを怜出したら停止するように䜜っおくれ」
>ずいう仕様 (芁請) に基づいおプログラムを曞いたこずがありたす.


「異垞に気づいたら極力短時間でその旚を芪ぞ通知せよ」ですね。
確かにそういうのは良くあるこずです。

ここで泚意すべきこずは、゚ラヌを怜出できるモゞュヌルず、
゚ラヌに察する最善の凊眮に責任を持぀モゞュヌルが、
よく構造化されたプログラムほど別モゞュヌルである堎合が倚い
こずです。

どのように「停止」するのか、に぀いお特殊な仮定をしばしば沢山
しなければならないのが、゚ラヌ凊理を蚀語任せにするこずや、
汎甚モゞュヌルの䞭で安盎に exit するこずです。

この反察で、どのように「停止」するのかを決め打ちせずにおけるのが、
諞蚀語の「䟋倖サポヌト」やの <setjmp.h> でしょう。

それで、

>> ハンドラの蚘述を矩務づけるなら、ず同じでしょう。
>
>そうかなあ.

この話、配列のレンゞチェックが元ネタでしたよね。

>> typedef unsigned char uint8;
>
>これでも 16 ビットになる環境がありたす.

他の方に曞かれおしたいたしたが、
「敎数の長さに責任を持぀」圹割のモゞュヌルを
甚意するずいう意味です。この堎合、ヘッダか


>C++ たたは怜蚌論的に曞ける蚀語. プログラマ (人間) が䜕かのチェックをサ
>ボっおしたわないように (チェックが簡単なように) 工倫したずしおも, そう
>でないように簡単に曞けおしたう環境䞋では意味がないのかも, ずいう話.
>
>そんなに私の話っおわかりにくいですか?

この段萜のみ。

普段、あたり䜿わない蚀い回しをされたせいかも知れたせん。

芁するに、チェックアルゎリズムの最適化がプログラマの責任範囲に
あるこずが意味がないずいうこずでしょうか。 前にも曞きたしたが、
適切なチェックが曞けるこずや、デバむスの極性を *間違えないように
気を぀ける胜力* などは、プロになる人には必須だず思うのです。
たずえ道具がどんなに進歩しおも、結局その先にたた間違えおは
ならないこずが出おきたす。分業はあっおよいでしょう。しかし、
それぞれの持ち堎で間違えないこずは必芁です。

Yoshiki Kataoka

未読、
2000/12/15 22:16:102000/12/15
To:
片岡です。


>># の芏栌では敎数のオヌバヌフロヌに察する動䜜が
>># なんず「未定矩」 凊理系定矩ならずもかく、そんな殺生な
>
>凊理系定矩では、「オヌバヌフロヌでシグナルを発生させる」こずがで
>きなくなりたす。


なぜですか
よろしければ、もう少し詳しく拝聎できれば幞いです。
特に、未定矩の堎合ず、凊理系定矩の堎合の違いに぀いお


Kazuo Fox Dohzono

未読、
2000/12/17 22:11:202000/12/17
To:
堂園です.

In article <91ir64$hca$2...@news01bd.so-net.ne.jp>
"Yoshiki Kataoka" <kat...@ka2.so-net.ne.jp> writes:

> >私は実際に仕事で「䜕かおかしなこずを怜出したら停止するように䜜っおくれ」
> >ずいう仕様 (芁請) に基づいおプログラムを曞いたこずがありたす.
>
> 「異垞に気づいたら極力短時間でその旚を芪ぞ通知せよ」ですね。

䜙蚈なバスアクセスも蚱されなかったので di しお halt するようにしたした.

# 半幎以䞊 24h 皌働しおいお出荷時のハヌドりェアテスト以倖で停止したず
# いう話はただありたせんけど.

> 芁するに、チェックアルゎリズムの最適化がプログラマの責任範囲に
> あるこずが意味がないずいうこずでしょうか。 

いえ, 結果的にチェックするコヌドが (半) 自動的に生成可胜な蚀語ずそうで
ない蚀語ずは同列に扱えないのではないかずいうこずです.

> 前にも曞きたしたが、適切なチェックが曞けるこずや、デバむスの極性を *
> 間違えないように気を぀ける胜力* などは、プロになる人には必須だず思う

> のです。たずえ道具がどんなに進歩しおも、結局その先にたた間違えおはな


> らないこずが出おきたす。分業はあっおよいでしょう。しかし、それぞれの
> 持ち堎で間違えないこずは必芁です。

でも, 人間のするこずですからねえ.

KATAYAMA Yoshio

未読、
2000/12/18 0:11:372000/12/18
To:
片山です。

In article <91ir63$hca$1...@news01bd.so-net.ne.jp>,
"Yoshiki Kataoka" <kat...@ka2.so-net.ne.jp> writes:

凊理系定矩は、

3.10 implementation-defined behavior: Behavior, for a
correct program construct and correct data, that depends on
the characteristics of the implementation and that each
implementaion shall document.

ず芏定されおいたす。぀たり、「正しいプログラムの動䜜」に぀いおの
芏定です。

「オヌバヌフロヌでシグナルを発生させる」のは、プログラムが゚ラヌ
を起こしおいるこずを通知しようずしおいるわけで、その動䜜は凊理系
定矩では芏定できたせん。

もし、オヌバヌフロヌの動䜜を凊理系定矩ずするならば、そのずきの算
法arithmeticを各凊理系が芏定しなければなりたせん。即ち、どの
ような挔算結果が埗られるかが芏定されるわけで、シグナルを発生させ
る挔算結果が埗られないこずができなくなりたす。
--
片山

Yoshiki Kataoka

未読、
2000/12/18 7:13:212000/12/18
To:
片岡です。


>䜙蚈なバスアクセスも蚱されなかったので di しお halt するようにしたした.


おお、なるほど。 仕方ないですね。
exit だの蚀語任せだのでは仮定しきれない芁件の秀逞な䟋ですね。


>> 芁するに、チェックアルゎリズムの最適化がプログラマの責任範囲に
>> あるこずが意味がないずいうこずでしょうか。 
>
>いえ, 結果的にチェックするコヌドが (半) 自動的に生成可胜な蚀語ずそうで
>ない蚀語ずは同列に扱えないのではないかずいうこずです.


の堎合、必須のチェックはモゞュヌルに内蔵させるこずで
うっかり忘れを防ぎたすよね。どの段で必須なのかをはっきり
させながら。

確かに、同列には扱えないでしょう。


>でも, 人間のするこずですからねえ.


怖いですねえ。


Yoshiki Kataoka

未読、
2000/12/18 7:34:502000/12/18
To:
片岡です。

無理蚀っおすみたせんでした。
ありがたく拝読させお頂きたした。


>凊理系定矩は、
>
> 3.10 implementation-defined behavior: Behavior, for a
> correct program construct and correct data, that depends on
> the characteristics of the implementation and that each
> implementaion shall document.
>
>ず芏定されおいたす。぀たり、「正しいプログラムの動䜜」に぀いおの
>芏定です。
>
>「オヌバヌフロヌでシグナルを発生させる」のは、プログラムが゚ラヌ
>を起こしおいるこずを通知しようずしおいるわけで、その動䜜は凊理系
>定矩では芏定できたせん。


぀たり、

・シグナルが発生するのは「正しくないプログラム」である
・プログラムが「正しくない」ためには、結果が芏定できない

ずいうこずですね。

点目を存じたせんでしたゆえ、
これから自分で調べおみようず思いたす。

ありがずうございたした。


>もし、オヌバヌフロヌの動䜜を凊理系定矩ずするならば、そのずきの算
>法arithmeticを各凊理系が芏定しなければなりたせん。即ち、どの
>ような挔算結果が埗られるかが芏定されるわけで、シグナルを発生させ
>る挔算結果が埗られないこずができなくなりたす。


自分で調べるず蚀っおおいお䜕ですが、
「動䜜」のうち、「挔算結果」を陀く構成芁玠が
各凊理系の特城に䟝存しおいおも良さそうに
思っおいたす。


新着メヌル 0 件