リリース日: 2015-02-05
このリリースは9.4.0に対し、各種不具合を修正したものです。 9.4メジャーリリースにおける新機能については、E.31. リリース9.4を参照してください。
9.4.Xからの移行ではダンプ/リストアは不要です。
しかしながら、あなたがWindowsユーザで「Norwegian (Bokmål)」ロケールを使っているのなら、アップグレード後にPostgreSQLシステムカタログ内に格納された全ての「Norwegian (Bokmål)_Norway」または「norwegian-bokmal」ロケール名をASCIIによる別名「Norwegian_Norway」に置き換える手動操作が必要です。 詳細はhttp://wiki.postgresql.org/wiki/Changes_To_Norwegian_Localeを参照してください。
to_char()
のバッファオーバーランを修正しました。
(Bruce Momjian)
to_char()
が大きな桁数をとる数値書式テンプレートを処理するとき、PostgreSQLがバッファ終端を超えて読み取ることがありえました。
また、巧妙に作りこまれたタイムスタンプ書式テンプレートに対して、PostgreSQLがバッファ終端を超えて書き込むことがありえました。
どちらの場合もサーバをクラッシュさせることができます。
可能性は低いと見られますが、権限昇格に至る攻撃ができる可能性も排除できません。
(CVE-2015-0241)
*printf()
置換関数におけるバッファオーバランを修正しました。
(Tom Lane)
PostgreSQLにはprintf
や関連する関数の置き換え実装が含まれています。
およそ500桁以上の精度で浮動小数点数を(変換指定子e
、E
、f
、F
、g
、G
で)整形するとき、これらのコードでスタックバッファオーバランが起きます。
これはサーバをクラッシュさせ、また、権限昇格に至る攻撃ができる可能性も排除できません。データベース利用者はSQL関数to_char()
を通してこのバッファオーバランを起こすことができます。
PostgreSQLコア機能に影響があるほか、printf族の関数を使用している拡張モジュールにも危険があると考えられます。
この問題は主にWindows上のPostgreSQLに影響があります。 PostgreSQLは、その他の現代的なプラットフォーム上では、これら関数のシステム実装を使います。 (CVE-2015-0242)
contrib/pgcrypto
でのバッファオーバランを修正しました。
(Marko Tiikkaja, Noah Misch)
pgcrypto
モジュールでのメモリサイズ追跡の誤りにより、
スタックバッファオーバランと未初期化メモリ内容への不適切な依存が起こりえました。
このバッファオーバランはサーバをクラッシュさせ、また、
権限昇格に至る攻撃ができる可能性も排除できません。
(CVE-2015-0243)
エラー後にフロントエンド/バックエンドプロトコルの同期が失われる可能性があり、 修正しました。 (Heikki Linnakangas)
サーバがクライアントからのメッセージを読んでいる途中に何らかエラーが起きた場合、同期が失われ、メッセージデータの一部分を新たなプロトコルメッセージと解釈しようと誤って試みられる可能性がありました。 攻撃者がコマンドパラメータ中に巧妙に作りこんだバイナリデータを送り出すことで、SQLコマンドを注入することができるかもしれません。 この筋書を引き起こす最もありそうなエラーは、ステートメントタイムアウトと問い合わせキャンセルです。 とりわけ脆弱なのは、タイムアウトを使っていて、任意のユーザ作成データをバイナリの問い合わせパラメータとして送れるアプリケーションです。 ステートメントタイムアウトを無効にすることで、脆弱性を悪用される危険性を無くせはしませんが軽減できます。 本問題を報告してくれた Emil Lenngren 氏に感謝します。(CVE-2015-0244)
制約違反エラーメッセージを通した情報漏洩を修正しました。 (Stephen Frost)
いくつかのサーバエラーメッセージは一意性制約などの制約に違反した列の値を表示します。ユーザがテーブルの全列にSELECT
権限を持たないとすれば、このことは、見ることができてはいけない値が露出していることになります。
該当コードを修正し、値が表示されるのは SQLコマンドに由来する値であるか、ユーザでSELECT
可能であるときだけにしました。
(CVE-2014-8161)
Windows上で回帰テストの一時インストールへの接続制限を厳重にしました。 (Noah Misch)
テスト一式を起動したOSユーザからのみ接続を許すようにSSPI認証を使うようにします。 これは、他のユーザがテスト用postmasterに接続できるという、他のプラットフォーム向けで以前封鎖したのと同様の脆弱性を、Windows上でも封鎖するものです。 (CVE-2014-0067)
Windowsの「Norwegian (Bokmål)」ロケールに対応しました。 (Heikki Linnakangas)
非ASCIIのロケール名は、どのエンコーディングで解釈すべきか明らかでないので問題があります。やっかいなロケール名にASCIIの別名「Norwegian_Norway」を割り当てました。
9.4.0では、これを「norwegian-bokmal」に割り当てていましたが、全てのWindows構成で動作するわけではないことがわかりました。 現在は代替に「Norwegian_Norway」が推奨されます。
EvalPlanQual処理で解放済みメモリを使用してしまう問題を修正しました。 (Tom Lane)
READ COMMITTED
モードで最近に更新した行をロックまたは更新すると、
本障害によりクラッシュする可能性がありました。
EvalPlanQual処理でタプルロック取得を試みる際にデッドロックに陥る可能性を回避しました。 (Álvaro Herrera, Mark Kirkwood)
複数の他トランザクションが同時にFOR SHARE
タプルロックを保持している中で、トランザクションがFOR NO KEY EXCLUSIVE
タプルロックの取得を試みて待つのに失敗してしまうのを、修正しました。
(Álvaro Herrera)
幅の大きいテーブルに対するEXPLAIN
の性能を改善しました。
(Tom Lane)
jsonb
ユニコードエスケープ処理について修正し、結果として\u0000
は使用不能になりました。
(Tom Lane)
これまでは、JSONユニコードエスケープ\u0000
は受け入れられ、6文字データとして格納されました。
しかし、これは\\u0000
の入力で格納されたものと区別がつかず、曖昧になっています。
さらに、->>
演算子など、エスケープ解除したテキスト出力が期待されるところで、エスケープシーケンスが\u0000
と出力され、JSONエスケープが除去されるという予想に合いません
(バイト00を出力するのが一貫した振る舞いですがPostgreSQLはテキスト文字列中にバイト00を含めることをサポートしていません)。
9.4.0 ではJSON出力変換規則を修正してこの状況を改善しようという思慮に欠けた試みを入れました。
しかし、当然ながらこれは根本的な曖昧さを修正するものではなく、ユニコードエスケープシーケンスの他の使用方法の破壊を生じました。
これをもとに戻し、中心的問題を回避するため\u0000
はjsonb
入力では受け付けないようにしました。
jsonb
列に9.4.0で格納された\u0000
値が含まれている場合、これからは、それは、本ケースで9.4.0により格納されたデータの他の有効な解釈である\\u0000
であったものとして読み出されます。
json
型は曖昧な格納の問題を持ちませんが、一貫性に欠けたエスケープ解除したテキスト出力の問題があります。
そのため今後は、エスケープ解除した形式への変換が必要なときには、\u0000
はjson
値の中でも受け付けられません。
この変更は、値に何ら処理を加えない限り、json
列に\u0000
を格納できなくするものではありません。
これは、非ASCIIのユニコードエスケープをUTF8以外のデータベースに格納することが許されていることと、ちょうど類似しています。
xpath()
の名前空間の扱いを修正しました。
(Ali Akbar)
これまで、入力xml
値で返される指定要素でなく先祖要素に名前空間宣言が付加されているとき、xpath()
呼び出しから返されるxml
値は、名前空間宣言を持ちませんでした。
孤立と見なされるとき結果が正しいなら先祖の宣言を伝搬するようにしました。
範囲演算子の選択率見積についていくつか誤りを修正しました。 (Emre Hasegeli)
このパッチは稀なプランナエラー 「unexpected operator NNNN」(予想外の演算子NNNN)を修正して、そのほかいくつかの選択率見積を改善します。
意図しないGINインデックス要素の最大サイズの縮小を元に戻しました。 (Heikki Linnakangas)
9.4.0は以前のバージョンでは受付されていたデータに対して、「index row size exceeds maximum」(インデックス行のサイズが最大値を超えています)というエラーで失敗することがありました。
GINインデックス再スキャンを繰り返すときの、問い合わせ中のメモリリークを修正しました。 (Heikki Linnakangas)
ゼロ以外のgin_fuzzy_search_limit
を使うときクラッシュする可能性があり、修正しました。
(Heikki Linnakangas)
ロジカルデコーディングについて様々な修正をしました。 (Andres Freund)
wal_log_hints
の変更を伝えるパラメータ変更レコードの誤ったWAL再生を修正しました。
(Petr Jelinek)
「pgstat wait timeout」というメッセージをWARNINGレベルからLOGレベルに変更して、文言もより分かりやすくしました。 (Tom Lane)
本メッセージは元々は基本的には起こらないケースと考えられていました。 しかし、遅いビルドファームのマシンでたびたび発生して、邪魔になっていました。 LOGレベルに下げ、また、言い回しに幾分の努力を払い、「using stale statistics instead of current ones because stats collector is not responding」 (統計情報コレクタが応答しないため最新でない鮮度に欠けた統計情報を使います)としました。
macOS のsetlocale()
がpostmaster内で不必要な追加スレッドを開始するときに警告するようにしました。
(Noah Misch)
/etc/passwd
が読めないときのlibpqの振る舞いを修正しました。
(Tom Lane)
PQsetdbLogin()
を実行するとき、libpqはOSユーザ名を確認しようとします。それは、ほとんどのUnixプラットフォームで/etc/passwd
の読み取りを伴います。
9.4時点では読み取り失敗をハードエラーとして扱っていましたが、アプリケーションが接続するデータベースロール名を提示しない場合のみ失敗にするという従来の振る舞いに戻しました。
このことは/etc/passwd
ファイルの無いchroot環境での運用を支援します。
psql特別変数の解析について一貫性を改善しました。 (Tom Lane)
ECHO_HIDDEN
とON_ERROR_ROLLBACK
に対してon
とoff
を異なる書き方(1
/0
など)で書けるようになります。
COMP_KEYWORD_CASE
、ECHO
、ECHO_HIDDEN
、HISTCONTROL
、ON_ERROR_ROLLBACK
、および、VERBOSITY
に対して解釈できない値には警告するようになります。
全ての特別変数の値について大文字小文字の区別なく受け付けるようになります。
これまでは大文字小文字の区別があるものと無いものが混在していました。
pg_dumpをイベントトリガーのコメントを失敗せずに扱うように修正しました。 (Tom Lane)
並列のpg_dumpで--serializable-deferrable
を使えるようにしました。
(Kevin Grittner)
pg_basebackup -x/-X
で作られたWALファイルが、スタンバイが昇格したときに再度アーカイブされることを防止しました。
(Andres Freund)
contrib/tablefunc
のconnectby()
で、予想外の問い合わせ結果(特にNULL)を安全に扱えるようにしました。
(Michael Paquier)
これまでconnectby()
はNULLのキー値に遭遇するとクラッシュしていました。現在はその行を出力しますが更なる再帰はしません。
Coverity静的コード解析からの多数の警告を一掃しました。 (Andres Freund, Tatsuo Ishii, Marko Kreen, Tom Lane, Michael Paquier)
ほとんどは表面的な変更ですが、一部は稀に起こりうるバグの修正で、メモリ不足で失敗した後に適切なエラーを出さずクラッシュする例があります。 セキュリティ問題は無いと考えられます。
configureのCFLAGS
環境変数で自動設定されるCFLAGS
を上書きできるようにしました。
(Tom Lane)
これまでは、configureは自発的に選択したスイッチをユーザ指定されたCFLAGS
文字列の末尾に追加していました。
ほとんどのコンパイラはスイッチを左から右に処理するため、このことはconfigureによる選択がユーザ指定を(競合する内容の場合には)上書きしていたことを意味します。
これは反対にしなければいけません。それで、ユーザの文字列を最初でなく最後に置くように修正しました。
pg_regressが成功して終了したら、一時インストールで作成したものを全て削除するようにしました。 (Tom Lane)
make check-world
では多数の一時インストール作成を必要とするため、これは、make check-world
実行におけるかなりのディスク使用量削減になります。
タイムゾーン省略形のリストにCST(China Standard Time)を追加しました。 (Tom Lane)
タイムゾーンデータファイルを、チリとメキシコの夏時間規則の変更がされ、アイスランドの歴史的変更が加わった tzdata release 2015a に更新しました。