Linuxカーネル内のパーザー
TOMOYO Linuxのパッチにはカーネル内に正規表現をパースするためのコードが含まれていて、その存在やあり方を回って散々議論しているようですが、正規表現とは異なるある種のバイト列やビット列をパースするコードがLinuxカーネルには含まれています。Linusはパーサーをカーネルに入れることが好きではないようですが、確実に存在します。幾つか挙げてみます。
- http://lxr.linux.no/linux+v2.6.28.3/lib/bitmap.c#L489
- なんだこれは?
- http://lxr.linux.no/linux+v2.6.28.3/arch/arm/kernel/setup.c#L415
- これもなんだろ?ARM用だけど。
- http://lxr.linux.no/linux+v2.6.28.3/include/linux/parser.h
- http://lxr.linux.no/linux+v2.6.28.3/lib/parser.c
- 上記の二つはファイルシステムに関する引数をパースするためのもので専ら"arg1=hogehoge"という形式だけをパースするものです。
- http://lxr.linux.no/linux+v2.6.28.3/drivers/acpi/namespace/nsparse.c
- AML nsparse
- http://lxr.linux.no/linux+v2.6.28.3/init/main.c#L507
- なんだっけ?ブート時の・・・
他にもLXRで"parse*"で検索すると、PPC向けのbisonで出力した何のためにあるのかよくわからないパーザーのソースや、ACPI Machine Language(AML)のパーサーもあります。ドライバーなどはビット列のパーサーが含まれていることが多いようです。他には、netfilterやNFSなども独自のパーサーを備えています。
目的に応じてそれぞれ独自の構文解析器を持たなくてはなりませんし、TOMOYO Linuxの正規表現はシェルやPOSIXのとは異なる独自の構文形式/表現形式ですが、ライブラリ化して(linux/lib、散々揉めた双方向リンクリストなどもある)、カーネル内でバグのない正規表現パーザーが利用できたら、色々楽になることがあるのではないかと思っています(某掲示板にも同じ意見がありました)。
あれ?netfilter(iptables)って正規表現使えなかった?パケットマッチングモジュールを指定できたよね?それってどこにおいてあるんだろう?いや勘違いか。netfilterのコアメンバー( Patrick McHardyやコアじゃないけどJames MorrisやRusty Russellなど)にiptablesで正規表現使うことある?とか尋ねたらどうなんだろ(多分、あるセキュリティ的な理由でバカにされるかもしれないけど)。
メモ: