nullにmprotect

例のBSD本にnull(address 0)の読み書きが禁止されている為に、nullポインタにアクセスするとSEGVが起こると書いて有りました。確かにそうですね。アマノジャクぶりを発揮してこんなのを試してみました。

int main(void)
{
    void *p = (void*)0;
    int r = mprotect(p, 4, PROT_READ | PROT_WRITE);
    assert(r >= 0);
}

結果はerrno == ENOMEMで失敗。カーネル側で弾かれているようです。vm_areaが見付からないのかな。