From takahiro.kurosawa @ gmail.com Sat Mar 5 13:19:53 2011 From: takahiro.kurosawa @ gmail.com (KUROSAWA Takahiro) Date: Sat, 05 Mar 2011 13:19:53 +0900 Subject: [Ultramonkey-l7-users 394] Re: =?iso-2022-jp?b?bDd2c2QbJEIlVyVtJTslOSQsTW4kQSRrTGRCahsoQg==?= In-Reply-To: References: Message-ID: <86k4geyz9y.wl%fwkg7679@mb.infoweb.ne.jp> 黒沢と申します. At Fri, 4 Mar 2011 14:43:28 +0900, yosuke takadate wrote: > cldataのアドレスは取得できているので、 > "error / can not allocate memory for buffer"という > エラーログは出力されておりません。 > connの内容は以下のようになっています。 > > (gdb) print *conn > $1 = {lsock = 0x17b15160, srv = 0x17b151d0, dest = 0x17b23dc0, splice > = 0, caddr = {sin_family = 2, > sin_port = 53934, sin_addr = {s_addr = 3894339786}, sin_zero = > "\000\000\000\000\000\000\000"}, raddr = { > sin_family = 0, sin_port = 0, sin_addr = {s_addr = 0}, sin_zero = > "\000\000\000\000\000\000\000"}, > vaddr = {sin_family = 0, sin_port = 0, sin_addr = {s_addr = 0}, > sin_zero = "\000\000\000\000\000\000\000"}, > laddr = {sin_family = 0, sin_port = 0, sin_addr = {s_addr = 0}, > sin_zero = "\000\000\000\000\000\000\000"}, > ciom = 0x17afe9a0, riom = 0x17afe9c0, proto = 6 '\006', state = 0, > cldata = 0x1808d0d0 "POST /HOGE/upload > HTTP/1.1\r\nX-Forwarded-For: 111.222.333.444\r\nHost: > hoge.jp:8831\r\nUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; > ja; rv:1.9.2.12) Gecko/20101026"..., cldata_len = 20512, > cldata_bufsize = 20480, cmss = 1448, sorry_conn_flag = 0, old_dest = > 0x0} > > この状態で、conn.c:2923のfreeで落ちてしまうということは、 > cldataへの格納時点で、(マルチパートリクエスト時に起きやすい > 何らかの原因で)バッファ溢れが起きているのでしょうか。 > MALLOC_CHECKなどでmessageを検出できるように試してみたいと思います。 久々に l7vsd のコードを見るので外しているかもしれませんが, X-Forwarded-For の追加処理で領域外アクセスを起こすように見えます. 上の core に対し,gdb から print &conn->cldata[20511] を実行して文字列が表示されるようだと,領域外アクセスが起きている 可能性が高そうです. 可能でしたら,ですが,l7directord.cf の --forwarded-for の設定を 外すとひとまず問題は回避できるかもしれません.