Fadis

13万 件のツイート
新しいツイートを表示
プロフィール画像を開きます
フォロー
Fadis
@fadis_
組み込みから*NIXシステム、HPCまで、計算機をこよなく愛するゲームプログラマ。C++を関数型言語と間違えているタイプのC++er。遺伝的FM音源とかの人。 丼:@fadis@mstdn.jp 欲しい物リスト:amazon.co.jp/hz/wishlist/ls
大阪←→東京github.com/Fadis/2010年7月からTwitterを利用しています

Fadisさんのツイート

パッチは単純で、XDestroyWindow時の処理に破棄するウィンドウがCompositor Overlay Windowに登録されているかをチェックし、登録されていたらCompScreenRecに置かれたポインタをNULLにする。Compositor Overlay Windowを扱う関数は元々このポインタがNULLの場合正しく失敗するようになっている
3
このスレッドを表示
結果、Compositor Overlay Windowを明示的にXDestroyWindowすると、CompScreenRecに置かれたポインタが指している先の構造体が解放済みの状態になった。修正パッチの説明ではここから解放済みの領域に置かれたアドレスを使ってジャンプするまでの手順は説明されていない
このスレッドを表示
Compositor Overlay Windowは通常のウィンドウと同じ操作ができる為、XDestroyWindowで明示的に破棄できる。ウィンドウが破棄されると、Xサーバ側のウィンドウのリストからそのウィンドウへのポインタが削除されるが、この処理はCompositor Overlay Windowを指すポインタまでは見ていなかった
1
3
このスレッドを表示
Compositor Overlay Windowが解除されると、ウィンドウの参照カウントがデクリメントされ、参照が無くなるとウィンドウは破棄される。この為アプリケーションは通常Compositor Overlay Windowに登録したウィンドウの後始末を明示的に行う必要はない
1
3
このスレッドを表示
Compositor Overlay WindowはXcomposite拡張の機能の一つで、常に他のウィンドウより手前に表示されるウィンドウを作れるようにする。このウィンドウは専用の関数でスクリーンに登録、解除され、通常のウィンドウのリストとは別でスクリーンの構造体(CompScreenRec)に置かれたポインタで指されている
1
2
このスレッドを表示
この方法で実行される任意のコードはXサーバのユーザの権限で実行される事になる。Xサーバはグラフィックデバイスと入力デバイスを触れるユーザで実行される必要がある。行儀の良いディストリではそのようなグループに入った一般ユーザがXサーバを実行するが、雑なディストリではrootがXを実行している
1
3
このスレッドを表示
Xサーバの新しいローカル権限昇格脆弱性(CVE-2023-1393)について。一般ユーザ権限を持つ攻撃者はXサーバのUse-After-Freeを利用してXサーバを実行しているユーザの権限で任意の処理を実行できる。SSHでX転送をしている場合はSSHで接続できるリモートのユーザでもいける
1
28
このスレッドを表示
POSIXはこの状況について特に何も決まりが無く、LinuxもNetBSDもFreeBSDもPOSIXの要件を満たす状態だった。Linus氏は「Linuxの現状の振る舞いはありえんとして、NetBSDとFreeBSDの振る舞いはどちらも理解できる。NetBSDの方がより綺麗な仕様なので、LinuxはNetBSDに合わせよう」という方針を示した
57
このスレッドを表示
NetBSDは両方のフラグがセットされるとファイルの状態によらずEINVAL(お前は何を言っているんだ)を返すようになっていた。一方FreeBSDはNetBSDに近い動きをするが、ディレクトリが既にあった場合はディレクトリを開いてそのfdを返すようになっていた(CREATすべき状況ではないのでO_CREATを無視)
1
28
このスレッドを表示
そこで、両方のフラグがセットされた場合の振る舞いを、5.7より前の奇妙な振る舞いに戻すのではなく、もっと真っ当な振る舞いに変えようという提案がでてきた。この場合の真っ当な振る舞いとは何かを考える為に、他のOSの振る舞いが調べられた
1
18
このスレッドを表示
Linuxでは「ユーザ空間から見た振る舞いが以前と変わる(=互換性が壊れる)変更は、既存の物がどんなに気に入らなくてもダメ」が原則なので、この件は一応互換性が壊れるバグとして報告されたが、3年間誰もこの変化に気付かなかった事は、ここが変わっても誰も困らない可能性を示していた
1
37
このスレッドを表示
最近になって2020年にリリースされたLinux 5.7以降のカーネルでこの奇妙な振る舞いが壊れているのが見つかった。Linux 5.7からは両方のフラグがセットされ、ファイルが無かった場合にカーネルは新しい通常ファイルを作るが、そのfdを返さずにENOTDIR(ディレクトリじゃないからダメ)を返していた
1
16
このスレッドを表示
両方のフラグがセットされた場合のLinuxの実際の振る舞いは奇妙な物だった。指定されたパスに通常ファイルがあるとカーネルはENOTDIR(ディレクトリじゃないからダメ)と言い、ディレクトリがあるとEISDIR(ディレクトリだからダメ)と言い、ファイルが無いと通常ファイルを作ってそのfdを返した
1
20
このスレッドを表示
両方のフラグを同時に指定すると、意味的にはパスで指されたものは通常ファイルかつディレクトリである事を期待するというものになる。これを受け取ったカーネルがどう振る舞うべきかは自明ではない
1
14
このスレッドを表示
open時にO_CREATが指定されていると、カーネルは開こうとした通常ファイルが存在しなかったら新しい通常ファイルを作る。O_DIRECTORYが指定されていると、カーネルはパスで指定された物をディレクトリと見做して、ディレクトリを開こうとする
1
13
このスレッドを表示
この問題に対してLinus氏は互換性が壊れる問題に真剣に対応しないglibcにうんざりするとしつつも、カーネルだけではどうにも出来んからとりあえず小細工なしでカーネルの対応を入れて、カーネルに文句が殺到したら引っ込めよう、という方針を示した
28
このスレッドを表示
これらの問題はカーネルが更新された時に爆発する可能性が高い為、これらの古い環境を検知してシャドウスタックの有効化を無視する仕組みを用意しないとカーネルにバグ報告が殺到するぞ、という議論がなされている。しかし当のglibcはこの問題の為にSHSTKに代わるフラグを足す等の対応には消極的だった
1
13
このスレッドを表示
更に、C++の例外でcatchする位置までスタックが戻る処理は、スタックを書き換える操作なので、シャドウスタックが有効な場合特別の対応を要す。gccの現在の実装は初期のカーネルのAPI案に基づいている為、これが更新される前にシャドウスタックが有効な状態で例外が飛ぶとプロセスはクラッシュする
1
14
このスレッドを表示
これらのユーザ空間バイナリはカーネルとglibcが更新されると一斉に動かなくなる。正しい対応は「SHSTKフラグが正しく設定されるまでシャドウスタックが動く状態にするな」だが、glibcは一般に「ガンガンいこうぜ」で更新される為、カーネルを更新した瞬間問題が表面化する可能性が高い
1
16
このスレッドを表示
このフラグはカーネルのシャドウスタックの実装より先に実装されたため、幾つかのディストリでは既にSHSTKの付いたバイナリが提供されている。問題はこのフラグをつけても大丈夫かどうかを検証する術が無かった為、シャドウスタックで動かないソフトウェアにも雑にSHSTKフラグがセットされている事
1
14
このスレッドを表示
SHSTKが立っている実行可能バイナリからSHSTKが立っていない共有ライブラリをdlopenすると詰んでしまうが、そういう状況が起こりうるかどうかを含めて実行可能バイナリに保守的にフラグを設定することが期待されている
1
14
このスレッドを表示
gccに専用のフラグを渡すと、ELFバイナリの.note.gnu.propertyにシャドウスタックで問題を起こさないバイナリである事を表すSHSTKフラグが立つ。実行可能バイナリと全ての動的リンクライブラリにSHSTKが立っていたらglibc(のld.so)は上記のシステムコールをカーネルに投げる
1
13
このスレッドを表示
この為Linuxカーネルがユーザ空間シャドウスタックをサポートしていても、ユーザ空間から明示的にSYS_arch_prctlでARCH_SHSTK_ENABLEがなされない限り、シャドウスタックは使われないようになっている。glibcはmain関数に至る前にシャドウスタックが使えるか判断してこのシステムコールを投げる
1
15
このスレッドを表示
シャドウスタックは正常な処理としてスタックを書き換えるソフトウェアの実行も妨げてしまう。JITコンパイルやcheckpoint/restartを使うソフトウェアはよくスタックを書き換えて辻褄合わせをする。こうしたソフトウェアでは特別の対応が実装されない限りシャドウスタックは使えない
1
15
このスレッドを表示
シャドウスタックは戻りアドレス専用で、書き換える方法は極めて限られている為、スタック破壊で戻りアドレスを書き換えて任意のコードを実行しようとする攻撃者はシャドウスタックの値を変えられず、ret時に両者のアドレスの不一致が検知される事で攻撃者が指定したアドレスのコードの実行が防がれる
1
15
このスレッドを表示
シャドウスタックは新しめのx86_64 CPUの機能で、Return-oriented Programming(RoP)をハードウェアで防ぐ。シャドウスタックが有効な場合CPUはcall時に従来のスタックだけでなく、それとは独立したシャドウスタックにも戻りアドレスを積む。ret時には双方のスタックの戻りアドレスの一致を確認する
1
19
このスレッドを表示
Linux 6.4からユーザ空間シャドウスタックのAPIが使えるようになるらしい。Linux 6.4以上とシャドウスタックに対応するglibcの組み合わせで、ELFの.note.gnu.propertyにシャドウスタック可能フラグがセットされたバイナリはシャドウスタックを有効にし実行されるようになる lwn.net/Articles/92664
1
95
このスレッドを表示
Unrealのpost process materialでステンシルを読むと、全ての光源の分のステンシルが結合された状態でしか取れなかった為、著者は深度テスト無しで球を描き、その深度aと深度バッファの値bをピクセルシェーダで比較、bよりaが奥だったらフレームバッファに色を加算でブレンドする事で同等の結果を得た
このスレッドを表示
この点光源は光源の位置を中心とする球を背面カリング無しで描きステンシルを取る事で、明るくなっているべきピクセルを求めている。複数の光源に照らされる範囲はより明るく描かれる必要がある為、この手法は光源毎にステンシルを取る必要がある。明るさに段階を持たせる為に径の異なる複数の球を使う
このスレッドを表示

Twitterを使ってみよう

今すぐ登録して、タイムラインをカスタマイズしましょう。
Appleのアカウントで登録
アカウントを作成
アカウントを登録することにより、利用規約プライバシーポリシーCookieの使用を含む)に同意したとみなされます。
画像
画像
画像
画像
画像
画像

トレンド

いまどうしてる?

日本のトレンド
心肺停止
トレンドトピック: 厚切りジェイソン
スポーツ · トレンド
大谷の勝ち
3,730件のツイート
日本のトレンド
加藤さん
18,662件のツイート
日本のトレンド
デカヌチャンex
日本のトレンド
エイプリルフール
56,060件のツイート