リリース日: 2012-02-27
このリリースは9.0.6に対し、各種の不具合を修正したものです。 9.0メジャーリリースにおける新機能についてはE.151を参照してください。
9.0.Xからの移行ではダンプ/リストアは不要です。
しかしながら、9.0.6より前のバージョンからアップグレードする場合は、E.145を参照してください。
CREATE TRIGGER
においてトリガ関数に対する実行権限が必要になりました。(Robert Haas)
この検査が無かったため、別のユーザが自身が所有するテーブルにその関数をインストールすることで、偽造した入力データでトリガ関数を実行することができました。
SECURITY DEFINER
が付いたトリガ関数でのみ重大です。
その他のトリガ関数ではとにかくテーブル所有者として実行されるためです。(CVE-2012-0866)
SSL証明書内のコモンネームにおける独断的な長さ制限を取り除きました。(Heikki Linnakangas)
libpqとサーバの両方ともSSL証明書から取り出したコモンネームを32バイトで切り詰めていました。 通常想定外の検証エラー以上のことを引き起こしませんが、ある証明書の所有者が他者になりすますことができるという、多少怪しいシナリオがあります。 被害を受けるにはコモンネームが正確に32バイト長でなければならず、また、攻撃者は信頼されたCAに対してコモンネームが接頭辞としてその文字列を持つ証明書を発行するように説得しなければなりません。 またサーバになりすますには、さらにクライアントからの接続を中継するための攻撃が必要です。(CVE-2012-0867)
pg_dumpのコメントに記述された名前の中の改行を空白に変換します。(Robert Haas)
pg_dumpは、その出力スクリプトにおけるSQLコメント内で発行されるオブジェクト名のサニタイズに関して注意を払っていませんでした。 改行を含む名前は少なくともそのスクリプトを構文的に不正にさせます。 悪意をもって組み立てられたオブジェクト名によって、スクリプトがリロードする時にSQLインジェクションの危険性があり得ました。(CVE-2012-0868)
バキューム処理と同時に挿入を行った場合のbtreeインデックス破損を修正しました。(Tom Lane)
挿入によって発生するインデックスページ分割によって、同時実行中のVACUUM
が削除すべきインデックス項目を削除し損なうことが時々発生することがありました。
対応するテーブル行が削除された後、対応先が無いインデックス項目によってエラー(「could not read block N in file ...」など)、最悪は、解放されたテーブル位置に再挿入された関係がない行にちなんだ、警告のない間違った問い合わせ結果が引き起こされます。
この不具合は8.2から存在していましたが、あまり頻発に発生しませんでしたので、これまで究明されませんでした。
使用中のデータベースで発生していたのではと疑わしければ、対象のインデックスを再インデックス付けすることで修正されます。
WAL再生中の一時的な共有バッファのゼロ化を修正しました。(Tom Lane)
再生ロジックでは時々共有バッファをゼロ化し再度書き込んでいました。 このためその内容は一時的に無効になります。 ホットスタンバイモードではこの結果、並行して実行される問い合わせがゴミデータを参照することになり得ました。 いろいろな兆候が現れますが、もっとも良くある兆候は「invalid memory alloc request size」です。
ホットスタンバイのクラッシュの後、postmasterの再起動を試みるように修正しました。(Tom Lane)
ホットスタンバイモードで操作している時に任意のバックエンドプロセスがクラッシュした場合、ロジックエラーのため、クラスタを再起動させようとはせずにpostmasterを終了させました。
最近更新された行によって所有されるTOAST値に対するCLUSTER
/VACUUM FULL
の取り扱いを修正しました。(Tom Lane)
この見落としにより、これらのコマンドのいずれかを実行している時に、TOASTテーブルのインデックスに対して「duplicate key value violates unique constraint」エラーが報告されることがあり得ました。
テーブル所有者を変更する時に、テーブル単位の権限だけではなく列単位の権限も更新します。(Tom Lane)
この失敗は、事前に付与された列権限が古い所有者により付与されたものとして表示されることを意味します。 つまり新しい所有者またはスーパーユーザであってもテーブル所有者を追跡できなくなった権限を取り除くことができないことを意味します。
REASSIGN OWNED
において外部データラッパおよび外部サーバをサポートします。(Alvaro Herrera)
これらのオブジェクトの所有権を変更しなければならなかった場合に、このコマンドは「unexpected classid」エラーで失敗しました。
ALTER USER/DATABASE SET
における一部の設定で存在しない値を許可します。 (Heikki Linnakangas)
default_text_search_config
、default_tablespace
、temp_tablespaces
を未知の名前に設定することができます。
これらが実際に使用されている別のデータベースでは既知であるかもしれませんし、またテーブル空間の場合はまだテーブル空間が作成されていないかもしれないからです。
過去search_path
においても同じ問題がありましたが、これらの設定も同様に動作するようにしました。
コミット後のテーブルファイルの削除に問題があった場合のクラッシュを防止します。(Tom Lane)
テーブル削除は、そのトランザクションがコミットした後にのみ背後のディスク上のファイルを削除しなければなりません。 (例えばファイルの権限の誤設定のため)失敗した場合、トランザクションをアボートするには遅すぎますので、コードは単に警告メッセージを出力し継続するものと考えられます。 リリース8.4においてこのロジックが壊れ、こうした状況でPANICが発生し、再起動できないデータベースとなりました。
DROP TABLESPACE
のWAL再生中に発生したエラーから修復します。(Tom Lane)
再生はテーブル空間ディレクトリの削除を試みますが、(対象ディレクトリの所有者や権限が不正であったなど)失敗する可能性は多々あります。 これまでは再生コードはパニックし、手作業を介さなければ再起動できないデータベースになりました。 ディレクトリの削除に失敗したところで多少ディスク領域が無駄に使われるだけですので、問題を記録し、継続する方がより良いと考えました。
ホットスタンバイのAccessExclusiveLocksのログ記録における競合問題を修正しました。(Simon Riggs)
ロックが「transaction zero」によって保持されていると記録されることが時々ありました。 少なくともスレーブサーバでアサーションエラーが発生することが分かっていますが、もっと深刻な問題が起こる可能性があります。
WAL再生中にOIDカウンタを、たとえ周回していたとしても、正しく追跡します。(Tom Lane)
これまでは、OIDカウンタはシステムが再生モードを抜けるまで高値のままになりました。 実際にはほとんどnilという結果になりますが、マスタに昇格されるスタンバイサーバでは、値が必要になってから、OIDカウンタを合理的な値まで進めるために長時間かかる可能性がありました。
クラッシュリカバリの最初の、誤解を招く「consistent recovery state reached」ログメッセージの発行を抑制します。(Heikki Linnakangas)
pg_stat_replication
.replay_location
の初期値を修正しました。(Fujii Masao)
これまでは、少なくとも1つのWALレコードが再生されるまで、表示される値は間違っていました。
*
が付いた正規表現の後方参照を修正しました。(Tom Lane)
コードでは、正確な文字列一致を強制せずに、実質後方参照シンボルで参照されるパターン副式を満たす任意の文字列を受け付けました。
同様の問題はまだ、直接量指定子のサブジェクトとならない、より大きく量化された式に埋め込まれた後方参照でも残っています。 こちらは将来のリリースのPostgreSQLで対応予定です。
inet
/cidr
値の処理に最近入ったメモリリークを修正しました。(Heikki Linnakangas)
2011年12月のPostgreSQLリリース内のパッチによって、これらの操作にメモリリークが発生しました。 これらの列に対するbtreeインデックス等で重大な問題になる可能性がありました。
SQL言語関数内のCREATE TABLE AS
/SELECT INTO
の後に対応先がなくなったポインタを修正しました。(Tom Lane)
ほとんどの場合、これはアサートが有効な構築におけるアサーション失敗という結果になるだけですが、もっと悪い結果になる可能性がありました。
Windowsのsysloggerにおけるファイルハンドルの二重クローズを防ぎます。(MauMau)
通常はこのエラーは表面化しませんが、Windowsのデバッグ版を実行している場合は例外が引き起こります。
plpgsqlにおけるI/O変換関連のメモリリークを修正しました。(Andres Freund、Jan Urbanski、Tom Lane)
現在の関数が終わるまで、特定の操作がメモリリークしました。
継承されたテーブル列に対するpg_dumpの取り扱いを改良しました。(Tom Lane)
pg_dumpは、子の列が親の列と異なるデフォルト式を持つという状況を間違って扱いました。
デフォルトがテキストとして親のデフォルトと同一であるが、実際は同一ではない場合(例えば、スキーマ検索パスの違いのため)、異なるものとして認識せず、そのため、ダンプしリストアした後、子は親のデフォルトを継承することができました。
子の列がNOT NULL
であり親がそうではなかった場合も、微妙に間違ってリストアされました。
INSERT形式のテーブルデータに対するpg_restoreの直接データベースにリストアするモードを修正しました。(Tom Lane)
他の問題に対する修正における見落としの結果、2011年9月または12月付けのリリースに含まれるpg_restoreでは、--inserts
または--column-inserts
オプションを付けて作成されたアーカイブファイルを直接データベースにリストアすることができませんでした。
アーカイブファイル自体には失敗はなく、テキストモード出力では問題ありませんでした。
pg_upgradeがregclass
列を含むテーブルを処理できるようにしました。(Bruce Momjian)
pg_upgradeがpg_class
OIDの保護に注意を払うようになりましたので、この制限を続ける理由はなくなりました。
SSLクライアント証明書ファイルを検索するときに、libpqがENOTDIR
エラーを無視するようにしました。(Magnus Hagander)
これによりユーザのホームディレクトリが/dev/null
のようなものに設定されていたとしても、証明書なしですが、SSL接続を確立できます。
ecpgのSQLDA領域におけるフィールド整列問題を修正しました。 (Zoltan Boszormenyi)
ecpgのDEALLOCATE
文においてAT
オプションを可能にしました。(Michael Meskes)
これをサポートする基盤は少し前から存在しましたが、見落としのため、エラー検査でこの状況を拒絶していました。
ecpgにおいてvarchar構造体を定義するときに変数名を使用しません。(Michael Meskes)
contrib/auto_explain
のJSON出力モードが有効なJSONを生成するように修正しました。(Andrew Dunstan)
この出力では、本来括弧を使用しなければならない最上位で、角括弧を使用していました。
contrib/intarray
のint[] & int[]
演算子のエラーを修正しました。 (Guillaume Lelarge)
2つの入力配列が共通して持つ最小の整数が1であり、どちらかの配列により小さな値があった場合、1が結果から間違って省かれました。
contrib/pgcrypto
のencrypt_iv()
およびdecrypt_iv()
の誤判定を修正しました。(Marko Kreen)
これらの関数は特定の種類の無効入力エラーの通知に失敗し、不正な入力に対してランダムなゴミの値を代わりに返しました。
contrib/test_parser
における1バイトのバッファオーバーランを修正しました。(Paul Guyot)
コードでは必要より1バイト多く読み取ろうとし、境界条件ではクラッシュします。
contrib/test_parser
は単なるサンプルコードであり、これ自体はセキュリティ問題ではありませんが、例のコードとしては良くありません。
ARMにおいて可能ならばスピンロックに__sync_lock_test_and_set()
を使用します。(Martin Pitt)
この関数は、以前の廃止予定でARMv6以降では使用できなくなったSWPB
命令の使用を置き換えるものです。
最近のARMボードでも古いコードは明白な方法で失敗することはありませんが、単に同時アクセスのインターロックを行わず、マルチプロセス操作において奇妙な失敗をもたらすと報告されています。
受け付け可能なバージョンのgccを用いて構築する場合に-fexcess-precision=standard
オプションを使用します。(Andrew Dunstan)
最近のバージョンのgccは独創的な結果を生成するというさまざまなシナリオを防ぎます。
FreeBSDにおいてスレッド化されたPythonを使用できるようにしました。(Chris Rees)
configureスクリプトはこれまで、この組み合わせは動作しないと前提していました。 しかしFreeBSDではこの問題が修正されましたので、エラー検査を取り除きました。