ソースコードリーディング: shmdt(2)

shmdt(2) のソースコードリーディングを hiboma/hiboma に push した

github.com

モチベーション

shmdt(2) したアドレスで segmentation fault を起こす問題をリサーチしていた。man を呼んでも不明瞭な箇所があり、どんな実装か気になったので読んでいた

  • プロセスから見ると、shmdt(2) 済みのセグメントは munmap(2) したのと同等にみえてる感じになる
    • 該当アドレスの vm_area_struct が消されている
  • vm_area_struct の無いアドレスを 読み/書き/実行 しようとしたら segmentaion fault するよね

というあたりが解消された

感想文

読んだ感想としては

  • SysV 共有メモリセグメントの実装は、mm/mmap.c の実装を拝借しているのだな
  • 呼び出し階層が浅くて、他のシステムコールに比べて素朴に見える
    • struct vm_area_struct の扱い方のお勉強によさそう
    • ( 深追いして do_munmap を読んでいくとちょっと大変 )

といったところ

hiboma リポジトリとは?

ソースコード(主に Linux カーネル) や技術書を読んだ際の軌跡や、デバッグトラブルシューティングの履歴などを残しているリポジトリです。