[pgpool-general-jp: 1149] Re: 拡張問い合わせプロトコルでセグメンテーションフォルト

Naoya Anzai anzai-naoya @ mxu.nes.nec.co.jp
2013年 3月 19日 (火) 15:26:58 JST


石井様

お世話になっております、安西です。

下記件、確認いたしました。
この度はご対応ありがとうございました。

>安西様
>
>当方での確認が終わりました。また、コミュニティでも同様のバグが原因と思
>われる障害がバグトラックに報告されており、安西様のパッチを当てたところ
>障害が直ったという報告がありました。
>
>http://www.pgpool.net/mantisbt/view.php?id=51
>
>先ほどパッチをpgpool-IIのマスタから3.0-stableまでにコミット/プッシュさ
>せていただきました。ありがとうございました。
>
>http://www.pgpool.net/pipermail/pgpool-committers/2013-March/000838.html
>などです。
>--
>Tatsuo Ishii
>SRA OSS, Inc. Japan
>English: http://www.sraoss.co.jp/index_en.php
>Japanese: http://www.sraoss.co.jp
>
>> 安西様
>> 
>> SRA OSS石井です。
>> 
>> 解析とパッチのご提供、ありがとうございます。確認させていただきます。
>> --
>> Tatsuo Ishii
>> SRA OSS, Inc. Japan
>> English: http://www.sraoss.co.jp/index_en.php
>> Japanese: http://www.sraoss.co.jp
>> 
>>> 安西と申します。
>>> 
>>> pgpool-II 3.1.6にて、レプリケーションモードで拡張問い合わせ
>>> プロトコルを使用したトランザクションを実行中に、子プロセスが
>>> SIGSEGVで落ちる現象が発生しました。
>>> 
>>> 添付のsegv.sql内に記載されているクエリを実行することで、
>>> 発生します。(INSERT,SELECTをより多く繰り返さないと発生しない
>>> 可能性もあります。)
>>> 
>>> 調査したところ、Parse処理中のnow()の書き換え処理を行う部分で、
>>> 不正な処理と思われる箇所を発見いたしました。
>>> 
>>> pool_proto_modules.c:L774
>>> 
>>> ---
>>> rewrite_query = rewrite_timestamp(backend, node, rewrite_to_params, 
>>> msg);
>>> if (rewrite_query != NULL)
>>> {
>>>   int alloc_len = len - strlen(stmt) + strlen(rewrite_query);
>>> ★contents = palloc(alloc_len);
>>>   strcpy(contents, name);
>>> 
>>> (略)
>>> 
>>> ●msg->contents = contents;
>>> ---
>>> 
>>> msg->contentsには元々pool_create_sent_messageでセッション
>>> コンテキストで管理しているメモリを割り当てています。
>>> ★印のpallocはクエリコンテキストのメモリを割り当てており、
>>> ●印の箇所でセッションコンテキストの管理する領域にクエリ
>>> コンテキストのメモリが格納されます。
>>> 
>>> msg->contentsのメモリチャンクはクエリ処理終了後にセッション
>>> コンテキストのメモリプールに戻され、再利用されるかと思います。
>>> また、クエリコンテキストのメモリチャンクはクエリ処理終了後に
>>> ブロックごと削除(free)されるかと思います。
>>> 
>>> そのため●の影響によって、セッションコンテキストのメモリ
>>> プールに戻されたメモリチャンクがクエリコンテキストの
>>> 削除によってfreeされ、そのメモリチャンクをセッション
>>> コンテキストで再利用するタイミングで問題が発生するようです。
>>> 
>>> 本障害が発生する条件は最低でも以下の4つがあります。
>>> 
>>> ・レプリケーションモード
>>> ・拡張問い合わせプロトコル
>>> ・更新系クエリでnow()等を含むクエリを発行
>>> ・同一セッションで複数のクエリを発行
>>> 
>>> 本現象は3.0.5 , 3.1.4 , 3.2.3でも発生することを確認しています。
>>> 
>>> 修正パッチを作成してみましたので、ご確認いただければと思います。
>>> 
>>> 
>>> 以上、よろしくお願い致します。
>>> 
>>> -----------------------------------------------------------
>>> NECソフト株式会社
>>> PFシステム事業部  テーマソフトウェアG
>>> 安西 直也
>>> 
>>> 外線:(03)5534-2353  内線:8-57-40364
>>> E-mail:anzai-naoya @ mxu.nes.nec.co.jp
>>> -----------------------------------------------------------
>> _______________________________________________
>> pgpool-general-jp mailing list
>> pgpool-general-jp @ sraoss.jp
>> http://www.sraoss.jp/mailman/listinfo/pgpool-general-jp

-----------------------------------------------------------
NECソフト株式会社
PFシステム事業部  テーマソフトウェアG
安西 直也

外線:(03)5534-2353  内線:8-57-40364
E-mail:anzai-naoya @ mxu.nes.nec.co.jp
-----------------------------------------------------------


pgpool-general-jp メーリングリストの案内