ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
Androidのmediaplayerが用いている、メディア用ライブラリーの一つ。
Andorid 2.2(Froyo)頃から導入された、Android用のメディアサービスである。
音楽と動画で用いられ、再生でも、録音・録画でも使われる。
複雑なシステムの一部を構成するほか、数多くのCODECに対応している影響からか不具合も多く、度々致命的なバグを出している。
libstagefrightのコード自体はEclair時代からあったとされるが、正式に導入されたのはFroyoからともGingerbreadからとも言われている。
当初はFFmpegの採用も視野にあったが、GPLなうえ、ライセンス違反ソフトの晒し上げなどという悪趣味な行為を働く代物だったため不採用となり、OpenCoreが採用された。そしてFroyoからはStagefrightになった。
2015(平成27)年夏、libstagefrightのバグが世界を震撼させた。
ANDROID bug 2件に計6件のCVEを含むバグは、JVNがJVNVU#92141772「Android Stagefright に複数の脆弱性」として報告している。
一つを除き、いずれも単純な範囲チェック漏れである。しかし、一つだけは想定を超えるものであった。
ANDROID-20139950のうち、CVE-2015-1538に対応する不具合である。
3ヶ所の修正があるが、次は、そのうちの1番目である。
mTimeToSampleCount = U32_AT(&header[4]); - uint64_t allocSize = mTimeToSampleCount * 2 * sizeof(uint32_t); + uint64_t allocSize = mTimeToSampleCount * 2 * (uint64_t)sizeof(uint32_t); if (allocSize > SIZE_MAX) { return ERROR_OUT_OF_RANGE; }
32ビットARM環境では、mTimeToSampleCountも、sizeofの返却値であるsize_t型も共に32ビットである。32ビット同士の積は32ビットを超えることもあるため、この式は「32ビット同士の積を64ビット変数に代入」が仮定され、uint64_t型で結果を得るようになっていた。
ところが、実際には、この式では意図した結果が得られなかった。C/C++においては、「32ビット同士」の積の解は「32ビット」で得られ、オーバーフロー分は切り捨てられる。その後に64ビットに拡張されるため得られる結果は誤ったものとなり、実際より小さな値が格納されることからその次のif文も成立せず、結果としてオーバーフローチェックをすり抜けてしまっていた。
結果を期待通り64ビット長で得るためには式中に一つ以上64ビット長が必要となるため、修正においては、sizeofの返却値をuint64_tでキャストして64ビット長としている。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます