The behavior of NetBSD's setenv(3)
NetBSD's setenv(3) doesn't raises EINVAL even if its name argument contains `='.
tnozaki
@tnozaki
@nalsh setenv("FOO=bar", "buzz") の場合、environは FOO=buzz になったはず、つまり '=' 以降は無視されるちう感じだったかと
2010-05-19 17:20:16
Takahiro Kambe
@_taca_
@nalsh 昨日、気になって簡単なCのコードを書いてました。#NetBSD: setenv("foo1=bar1", "baz1") => foo1=baz1, #FreeBSD: EINVAL
2010-05-19 18:27:42
tnozaki
@tnozaki
@_taca_ EINVALになるのはPOSIX.1-2001からですが、結局こないだのFreeBSD setenv(3) exploit と同じ問題を孕んでるんですよねー
2010-05-19 18:45:04
tnozaki
@tnozaki
setenv(3) の name に '=' を含む場合 EINVAL を返すというPOSIX.1-2001の仕様をまじめに実装すると
2010-05-19 18:52:02
tnozaki
@tnozaki
setenv("FOO=", "bar", 1) でFOOの値がbarで上書きされなくなるので、上書きされることを100%仮定して戻り値をチェックしてないコードがlink loaderとかにあったりすると
2010-05-19 18:53:25
Takahiro Kambe
@_taca_
@tnozaki "foo1=bar1"なんて名前の環境変数をセットしようとするのはまずいですが、エラーならないのはまだしも、既存の"foo1"の値が意図せず変えられてしまうっての行けてない。やはりエラーにすべきなのでしょうな。
2010-05-19 19:30:44