<?xml version="1.0" encoding="UTF-8"?>

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns="http://purl.org/rss/1.0/"
>

<channel rdf:about="http://kumaneko-sakura.sblo.jp/">
<title>熊猫さくらのブログ</title>
<link>http://kumaneko-sakura.sblo.jp/</link>
<description>TOMOYO Linux 関連の Tips を紹介しています。コメントやトラックバックについては、スパム対策のため承認制にしていますが、スパムではないものは表示していますので、遠慮せずに書き込んでください。</description>
<dc:language>ja</dc:language>
<admin:generatorAgent rdf:resource="http://blog.sakura.ne.jp/" />
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://kumaneko-sakura.sblo.jp/article/191682468.html" />
<rdf:li rdf:resource="http://kumaneko-sakura.sblo.jp/article/191541768.html" />
<rdf:li rdf:resource="http://kumaneko-sakura.sblo.jp/article/191473283.html" />
<rdf:li rdf:resource="http://kumaneko-sakura.sblo.jp/article/191342288.html" />
<rdf:li rdf:resource="http://kumaneko-sakura.sblo.jp/article/191040904.html" />
<rdf:li rdf:resource="http://kumaneko-sakura.sblo.jp/article/190839180.html" />
<rdf:li rdf:resource="http://kumaneko-sakura.sblo.jp/article/190763241.html" />
<rdf:li rdf:resource="http://kumaneko-sakura.sblo.jp/article/190533135.html" />
<rdf:li rdf:resource="http://kumaneko-sakura.sblo.jp/article/190406389.html" />
<rdf:li rdf:resource="http://kumaneko-sakura.sblo.jp/article/190370131.html" />
<rdf:li rdf:resource="http://kumaneko-sakura.sblo.jp/article/189842750.html" />
<rdf:li rdf:resource="http://kumaneko-sakura.sblo.jp/article/188148326.html" />
<rdf:li rdf:resource="http://kumaneko-sakura.sblo.jp/article/188072350.html" />
<rdf:li rdf:resource="http://kumaneko-sakura.sblo.jp/article/187369886.html" />
<rdf:li rdf:resource="http://kumaneko-sakura.sblo.jp/article/187355182.html" />
</rdf:Seq>
</items>
</channel>

<item rdf:about="http://kumaneko-sakura.sblo.jp/article/191682468.html">
<link>http://kumaneko-sakura.sblo.jp/article/191682468.html</link>
<title>いつの間にか syzkaller 内にダンジョンが追加されていた件</title>
<description>Linux カーネル 7.0 が 2026/4/13 にリリースされ、 syzbot が報告した不具合の修正件数も７０００件を超えました。５０００件が７０００件になるまでに約２年、新しく混入した不具合が早期に修正されるようになってきたものの、古くから存在している不具合はなかなか修正されずに残っているようです。右上の隅を見ると、「城」のアイコンが追加されていました。なんだろうと思ってクリックしてみたら、ダンジョンに飛ばされました。どうやら不具合の修正に貢献した開発者をランキング..</description>
<dc:subject>Linux</dc:subject>
<dc:creator>熊猫さくら</dc:creator>
<dc:date>2026-04-16T22:09:08+09:00</dc:date>
<content:encoded><![CDATA[
<P>Linux カーネル 7.0 が 2026/4/13 にリリースされ、 syzbot が報告した不具合の修正件数も７０００件を超えました。<BR>
<A HREF="http://kumaneko-sakura.sblo.jp/article/190763241.html">５０００件が７０００件になるまでに約２年</A>、新しく混入した不具合が早期に修正されるようになってきたものの、古くから存在している不具合はなかなか修正されずに残っているようです。</P>

<a href="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/image/syz-upstream.png" target="_blank"><img border="0" alt="syz-upstream.png" src="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/image/syz-upstream-thumbnail2.png" width="308" height="320"></a>

<P>右上の隅を見ると、「城」のアイコンが追加されていました。なんだろうと思ってクリックしてみたら、ダンジョンに飛ばされました。</P>

<a href="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/image/syz-dungeon.png" target="_blank"><img border="0" alt="syz-dungeon.png" src="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/image/syz-dungeon-thumbnail2.png" width="308" height="320"></a>

<P>どうやら<A HREF="https://github.com/google/syzkaller/blob/master/docs/syz-dungeon.md">不具合の修正に貢献した開発者をランキング形式で表示しているページ</A>で、熊猫は２位だそうです。</P>

<P>でも、ダンジョンという名前が付いているからには、ゲーム画面っぽい画像の部分をクリックするとミニゲームが始まるのだろうか・・・と思ったら違いました。今後、実装されたりするのかな？（笑）</P>
<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="http://kumaneko-sakura.sblo.jp/article/191541768.html">
<link>http://kumaneko-sakura.sblo.jp/article/191541768.html</link>
<title>TOMOYO Linux の公開から２０年が経過しました。</title>
<description>熊猫さくらはセキュリティとコンプライアンスに潰されました。世の中の流れとして、クレームや訴訟が発生しないように振る舞うこと（契約内容に定められていることだけを実施すること）が重視されるようになり、（熊猫の得意分野である）セーフコーディングスキルや見逃されている問題点を解決するための能力（契約内容として定めることができない内容）は価値として認識されなくなったようです。誰もが何かの専門家になることを要求され、担当外のことに対して意見を出すことが不可能になり、「取りこぼし」に起因し..</description>
<dc:subject>TOMOYO Linux</dc:subject>
<dc:creator>熊猫さくら</dc:creator>
<dc:date>2025-11-11T17:13:16+09:00</dc:date>
<content:encoded><![CDATA[
<p><img src="https://I-love.SAKURA.ne.jp/cg/RELEASE.JPG" alt="RELEASE.JPG" width="300" height="400"></p>

<p>熊猫さくらはセキュリティとコンプライアンスに潰されました。<p>

<p>世の中の流れとして、クレームや訴訟が発生しないように振る舞うこと（契約内容に定められていることだけを実施すること）が重視されるようになり、（熊猫の得意分野である）セーフコーディングスキルや見逃されている問題点を解決するための能力（契約内容として定めることができない内容）は価値として認識されなくなったようです。</p>

<p>誰もが何かの専門家になることを要求され、担当外のことに対して意見を出すことが不可能になり、「取りこぼし」に起因したシステム障害や問題を解決することができなくなりました。（世の中がＡＰＩ化されてしまい、ＡＰＩで対応できないことは諦めろと言われているような感じです。）熊猫が扱うのはサポート窓口では対応してくれない（ので、問い合わせを行う側がスキルを持っていないと先へ進めない）「取りこぼし」の領域であるため、特定の製品名を使って認知してもらうこともできません。</p>

<p>専門性を追求しておきながら属人性の排除も追及しているようで、チームメンバーの自己紹介もありません。契約が締結されて契約期間が開始されるまで詳細な内容が共有されないため、熊猫に向いている内容かどうかも判断できません。誰がどんなスキルを持っているのかさえ知らないまま、何をしたいプロジェクトなのかを知ることもできないまま、契約でガチガチに縛られたプロジェクトが進んでいきます。当然、相手の経歴や技術レベルも知りようがないので、話が通じないことが増えました。「ガチャ」化が進んでいます。</p>

<p>２０年かけて、ようやく Fedora でも TOMOYO Linux が使えるようになりました。しかし、 RHEL ではまだ使えません。 RHEL で使えるようにするには、 RHEL のサブスクリプションを持っているプロジェクト側から要望を出してもらうことが必要なのですが、とあるプロジェクトに熊猫が参画してみたところ、強制アクセス制御の導入を検討するどころか、任意アクセス制御さえもまともに使えないというのが現実でした。マニュアルに沿って対応するオペレータしかおらず、内容を正確に表現するスキルがないことで、マニュアルでは対応できない想定外の事象が発生した際に、専門家による支援を有効活用できていないことが判りました。</p>

<p>現在でも熊猫は、ブラックボックス化した RHEL システムの解析のために TOMOYO Linux を使っていますが、熊猫が TOMOYO Linux カーネルをインストールして解析を行ったプロジェクトの関係者からは TOMOYO Linux は異物扱いされており、環境差分によるトラブル予防という理由でアンインストールされてしまう対象のままです。異物扱いされないようにするために関係者と話をする手段も存在しないため、先へ進むことができません。（ TOMOYO Linux カーネルをアンインストールせずに RHEL カーネルで運用することは、設定ファイルのバックアップを名前を変えてサーバ内に残しておくことと大差ないのですが、分業化が進んでしまってＯＳレベルの知識を共有することができなくなった現在では、それを伝えることができないのです。）</p>

<p>ＯＳＳ開発の世界では、誰でも意見を出すことができます。しかし、そういう経験をしたことがない人たちは、専門化／分業化が進みすぎて、数分以内の説明で理解できるような単純な内容しか扱えないようになり、落とし穴に対応することができる能力がどんどん失われているのが気がかりです。基本情報技術者やベンダ認定資格とは違う、認識する力／考える力／工夫する力の訓練をする（新入社員向けではない）研修や資格って無いものでしょうかねぇ？</p><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="http://kumaneko-sakura.sblo.jp/article/191473283.html">
<link>http://kumaneko-sakura.sblo.jp/article/191473283.html</link>
<title>「屋内用蚊取り」がバージョンアップしました。</title>
<description>実演動画１実演動画２作り方１００均で売っている味噌容器 (*1)と水切りネットを用意します。まず、味噌容器の蓋を外し、底の部分を切り取ります。 (*2)次に、蓋の代わりに水切りネットを被せます。 (*3)完成するとこんな感じです。虫取り網で蝶々を捕獲するのと同じ要領で、蚊を捕獲します。捕獲したら、水切りネットの上から蚊を潰します。うまく潰せるのか疑問に思われる方もいると思いますので、実演動画１実演動画２を用意しました。 (*4)壁などの平面に既に止まっている状態であれば成功率..</description>
<dc:subject>その他</dc:subject>
<dc:creator>熊猫さくら</dc:creator>
<dc:date>2025-09-01T00:00:00+09:00</dc:date>
<content:encoded><![CDATA[
<p><div class="video-link"><video controls="controls" width="300" height="285">このブラウザでは再生できません。<source src="http://blog.sakura.ne.jp/pages/tools/download/play?d=b1d1f412acc330c189093661104ec365&u=http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/katori-demo.mp4"></video><br>再生できない場合、ダウンロードは&#x1F3A5;<a href="http://blog.sakura.ne.jp/pages/tools/download/play?d=b1d1f412acc330c189093661104ec365&u=http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/katori-demo.mp4">こちら</a></div><div class="video-link"><video controls="controls" width="300" height="285">このブラウザでは再生できません。<source src="http://blog.sakura.ne.jp/pages/tools/download/play?d=13abdd9bcb711d4ae4a0adfec394799b&u=http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/katori-demo2.mp4"></video><br>再生できない場合、ダウンロードは&#x1F3A5;<a href="http://blog.sakura.ne.jp/pages/tools/download/play?d=13abdd9bcb711d4ae4a0adfec394799b&u=http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/katori-demo2.mp4">こちら</a></div></p>

<h1>作り方</h1>

<p>１００均で売っている<a href="https://item.rakuten.co.jp/hyakuemon/sana-a5643-1/" target="_blank">味噌容器 (*1)</a>と<a href="https://jp.daisonet.com/products/4550480298061" target="_blank">水切りネット</a>を用意します。</p>

<p>まず、味噌容器の蓋を外し、底の部分を切り取ります。 (*2)<br>
<a href="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/miso-youki.jpg" target="_blank"><img border="0" alt="味噌容器" src="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/miso-youki-thumbnail2.jpg" width="320" height="310"></a></p>

<p>次に、蓋の代わりに水切りネットを被せます。 (*3)<br>
<a href="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/mizukiri-net.jpg" target="_blank"><img border="0" alt="水切りネット" src="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/mizukiri-net-thumbnail2.jpg" width="320" height="310"></a></p>

<p>完成するとこんな感じです。<br>
<a href="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/captor.jpg" target="_blank"><img border="0" alt="完成図" src="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/captor-thumbnail2.jpg" width="320" height="163"></a></p>

<p>虫取り網で蝶々を捕獲するのと同じ要領で、蚊を捕獲します。<br>
<a href="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/usage1.jpg" target="_blank"><img border="0" alt="使い方" src="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/usage1-thumbnail2.jpg" width="320" height="312"></a><br><a href="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/usage2.jpg" target="_blank"><img border="0" alt="使い方" src="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/usage2-thumbnail2.jpg" width="261" height="320"></a></p>

<p>捕獲したら、水切りネットの上から蚊を潰します。うまく潰せるのか疑問に思われる方もいると思いますので、<a href="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/katori-demo.mp4" target="_blank">実演動画１</a><a href="http://i-love.sakura.ne.jp/sblo_files/kumaneko-sakura/katori/katori-demo2.mp4" target="_blank">実演動画２</a>を用意しました。 (*4)</p>

<p>壁などの平面に既に止まっている状態であれば成功率はほぼ１００％ですので、屋内では蚊をやっつけるという用途では殺虫剤が不要になりました。<br>
この筒の中または水切りネットの中で潰せば、平面が汚れることもありません。プラスチックと水切りネットという組合せですので、水洗いして何度でも使えます。</p>

<h2>補足</h2>

<p>*1 <a href="http://kumaneko-sakura.sblo.jp/article/190533135.html" target="_blank">２年前</a>は四角形の味噌容器で試作した後に円形のケーキ型を選びました。
しかし、蚊の位置を確認するには透明なほうが便利だったので、透明な筒を探した結果、円形の味噌容器へと戻ってきました。（笑）</p>

<p>*2: 蓋も底もない土管のような形の透明な円筒を２年間探し続けたのですが、既製品としては見つかりませんでした。底の部分を切り取るのが面倒だという人は、例えば <a href="https://plasticcase.info/" target="_blank">https://plasticcase.info/</a> で製造してもらうという方法があるようです。</p>

<p>*3: 味噌容器の直径が排水口の直径とほぼ一致していることが重要です。また、味噌容器の胴体が長めなので、水切りネットもできるだけ長いものが良いです。</p>

<p>*4: 撮影する役（知世ちゃん）と捕獲する役（桜ちゃん）を一人でこなすというのは熊猫には難しすぎるので、捕獲する部分の動画は用意していません。ご了承ください。</p><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="http://kumaneko-sakura.sblo.jp/article/191342288.html">
<link>http://kumaneko-sakura.sblo.jp/article/191342288.html</link>
<title>TOMOYO のメーリングリストを SourceForge.net へ引っ越しました。</title>
<description>今後も購読を希望される方は https://sourceforge.net/projects/tomoyo/lists/tomoyo-users_ja から再登録をお願いします。https://forest.watch.impress.co.jp/docs/serial/yajiuma/1670651.html は見ましたが、あっという間に年度を跨いでしまったようで、既存の購読者に周知したり、メーリングリストの設定内容を引き継いだりするタイミングを逃してしまいました。（泣）</description>
<dc:subject>TOMOYO Linux</dc:subject>
<dc:creator>熊猫さくら</dc:creator>
<dc:date>2025-05-05T22:40:32+09:00</dc:date>
<content:encoded><![CDATA[
<p>今後も購読を希望される方は <a href="https://sourceforge.net/projects/tomoyo/lists/tomoyo-users_ja" target="_blank">https://sourceforge.net/projects/tomoyo/lists/tomoyo-users_ja</a> から再登録をお願いします。</p>

<p><a href="https://forest.watch.impress.co.jp/docs/serial/yajiuma/1670651.html" target="_blank">https://forest.watch.impress.co.jp/docs/serial/yajiuma/1670651.html</a> は見ましたが、あっという間に年度を跨いでしまったようで、既存の購読者に周知したり、メーリングリストの設定内容を引き継いだりするタイミングを逃してしまいました。（泣）</p>
<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="http://kumaneko-sakura.sblo.jp/article/191040904.html">
<link>http://kumaneko-sakura.sblo.jp/article/191040904.html</link>
<title>glibc さんの裏金疑惑！？</title>
<description>OOM Killer 対策として消費メモリを削減する方法を探していたら、驚きの情報を見つけましたので、Ｃ言語で検証してみました。https://man7.org/linux/man-pages/man3/mallopt.3.html で説明されているように、glibc には dynamic mmap threshold という仕組みが実装されています。この仕組みが有効になっている場合、メモリの割り当て／解放を繰り返すプログラムを実行した際に、一部のメモリがＯＳに返却されなくな..</description>
<dc:subject>Linux</dc:subject>
<dc:creator>熊猫さくら</dc:creator>
<dc:date>2024-08-29T19:33:00+09:00</dc:date>
<content:encoded><![CDATA[
<p>OOM Killer 対策として消費メモリを削減する方法を探していたら、<a href="https://note.com/hroy/n/n6ac47a8730f0" target="_blank">驚きの情報</a>を見つけましたので、Ｃ言語で検証してみました。</p>

<p><a href="https://man7.org/linux/man-pages/man3/mallopt.3.html" target="_blank">https://man7.org/linux/man-pages/man3/mallopt.3.html</a> で説明されているように、
glibc には dynamic mmap threshold という仕組みが実装されています。この仕組みが有効になっている場合、メモリの割り当て／解放を繰り返すプログラムを実行した際に、一部のメモリがＯＳに返却されなくなるという事象が発生します。これは、長期間動作を継続するプログラムにとって、無駄なメモリ消費の原因となることがあります。</p>

<h2>実行結果例１：</h2>

<p>物理メモリを６ＧＢ以上搭載した RHEL8 以降の環境で、以下のように約４ＧＢのメモリの割り当て／解放を繰り返すプログラムを実行した場合、ＯＳから割り当てたメモリの約８割がＯＳに返却されないまま（再割り当て要求に備えて glibc が保持したまま）の状態が発生することが観測できます。</p>

<pre>
--------------------------------------------------------------------------------
[root@localhost ~]# uname -r
4.18.0-80.el8.x86_64
[root@localhost ~]# ls -l /lib64/libc.so.6
lrwxrwxrwx 1 root root 12 May 14  2019 /lib64/libc.so.6 -&gt; libc-2.28.so
[root@localhost ~]# gcc -Wall -O2 -x c - -o rss &lt;&lt; EOF
&gt; #include &lt;stdio.h&gt;
&gt; #include &lt;string.h&gt;
&gt; #include &lt;stdlib.h&gt;
&gt; #include &lt;malloc.h&gt;
&gt;
&gt; static void show_rss(void)
&gt; {
&gt;         static FILE *fp = NULL;
&gt;         static char buffer[4096];
&gt;         char *cp;
&gt;         unsigned long rss;
&gt;         if (!fp) {
&gt;                 fp = fopen("/proc/self/status", "r");
&gt;                 if (!fp)
&gt;                         return;
&gt;         }
&gt;         rewind(fp);
&gt;         buffer[fread(buffer, 1, sizeof(buffer) - 1, fp)] = 0;
&gt;         cp = strstr(buffer, "VmRSS:");
&gt;         if (cp &amp;&amp; sscanf(cp + 6, "%lu", &amp;rss) == 1)
&gt;                 printf("\tRSS: %lu KB\n", rss);
&gt; }
&gt;
&gt; int main(int argc, char *argv[])
&gt; {
&gt;         static char *buf[256];
&gt;         int i, j, k;
&gt;         srand(0);
&gt;         for (k = 0; k &lt; 20; k++) {
&gt;                 unsigned long sum = 0;
&gt;                 for (i = 0; i &lt; 256; i++) {
&gt;                         unsigned int size = (random() % 8192) * 4096;
&gt;                         char *cp = malloc(size);
&gt;                         if (!cp)
&gt;                                 return 1;
&gt;                         for (j = 0; j &lt; size; j += 4096)
&gt;                                 cp[j] = 1;
&gt;                         sum += size;
&gt;                         buf[i] = cp;
&gt;                 }
&gt;                 printf("%d\t+%lu KB\n", k, sum / 1024);
&gt;                 show_rss();
&gt;                 for (i = 0; i &lt; 256; i++)
&gt;                         free(buf[i]);
&gt;                 printf("\t-%lu KB\n", sum / 1024);
&gt;                 if (argc &gt; 1)
&gt;                         malloc_trim(0);
&gt;                 show_rss();
&gt;         }
&gt;         return 0;
&gt; }
&gt; EOF
[root@localhost ~]# ./rss
0       +4122392 KB
        RSS: 4123292 KB
        -4122392 KB
        RSS: 1380 KB
1       +4182160 KB
        RSS: 4183300 KB
        -4182160 KB
        RSS: 1508 KB
2       +4130460 KB
        RSS: 4131836 KB
        -4130460 KB
        RSS: 1508 KB
3       +4241984 KB
        RSS: 4243208 KB
        -4241984 KB
        RSS: 1508 KB
4       +4198020 KB
        RSS: 4199160 KB
        -4198020 KB
        RSS: 1508 KB
5       +4392688 KB
        RSS: 4393868 KB
        -4392688 KB
        RSS: 1508 KB
6       +4246196 KB
        RSS: 4247432 KB
        -4246196 KB
        RSS: 3407164 KB
7       +4039140 KB
        RSS: 4040608 KB
        -4039140 KB
        RSS: 3407164 KB
8       +4346760 KB
        RSS: 4348884 KB
        -4346760 KB
        RSS: 3407164 KB
9       +4369996 KB
        RSS: 4371692 KB
        -4369996 KB
        RSS: 3407164 KB
10      +3937740 KB
        RSS: 3939848 KB
        -3937740 KB
        RSS: 3407164 KB
11      +4044560 KB
        RSS: 4046120 KB
        -4044560 KB
        RSS: 3407164 KB
12      +4193628 KB
        RSS: 4196104 KB
        -4193628 KB
        RSS: 3407164 KB
13      +4061028 KB
        RSS: 4062484 KB
        -4061028 KB
        RSS: 3407164 KB
14      +4529360 KB
        RSS: 4531736 KB
        -4529360 KB
        RSS: 3407164 KB
15      +4101504 KB
        RSS: 4102856 KB
        -4101504 KB
        RSS: 3407164 KB
16      +4254812 KB
        RSS: 4257280 KB
        -4254812 KB
        RSS: 3407164 KB
17      +4335764 KB
        RSS: 4339976 KB
        -4335764 KB
        RSS: 3407164 KB
18      +4118404 KB
        RSS: 4119636 KB
        -4118404 KB
        RSS: 3407164 KB
19      +4049376 KB
        RSS: 4050776 KB
        -4049376 KB
        RSS: 3407164 KB
--------------------------------------------------------------------------------
</pre>

<h2>実行結果例２：</h2>

<p><a href="https://man7.org/linux/man-pages/man3/malloc_trim.3.html" target="_blank">https://man7.org/linux/man-pages/man3/malloc_trim.3.html</a> で説明されている malloc_trim() という関数を呼び出すことでＯＳに返却可能なメモリを返却することが可能になります。しかし、ソースコードに対する改修が必要となるため簡単に採用できるとは限りません。</p>

<pre>
--------------------------------------------------------------------------------
[root@localhost ~]# ./rss 1
0       +4122392 KB
        RSS: 4123356 KB
        -4122392 KB
        RSS: 1376 KB
1       +4182160 KB
        RSS: 4183280 KB
        -4182160 KB
        RSS: 1376 KB
2       +4130460 KB
        RSS: 4131756 KB
        -4130460 KB
        RSS: 1376 KB
3       +4241984 KB
        RSS: 4243340 KB
        -4241984 KB
        RSS: 1376 KB
4       +4198020 KB
        RSS: 4199232 KB
        -4198020 KB
        RSS: 1376 KB
5       +4392688 KB
        RSS: 4394072 KB
        -4392688 KB
        RSS: 1376 KB
6       +4246196 KB
        RSS: 4247444 KB
        -4246196 KB
        RSS: 1380 KB
7       +4039140 KB
        RSS: 4040316 KB
        -4039140 KB
        RSS: 1380 KB
8       +4346760 KB
        RSS: 4348104 KB
        -4346760 KB
        RSS: 1380 KB
9       +4369996 KB
        RSS: 4371196 KB
        -4369996 KB
        RSS: 1380 KB
10      +3937740 KB
        RSS: 3939036 KB
        -3937740 KB
        RSS: 1380 KB
11      +4044560 KB
        RSS: 4045792 KB
        -4044560 KB
        RSS: 1380 KB
12      +4193628 KB
        RSS: 4194892 KB
        -4193628 KB
        RSS: 1380 KB
13      +4061028 KB
        RSS: 4062356 KB
        -4061028 KB
        RSS: 1380 KB
14      +4529360 KB
        RSS: 4530592 KB
        -4529360 KB
        RSS: 1380 KB
15      +4101504 KB
        RSS: 4102700 KB
        -4101504 KB
        RSS: 1380 KB
16      +4254812 KB
        RSS: 4256008 KB
        -4254812 KB
        RSS: 1380 KB
17      +4335764 KB
        RSS: 4337904 KB
        -4335764 KB
        RSS: 1380 KB
18      +4118404 KB
        RSS: 4119732 KB
        -4118404 KB
        RSS: 1380 KB
19      +4049376 KB
        RSS: 4050680 KB
        -4049376 KB
        RSS: 1380 KB
--------------------------------------------------------------------------------
</pre>

<h2>実行結果例３：</h2>

<p>malloc_trim() を呼び出すことができない場合には、 dynamic mmap threshold を無効化するための環境変数（ MALLOC_TRIM_THRESHOLD_ MALLOC_TOP_PAD_  MALLOC_MMAP_THRESHOLD_ MALLOC_MMAP_MAX_ の内の１個以上）を設定することで緩和する（ＯＳに返却されないままとなる量を削減する）ことができます。</p>

<pre>
--------------------------------------------------------------------------------
[root@localhost ~]# MALLOC_TRIM_THRESHOLD_=131072 MALLOC_MMAP_THRESHOLD_=131072 ./rss
0       +4122392 KB
        RSS: 4123480 KB
        -4122392 KB
        RSS: 1476 KB
1       +4182160 KB
        RSS: 4183540 KB
        -4182160 KB
        RSS: 1476 KB
2       +4130460 KB
        RSS: 4131716 KB
        -4130460 KB
        RSS: 1476 KB
3       +4241984 KB
        RSS: 4243208 KB
        -4241984 KB
        RSS: 1564 KB
4       +4198020 KB
        RSS: 4199580 KB
        -4198020 KB
        RSS: 1564 KB
5       +4392688 KB
        RSS: 4394228 KB
        -4392688 KB
        RSS: 1564 KB
6       +4246196 KB
        RSS: 4247716 KB
        -4246196 KB
        RSS: 1564 KB
7       +4039140 KB
        RSS: 4040616 KB
        -4039140 KB
        RSS: 1564 KB
8       +4346760 KB
        RSS: 4348128 KB
        -4346760 KB
        RSS: 1564 KB
9       +4369996 KB
        RSS: 4371344 KB
        -4369996 KB
        RSS: 1564 KB
10      +3937740 KB
        RSS: 3939268 KB
        -3937740 KB
        RSS: 1564 KB
11      +4044560 KB
        RSS: 4045940 KB
        -4044560 KB
        RSS: 1584 KB
12      +4193628 KB
        RSS: 4195188 KB
        -4193628 KB
        RSS: 1584 KB
13      +4061028 KB
        RSS: 4062456 KB
        -4061028 KB
        RSS: 1584 KB
14      +4529360 KB
        RSS: 4530728 KB
        -4529360 KB
        RSS: 1584 KB
15      +4101504 KB
        RSS: 4102740 KB
        -4101504 KB
        RSS: 1604 KB
16      +4254812 KB
        RSS: 4256256 KB
        -4254812 KB
        RSS: 1604 KB
17      +4335764 KB
        RSS: 4337368 KB
        -4335764 KB
        RSS: 1604 KB
18      +4118404 KB
        RSS: 4119776 KB
        -4118404 KB
        RSS: 1604 KB
19      +4049376 KB
        RSS: 4050732 KB
        -4049376 KB
        RSS: 1604 KB
--------------------------------------------------------------------------------
</pre>

<h2>実行結果例４：</h2>

<p>この挙動は RHEL7 以前の環境でもある程度再現するようです。以下のように約９６ＭＢのメモリの割り当て／解放を繰り返すプログラムを実行した場合、約６３ＭＢがＯＳに返却されないままの状態が発生することが観測できます。ＧＢレベルでの差異ではないので見逃してしまうかもしれませんが、 malloc_trim() を呼び出すように修正したり環境変数を指定することにより緩和するという対処は有効なようです。</p>

<pre>
--------------------------------------------------------------------------------
[root@localhost ~]# uname -r
2.6.32-71.el6.x86_64
[root@localhost ~]# ls -l /lib64/libc.so.6
lrwxrwxrwx. 1 root root 12 Aug 18 19:13 /lib64/libc.so.6 -&gt; libc-2.12.so
[root@localhost ~]# gcc -Wall -O2 -x c - -o rss &lt;&lt; EOF
&gt; #include &lt;stdio.h&gt;
&gt; #include &lt;string.h&gt;
&gt; #include &lt;stdlib.h&gt;
&gt; #include &lt;malloc.h&gt;
&gt;
&gt; static void show_rss(void)
&gt; {
&gt;         static FILE *fp = NULL;
&gt;         static char buffer[4096];
&gt;         char *cp;
&gt;         unsigned long rss;
&gt;         if (!fp) {
&gt;                 fp = fopen("/proc/self/status", "r");
&gt;                 if (!fp)
&gt;                         return;
&gt;         }
&gt;         rewind(fp);
&gt;         buffer[fread(buffer, 1, sizeof(buffer) - 1, fp)] = 0;
&gt;         cp = strstr(buffer, "VmRSS:");
&gt;         if (cp &amp;&amp; sscanf(cp + 6, "%lu", &amp;rss) == 1)
&gt;                 printf("\tRSS: %lu KB\n", rss);
&gt; }
&gt;
&gt; int main(int argc, char *argv[])
&gt; {
&gt;         static char *buf[3];
&gt;         int i, j, k;
&gt;         srand(0);
&gt;         for (k = 28; k &lt;= 32; k++) {
&gt;                 unsigned long sum = 0;
&gt;                 for (i = 0; i &lt; 3; i++) {
&gt;                         unsigned int size = (k + i) * 1048576 - (random() % 16) * 4096;
&gt;                         char *cp = malloc(size);
&gt;                         if (!cp)
&gt;                                 return 1;
&gt;                         for (j = 0; j &lt; size; j += 4096)
&gt;                                 cp[j] = 1;
&gt;                         sum += size;
&gt;                         buf[i] = cp;
&gt;                 }
&gt;                 printf("%d\t+%lu KB\n", k, sum / 1024);
&gt;                 show_rss();
&gt;                 for (i = 0; i &lt; 3; i++)
&gt;                         free(buf[i]);
&gt;                 printf("\t-%lu KB\n", sum / 1024);
&gt;                 if (argc &gt; 1)
&gt;                         malloc_trim(0);
&gt;                 show_rss();
&gt;         }
&gt;         return 0;
&gt; }
&gt; EOF
[root@localhost ~]# ./rss
28      +89000 KB
        RSS: 89480 KB
        -89000 KB
        RSS: 520 KB
29      +92084 KB
        RSS: 92604 KB
        -92084 KB
        RSS: 30208 KB
30      +95108 KB
        RSS: 95632 KB
        -95108 KB
        RSS: 31204 KB
31      +98168 KB
        RSS: 98692 KB
        -98168 KB
        RSS: 64944 KB
32      +101312 KB
        RSS: 133496 KB
        -101312 KB
        RSS: 64944 KB
[root@localhost ~]# ./rss 1
28      +89000 KB
        RSS: 89476 KB
        -89000 KB
        RSS: 520 KB
29      +92084 KB
        RSS: 92604 KB
        -92084 KB
        RSS: 524 KB
30      +95108 KB
        RSS: 95632 KB
        -95108 KB
        RSS: 524 KB
31      +98168 KB
        RSS: 98692 KB
        -98168 KB
        RSS: 524 KB
32      +101312 KB
        RSS: 101836 KB
        -101312 KB
        RSS: 524 KB
[root@localhost ~]# MALLOC_TRIM_THRESHOLD_=131072 MALLOC_MMAP_THRESHOLD_=131072 ./rss
28      +89000 KB
        RSS: 89500 KB
        -89000 KB
        RSS: 528 KB
29      +92084 KB
        RSS: 92612 KB
        -92084 KB
        RSS: 528 KB
30      +95108 KB
        RSS: 95636 KB
        -95108 KB
        RSS: 528 KB
31      +98168 KB
        RSS: 98696 KB
        -98168 KB
        RSS: 528 KB
32      +101312 KB
        RSS: 101840 KB
        -101312 KB
        RSS: 528 KB
--------------------------------------------------------------------------------
</pre>
<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="http://kumaneko-sakura.sblo.jp/article/190839180.html">
<link>http://kumaneko-sakura.sblo.jp/article/190839180.html</link>
<title>TOMOYO/AKARI/CaitSith プロジェクトを SourceForge.net へ引っ越しました。</title>
<description>綱渡り状態が続いていた OSDN.jp ですが、全然復活の兆しが見えないので、木之本桜ちゃんの誕生日である今日、引っ越しのアナウンスをしました。熊猫さくらは、高校１年生の時にプログラミングに出会ったので、プログラミング歴が３０年となりました。セキュリティ分野かつうっかりミスが致命傷となるＣ言語＋カーネルという世界で過ごしてきたので、熊猫さくらは注意深いほうだと思っていたのですが、前回の投稿で「そもそも自分が担当している領域での不具合はほとんど存在しない」と言ってから１か月も経..</description>
<dc:subject>TOMOYO Linux</dc:subject>
<dc:creator>熊猫さくら</dc:creator>
<dc:date>2024-04-01T19:30:13+09:00</dc:date>
<content:encoded><![CDATA[
<p>綱渡り状態が続いていた OSDN.jp ですが、全然復活の兆しが見えないので、木之本桜ちゃんの誕生日である今日、引っ越しの<a href="https://osdn.net/projects/tomoyo/lists/archive/users/2024-April/001030.html">アナウンス</a>をしました。</p>

<p>熊猫さくらは、高校１年生の時にプログラミングに出会ったので、プログラミング歴が３０年となりました。<br>
セキュリティ分野かつうっかりミスが致命傷となるＣ言語＋カーネルという世界で過ごしてきたので、熊猫さくらは注意深いほうだと思っていたのですが、<a href="http://kumaneko-sakura.sblo.jp/article/190763241.html">前回の投稿</a>で「そもそも自分が担当している領域での不具合はほとんど存在しない」と言ってから１か月も経たないうちに、ファジングテストにより不具合が報告されてしまいました。はうぅ～。</p>
<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="http://kumaneko-sakura.sblo.jp/article/190763241.html">
<link>http://kumaneko-sakura.sblo.jp/article/190763241.html</link>
<title>syzbot が発見した Linux カーネルの不具合の内、修正されたことが報告された件数が２／２に５０００件になりました。</title>
<description>今回も簡単に集計してみました。4000 件時点では 511 人の開発者により 2831 個のパッチが適用されたのに対して、 5000 件時点では 605 人の開発者により 3620 個のパッチが適用されました。Eric Dumazet さんは 1000 件中 96 件を修正して、１位を独走中です。熊猫は 1000 件中 33 件を修正して、現在２位のようです。$ wget -q https://I-love.SAKURA.ne.jp/syzbot-5000.html$ awk..</description>
<dc:subject>Linux</dc:subject>
<dc:creator>熊猫さくら</dc:creator>
<dc:date>2024-02-04T20:21:19+09:00</dc:date>
<content:encoded><![CDATA[
<p>今回も簡単に集計してみました。</p>

<p><a href="http://Kumaneko-Sakura.sblo.jp/article/189842750.html" target="_blank">4000 件時点</a>では 511 人の開発者により 2831 個のパッチが適用されたのに対して、 5000 件時点では 605 人の開発者により 3620 個のパッチが適用されました。</p>

<p>Eric Dumazet さんは 1000 件中 96 件を修正して、１位を独走中です。熊猫は 1000 件中 33 件を修正して、現在２位のようです。</p>

<pre>
$ wget -q https://I-love.SAKURA.ne.jp/syzbot-5000.html
$ awk ' { for (i = 1; i <= NF; i++) if (length($i) == 12) { print $i } }' syzbot-5000.html | awk '/[0-9a-f]{12}/{ print $0 }' | sort -u > /tmp/patches.txt
$ wc -l /tmp/patches.txt
3620 /tmp/patches.txt
$ for i in `cat /tmp/patches.txt`; do git show $i; done | grep ^Author: > /tmp/authors.txt
$ awk '{ $1 = ""; $NF=""; count[$0]=count[$0]+1 } END { for (key in count) { printf("%4d %s\n", count[key], key) } }' /tmp/authors.txt | sort -nr | wc -l
605
$ awk '{ $1 = ""; $NF=""; count[$0]=count[$0]+1 } END { for (key in count) { printf("%4d %s\n", count[key], key) } }' /tmp/authors.txt | sort -nr | head -n 22
 494  Eric Dumazet
 122  Tetsuo Handa
 104  Cong Wang
  89  Takashi Iwai
  80  Eric Biggers
  74  Jens Axboe
  73  Pavel Skripkin
  60  Florian Westphal
  58  Jan Kara
  54  David Howells
  51  Xin Long
  50  Johannes Berg
  50  Alan Stern
  43  Pavel Begunkov
  34  Oliver Neukum
  33  Paolo Abeni
  33  Daniel Borkmann
  31  Sean Christopherson
  29  Willem de Bruijn
  28  Theodore Ts'o
  28  Ryusuke Konishi
  28  Christoph Hellwig
</pre>

<p><img src="https://i-love.sakura.ne.jp/cg/LockBattle1.JPG"></p>

<p>ロックに起因した不具合は本当に厄介です。不完全なパッチが適用されてしまったり、メンテナがパッチを受理してくれなかったりもします。</p>

<p>自分がメンテナになっている領域の不具合ならば自分の判断で適用できるのですが、熊猫は自分がメンテナになっていない領域の不具合を修正している（そもそも自分が担当している領域での不具合はほとんど存在しない）ので、正しいパッチを作成するための苦労だけでなく、作成したパッチを受理してもらうための苦労もすごいです。せっかくパッチを作成しても、受理されないことで未修正のままになってしまうこともよくあります。</p>

<p>一例として、<a href="https://nvd.nist.gov/vuln/detail/CVE-2023-31082" target="_blank">CVE-2023-31082</a>があります。コンソールにログインしたユーザによる local DoS 脆弱性程度ならば、いちいち CVE 番号を申請していないのですが、誰かがこの不具合に CVE 番号を申請したようですね。この不具合は syzkaller を使っているユーザにより 2023/4/18 に<a href="https://lkml.kernel.org/r/CA+UBctCZok5FSQ=LPRA+A-jocW=L8FuMVZ_7MNqhh483P5yN8A@mail.gmail.com" target="_blank">報告</a>されたようです。この脆弱性の緩和策を意図したかどうかは不明ですが、 2023/7/31 に、コンソールにログイン可能なユーザなら誰でもこの脆弱性を攻撃できるという状態から、 root ユーザだけがこの脆弱性を攻撃できるという状態にするためのパッチが<a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=67c37756898a5a6b2941a13ae7260c89b54e0d88" target="_blank">提案</a>され、採用されたようです。</p>

<p>しかし、同じ原因の不具合は少なくとも 2022/12/02 の時点で syzbot により<a href="https://syzkaller.appspot.com/bug?extid=dbac96d8e73b61aa559c" target="_blank">報告</a>されており、 syzbot が報告してから人間が再報告するまで４か月以上放置されていたことが判ります。</p>

<p>さらに遡ってみると、 2022/8/26 の時点で syzkaller を使っているユーザにより<a href="https://lkml.kernel.org/r/20220826193545.20363-1-pchelkin@ispras.ru" target="_blank">報告</a>されていました。この時はスピンロックをミューテックスに置換するという<a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=902e02ea9385373ce4b142576eef41c642703955" target="_blank">修正</a>が行われました。しかし、見落としがあったことが syzbot により<a href="https://syzkaller.appspot.com/bug?extid=b687fe9bf10db0839715" target="_blank">報告</a>され、この修正は<a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=acdab4cb4ba7e5f94d2b422ebd7bf4bf68178fb2" target="_blank">取り消され</a>ました。</p>

<p>2024/1/18 に syzbot が<a href="https://syzkaller.appspot.com/bug?extid=06fa1063cca8163ea541" target="_blank">再報告</a>してきたのを受けて、熊猫がパッチを作成したのですが、今度はメンテナから<a href="https://lkml.kernel.org/r/2024012418-passover-habitual-5a92@gregkh" target="_blank">「ファジングテストで見つかった不具合を修正する必要あるの？」</a>と待ったをかけられてしまいました。（泣）</p>

<p>2022/8/26 の報告が最初かどうか判りませんが、なんだかんだで、この不具合は発見されてから少なくとも１７か月経過しても修正されていないようです。</p>

<p>ファジングツールである syzkaller を使って見つかった不具合は、人間が報告した場合には対処されるけれども、 syzbot が報告した場合には無視されるという感じになりつつあります。<a href="https://www.nttdata.com/jp/ja/trends/data-insight/2019/0415/#vol1c7" target="_blank">５年ほど前の記事</a>に、「syzbotの能力が向上することで、ますますOSカーネル開発者たちがsyzbotに追い回されるようになるという説も…？」と書きましたが、その通りの状況になってしまって、逆にカーネル開発者たちが無視するようになってきたということかもしれません。</p>
<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="http://kumaneko-sakura.sblo.jp/article/190533135.html">
<link>http://kumaneko-sakura.sblo.jp/article/190533135.html</link>
<title>１００均で売っているモノを使って屋内用蚊取りを自作してみました。</title>
<description>そろそろ暑さが和らいできて蚊が活発に活動しだす時期だと思いますが、誘引剤を使って積極的に捕獲したり忌避剤を使って積極的に遠ざけたりするのではなく、見つけ次第手で叩いて退治するという対処をしている人も多いのではないかと思います。しかし、飛行中の蚊を手で上下から挟んで潰すとか、止まっている蚊を風で気絶させてからつまむとかいった、素早さや器用さが必要な方法は難しいと感じたので、１００均で売っているモノを使って自作してみました。作り方は超簡単で、水切りフィルター https://ec..</description>
<dc:subject>その他</dc:subject>
<dc:creator>熊猫さくら</dc:creator>
<dc:date>2023-09-01T00:00:00+09:00</dc:date>
<content:encoded><![CDATA[
<p>そろそろ暑さが和らいできて蚊が活発に活動しだす時期だと思いますが、誘引剤を使って積極的に捕獲したり忌避剤を使って積極的に遠ざけたりするのではなく、見つけ次第手で叩いて退治するという対処をしている人も多いのではないかと思います。しかし、飛行中の蚊を手で上下から挟んで潰すとか、止まっている蚊を風で気絶させてからつまむとかいった、素早さや器用さが必要な方法は難しいと感じたので、１００均で売っているモノを使って自作してみました。</p>

<p>作り方は超簡単で、水切りフィルター <a href="https://ec.cando-web.co.jp/item/4964549053612/" target="_blank">https://ec.cando-web.co.jp/item/4964549053612/</a> を、底板を外した筒 <del><a href="https://echo-k.co.jp/detail/?item_num=0736011" target="_blank">https://echo-k.co.jp/detail/?item_num=0736011</a></del>（2023/11/16 に廃番となったので代わりの写真→） <a href="https://www.askul.co.jp/p/EA72591/" target="_blank">https://www.askul.co.jp/p/EA72591/</a> に被せるだけです。<br>
虫取り網の網目を蚊が通過できない程度に細かくして、振り回す際には便利でも閉じ込める際には隙間の原因となってしまう棒の部分を無くして、扱いやすいようにリングの部分を筒状にした何か（名前がないのでとりあえず「蚊潰し筒」と呼んでおこう）の出来上がりです。</p>

<div align="center"><table border="1"><tr><td><img src="https://I-love.SAKURA.ne.jp/cg/KaTsubushi1.JPG"></td></tr></table></div>

<p>筒を平面に対して垂直になるように押し当てることで蚊を閉じ込めます。その後、片方の手で筒を押さえたまま、他方の手でフィルターを押さえたりつまんだりすることで蚊を潰します。蚊の行動可能範囲を制限してから退治するので、閉じ込めに成功した後はゆっくりと対処できます。また、筒を押し当てることが可能な平面さえあれば、既に平面に止まっている蚊はもちろん、平面の近くを飛行中の蚊でも狙うことができます。蚊を潰す以外にも、蜘蛛のような小型の虫を捕まえて屋外へと追い払うといった使い方ができます。</p>

<p>この水切りフィルターは目が細かいので蚊も通過できなさそうだと思って購入し、味噌が入っていたプラスチック容器の底を切り抜いたものに被せて実験してみた結果、風が起こらないので蚊に気づかれないまま閉じ込めることができました。しかし、底を切り抜くのが面倒だと思ったのと、飛行中の蚊も狙えるように少しだけ大きなものが欲しかったので、最初から筒状のものを探した結果、このような組み合わせに至りました。</p>

<p>なお、既に腕などに止まっているのを発見した場合など「１秒でも早く潰してやりたいけれども、手で叩こうとすると風で吹き飛ばしてしまうので悩ましい」という場合には、底板部分が網になっている <a href="https://echo-k.co.jp/detail/?item_num=0799227" target="_blank">https://echo-k.co.jp/detail/?item_num=0799227</a> で直接潰すという方法も使えそうです。</p>
<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="http://kumaneko-sakura.sblo.jp/article/190406389.html">
<link>http://kumaneko-sakura.sblo.jp/article/190406389.html</link>
<title>２回目の Google Open Source Peer Bonus を受賞しました。</title>
<description>熊猫が Linux カーネルに出会ってから２０年が経過した今春、２回目の Google Open Source Peer Bonus を受賞しました。前回受賞時の貢献内容は紹介ページを用意できましたが、その後の４年間は Linux カーネルの不具合を地道に修正しているだけなので紹介ページはありません・・・って、これだけで終わってしまうと物足りないので、熊猫の仕事内容について紹介しようと思います。近年の仕事内容についてですが、関係者が見落としている内容に関して、いちはやく気づい..</description>
<dc:subject>Linux</dc:subject>
<dc:creator>熊猫さくら</dc:creator>
<dc:date>2023-06-15T20:12:37+09:00</dc:date>
<content:encoded><![CDATA[
<p>熊猫が Linux カーネルに出会ってから２０年が経過した今春、２回目の <a href="https://opensource.googleblog.com/2023/05/google-open-source-peer-bonus-program-announces-first-group-of-winners-2023.html" target="_blank">Google Open Source Peer Bonus を受賞</a>しました。</p>

<p><a href="http://Kumaneko-Sakura.sblo.jp/article/185919734.html" target="_blank">前回受賞時</a>の貢献内容は紹介ページを用意できましたが、その後の４年間は Linux カーネルの不具合を地道に修正しているだけなので紹介ページはありません・・・って、これだけで終わってしまうと物足りないので、熊猫の仕事内容について紹介しようと思います。</p>

<p>近年の仕事内容についてですが、関係者が見落としている内容に関して、いちはやく気づいて先回りして対処することにより問題が顕在化することを予防したり、普通のサポートレベルでは解決できずに泣き寝入りしてしまうような事象に関して、報告して修正を依頼できるようになるまで切り分け調査をすることにより利用者と開発者の間を繋いだりするという仕事をしています。例えば、ウイルス対策ソフトのオンアクセススキャン処理による遅延が犯人であることを立証したり、悪意のない通信がＩＰＳ／ＷＡＦにより遮断されてしまうという問題の回避策を実装したりとかしています。<br>
受賞対象となった Linux カーネルの不具合を修正する活動についても、 syzbot が発見した問題事象についての切り分け調査を行い、修正パッチを作成して関係者の承認を得ていくという点で、同様なのです。様々な発生パターンを見てきたことで、 syzbot が発見した問題事象だけを修正するのではなく、類似事象についても誰かが発見する前に先回りして対処できるようになってきました。知らない間に、ペンギンさんを守護する猫になりつつあるのかもしれません。</p>

<p>熊猫のスキルは、「どんな製品やシステムでもある程度使える」とか「特定の製品やシステムを使いこなせる」とかいうスキルではないので、検索でヒットするような名称が見当たらず、<a href="https://www.newson.co.jp/services/ITInfra/OSSPro/" target="_blank">対外的な宣伝ページ</a>や社内向けスキルシートを作成する場合にどう説明したらよいのか悩んでしまいます。<br>
<a href="https://riss.ipa.go.jp/r?r=012585" target="_blank">情報処理安全確保支援士</a>も LinuC 303 セキュリティも、熊猫のスキルを表現できているとは思えません。熊猫のスキルを表現することができる名称は無いものでしょうかねぇ・・・？</p><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="http://kumaneko-sakura.sblo.jp/article/190370131.html">
<link>http://kumaneko-sakura.sblo.jp/article/190370131.html</link>
<title>AKARI 1.0.48 と CaitSith 0.2-20230527 をリリースしました。</title>
<description>AKARI と LKM-based LSM 版の CaitSith に関して、プログラム実行要求時の権限チェックを回避できてしまう不具合を修正しています。https://ja.osdn.net/projects/tomoyo/lists/archive/users/2023-May/001029.html４年ほど前に、複数の LSM モジュールを同時に有効にできるようにするという LSM コミュニティの変化について紹介しました。https://ja.osdn.net/proj..</description>
<dc:subject>AKARI</dc:subject>
<dc:creator>熊猫さくら</dc:creator>
<dc:date>2023-05-27T17:36:21+09:00</dc:date>
<content:encoded><![CDATA[
<p>AKARI と LKM-based LSM 版の CaitSith に関して、プログラム実行要求時の権限チェックを回避できてしまう不具合を修正しています。<br>
<a href="https://ja.osdn.net/projects/tomoyo/lists/archive/users/2023-May/001029.html" target="_blank">https://ja.osdn.net/projects/tomoyo/lists/archive/users/2023-May/001029.html</a></p>

<p>４年ほど前に、複数の LSM モジュールを同時に有効にできるようにするという LSM コミュニティの変化について紹介しました。<br>
<a href="https://ja.osdn.net/projects/tomoyo/lists/archive/users/2019-March/001026.html" target="_blank">https://ja.osdn.net/projects/tomoyo/lists/archive/users/2019-March/001026.html</a></p>

<p>しかし、最近は LSM コミュニティが再び排他的になってきているようです。具体的には、文字列の名前で区別していた LSM モジュールを、 LSM モジュールに対応する数値のＩＤで区別するようにするという修正がまもなく採用され、このＩＤが割り当てられないと LSM モジュールを使えなくなります。</p>

<p>そのため、 AKARI や CaitSith のように、ローダブルカーネルモジュールとして LSM を利用している場合、他の LSM モジュールが使用するＩＤと競合することにより問題が発生するという可能性が生じます。一意に特定できないものをＩＤとして使うのは、退化です。</p>

<p>さらに、「メインラインに採用された LSM モジュールだけが、永続的なＩＤを獲得できる」という方針と、「レビューのための労力を確保できないことにより、新しい LSM モジュールをメインラインに追加することが年々難しくなってきている」という現実により、メインラインに採用されていない LSM モジュールは、永続的なＩＤを獲得することが困難な状況が発生することが予想されています。<br>
つまり、「メインラインに採用されていない LSM モジュールをロックアウトする」という方向に進んでいるのです。</p>

<p>「ディストリビュータはサポートできないものを有効にできない」という方針と、「メインラインに採用されてもディストリビューションカーネルで有効にされないと使えない」という現実により、ローダブルカーネルモジュールとして LSM を利用するという抜け道は今後も必要になるため、熊猫は「メインラインに採用された LSM モジュールだけが、永続的なＩＤを獲得できる」という方針に猛反対しているのですが、 LSM コミュニティとしては「もう決着した話だ」という立場のようです。果たして、「 You security people are insane. I'm tired of this "only my version is correct" crap. 」の再来となるのでしょうか？<br>
<a href="https://lkml.kernel.org/r/ff43e254-0f41-3f4f-f04d-63b76bed2ccf@I-love.SAKURA.ne.jp" target="_blank">https://lkml.kernel.org/r/ff43e254-0f41-3f4f-f04d-63b76bed2ccf@I-love.SAKURA.ne.jp</a></p><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="http://kumaneko-sakura.sblo.jp/article/189842750.html">
<link>http://kumaneko-sakura.sblo.jp/article/189842750.html</link>
<title>まもなく Linux 6.0 がリリース。不具合の修正状況は・・・？</title>
<description>syzbot が発見した Linux カーネルの不具合の内、修正されたことが報告された件数が９／１５に４０００件になりました。簡単な集計をしてみたところ、 511 人の開発者により 2831 個のパッチが適用され、熊猫は 89 個で第３位のようです。$ wget -q https://I-love.SAKURA.ne.jp/syzbot-4000.txt$ awk ' { for (i = 1; i &amp;lt;= NF; i++) if (length($i) == 12) {..</description>
<dc:subject>Linux</dc:subject>
<dc:creator>熊猫さくら</dc:creator>
<dc:date>2022-10-01T16:43:31+09:00</dc:date>
<content:encoded><![CDATA[
<p>syzbot が発見した Linux カーネルの不具合の内、<a href="https://syzkaller.appspot.com/upstream/fixed" target="_blank">修正されたことが報告された件数</a>が９／１５に４０００件になりました。</p>

<img src="https://I-love.SAKURA.ne.jp/cg/Syz4000.JPG">

<p>簡単な集計をしてみたところ、 511 人の開発者により 2831 個のパッチが適用され、熊猫は 89 個で第３位のようです。</p>

<pre>
$ wget -q https://I-love.SAKURA.ne.jp/syzbot-4000.txt
$ awk ' { for (i = 1; i &lt;= NF; i++) if (length($i) == 12) { print $i } }' syzbot-4000.txt | awk '/[0-9a-f]{12}/{ print $0 }' | sort -u &gt; /tmp/patches.txt
$ wc -l /tmp/patches.txt
2831 /tmp/patches.txt
$ for i in `cat /tmp/patches.txt `; do git show $i; done | grep ^Author: &gt; /tmp/authors.txt
$ awk '{ $1 = ""; $NF=""; count[$0]=count[$0]+1 } END { for (key in count) { printf("%4d %s\n", count[key], key) } }' /tmp/authors.txt | sort -nr | wc -l
511
$ awk '{ $1 = ""; $NF=""; count[$0]=count[$0]+1 } END { for (key in count) { printf("%4d %s\n", count[key], key) } }' /tmp/authors.txt | sort -nr | head -n 20
 398  Eric Dumazet
 100  Cong Wang
  89  Tetsuo Handa
  85  Takashi Iwai
  75  Eric Biggers
  71  Pavel Skripkin
  64  Jens Axboe
  56  Florian Westphal
  47  Xin Long
  41  Alan Stern
  40  Johannes Berg
  37  Pavel Begunkov
  35  David Howells
  34  Oliver Neukum
  33  Jan Kara
  28  Paolo Abeni
  27  Daniel Borkmann
  26  Willem de Bruijn
  25  Sean Christopherson
  25  Johan Hovold
</pre>

<p>修正件数上位１０名が作成したパッチについて統計情報を調べてみると、 Eric Dumazet さんと Cong Wang さんと Florian Westphal さんと Xin Long さんはネットワーク関連のパッチを、 Takashi Iwai さんはサウンド関連のパッチを、 Jens Axboe さんはブロック関連のパッチを、 Alan Stern さんはＵＳＢ関連のパッチを、熊猫と Eric Biggers さんと Pavel Skripkin さんは様々な分野のパッチを作成しているようです。</p>

<pre>
$ mkdir /tmp/authors/
$ for commit in `cat /tmp/patches.txt`; do git show $commit | awk ' { if (NR == 2) { $1 = ""; $NF = ""; AUTHOR = $0 } else if (NR &gt; 3) { print $0 &gt;&gt; "/tmp/authors/"AUTHOR } } '; done
$ for author in /tmp/authors/*; do basename "$author"; diffstat -p1 "$author"; echo; done &gt; /tmp/diffstat.txt
</pre>

<p>syzbot に報告されずに修正された不具合も存在しているため、誰も正確な件数は把握していないのですが、修正されたファイルの数としては、ネットワーク関連が一番多く、ドライバ関連が続くという、予想外の結果になっています。<br>
ネットワーク関連の処理では、不具合を恐れずに適用してみて、不具合が見つかったら修正すればよいという考え方で開発が行われてきたということなのかもしれませんね。</p>

<p>syzbot による不具合探しが始まってから５年以上が経過し、自組織の環境で syzkaller を動作させるなど、不具合の発見と修正に関わるカーネル開発者も増えてきている感じがします。<br>
複数の開発者が同じ不具合を修正するパッチを作成してしまうケースも見られるようになってきており、誰のパッチが採用されるかという一番乗り競争っぽくなってきました。</p><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="http://kumaneko-sakura.sblo.jp/article/188148326.html">
<link>http://kumaneko-sakura.sblo.jp/article/188148326.html</link>
<title>Tiny File Transmitter 0.11 が公開されました。</title>
<description>４ＧＢよりも大きなファイルを扱えるようにしてほしいという要望がありましたので、およそ１７年ぶりにＰ２Ｐ型のファイル転送ツールである Tiny File Transmitter のアップデートを行いました。前回のリリースは TOMOYO Linux がオープンソース化されるよりも前だったので、コーディングスタイルにいろいろな癖がありましたが、今回のアップデートを行うにあたり、読みやすくするために Linux カーネルの流儀に修正しました。また、当時はマルチスレッドの知識や経験が..</description>
<dc:subject>Windows</dc:subject>
<dc:creator>熊猫さくら</dc:creator>
<dc:date>2020-11-22T14:08:41+09:00</dc:date>
<content:encoded><![CDATA[
<p>４ＧＢよりも大きなファイルを扱えるようにしてほしいという要望がありましたので、およそ１７年ぶりにＰ２Ｐ型のファイル転送ツールである Tiny File Transmitter のアップデートを行いました。</p>

<p>前回のリリースは TOMOYO Linux がオープンソース化されるよりも前だったので、コーディングスタイルにいろいろな癖がありましたが、今回のアップデートを行うにあたり、読みやすくするために Linux カーネルの流儀に修正しました。<br>
また、当時はマルチスレッドの知識や経験が無かったので、安全サイドに倒すためにシングルプロセス／シングルスレッドで実装していたのですが、その代償として、長時間かかる処理をＧＵＩのイベント処理ループの中に埋め込むために「 Go To トラベル」・・・じゃなくて「 goto ラベル」の嵐になっています。ＣＵＩ環境向けのプログラミングではありえないようなスパゲッティ状態です。</p>

<p>結局、互換性を重視してファイルサイズを６４ビットで扱うための改修だけに留めましたが、もし最初から作り直すのであればマルチプロセスでＨＴＴＰ風のプロトコルにしていたと思います。</p><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="http://kumaneko-sakura.sblo.jp/article/188072350.html">
<link>http://kumaneko-sakura.sblo.jp/article/188072350.html</link>
<title>ＯＳＳセキュリティ技術ワークショップ２０２０で syzbot の話をしました。</title>
<description>今年も相変わらず Linux カーネルのバグ退治をしています。昨年講演した The SYZBOT CTF の「その後」ですが、１年半前の記事に書いた予想が現実になりつつある気がするので、「 syzbot に追い回される開発者たち？」というタイトルで苦労話を紹介しました。２５年前に追加されたコードに起因した不具合が発見されて、もう誰も使っていないだろうという理由で削除するとか、歴史を感じますね。</description>
<dc:subject>Linux</dc:subject>
<dc:creator>熊猫さくら</dc:creator>
<dc:date>2020-10-29T01:04:13+09:00</dc:date>
<content:encoded><![CDATA[
<p>今年も相変わらず Linux カーネルのバグ退治をしています。</p>
<p>昨年講演した <a href="http://I-love.SAKURA.ne.jp/The_SYZBOT_CTF.html" target="_blank">The SYZBOT CTF</a> の「その後」ですが、<a href="https://www.nttdata.com/jp/ja/data-insight/2019/0415/#vol1c7" target="_blank">１年半前の記事に書いた予想</a>が現実になりつつある気がするので、「 <a href="http://I-love.SAKURA.ne.jp/tomoyo/ows2020-kumaneko.html" target="_blank">syzbot に追い回される開発者たち？</a>」というタイトルで苦労話を紹介しました。</p>
<p>２５年前に追加されたコードに起因した不具合が発見されて、もう誰も使っていないだろうという理由で削除するとか、歴史を感じますね。</p>
<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="http://kumaneko-sakura.sblo.jp/article/187369886.html">
<link>http://kumaneko-sakura.sblo.jp/article/187369886.html</link>
<title>Pacemaker で softdog を利用されている方へのお知らせ</title>
<description>kdump の設定をしているのであれば、 softdog カーネルモジュールをロードする際のパラメータに soft_panic=1 という指定を追加していただきますようお願いします。■お知らせの背景Pacemaker を使っているシステムが突然再起動したというお問合せは少なくありません。具体的な件数については把握していませんが、仮想化環境での発生事例が多いようです。残念なことに、ログファイルや sar を調査しても手がかりが残っておらず、原因不明のまま諦めざるを得ないという状..</description>
<dc:subject>Linux</dc:subject>
<dc:creator>熊猫さくら</dc:creator>
<dc:date>2020-04-11T14:31:49+09:00</dc:date>
<content:encoded><![CDATA[
<p>kdump の設定をしているのであれば、 softdog カーネルモジュールをロードする際のパラメータに soft_panic=1 という指定を追加していただきますようお願いします。</p>

<p><b>■お知らせの背景</b></p>
<p>Pacemaker を使っているシステムが突然再起動したというお問合せは少なくありません。具体的な件数については把握していませんが、仮想化環境での発生事例が多いようです。残念なことに、ログファイルや sar を調査しても手がかりが残っておらず、原因不明のまま諦めざるを得ないという状態が何年も続いてきました。</p>

<p>RHEL6/CentOS6 以降の softdog カーネルモジュールには、タイムアウトの発生時に「システムを再起動させる」代わりに「カーネルパニックを発生させる」ための soft_panic というパラメータが存在しています。このパラメータを kdump の設定と組み合わせることで、タイムアウトの発生時に vmcore を取得することが可能になります。</p>

<p>vmcore にはタイムアウトが発生した時点の情報しか含まれないので、 vmcore を取得できればタイムアウトの原因を必ず突き止められるという訳ではありません。しかし、たくさんの事例を積み重ねることで、傾向を分析して対策を考えることはできるものと考えます。</p>

<p><b>■分析により見つかった<a href="https://github.com/corosync/corosync/issues/520" target="_blank">問題点の例</a></b></p>
<p>Corosync main process was not scheduled for X ms (threshold is Y ms). Consider token timeout increase. というメッセージは、一般的には「カーネルが corosync プロセスにＣＰＵ時間を割り当てできなかった」という解釈／説明がされていますが、必ずしもカーネルやハードウェア側の問題を示唆している訳ではありません。１個のスレッドが様々な処理を行っているという corosync プロセスの構造上、「（カーネルは corosync プロセスにＣＰＵ時間を割り当てていたものの、 corosync プロセスが他の処理で忙しかったことにより、）このメッセージを出力するための関数を呼び出せるようになるまでに想定外の時間がかかっただけ」という可能性もあるのです。</p>
<p>このような問題が実際の業務負荷で発生しているのかどうかは、 vmcore を取得して確認してみないと判断できません。サポートセンタでは実際の業務負荷をかけることができないので、利用者の方々に vmcore の取得へのご協力をお願いする必要があります。</p>

<p><b>■ＮＴＴ ＯＳＳセンタを利用されている方への補足</b></p>
<p>vmcore を送付できる場合には、サイズが数十ＧＢのファイルであってもそのまま扱える「ファイルアップロード／ダウンロードシステム」をご利用ください。 vmcore を送付できない場合、あるいは、送付にかかる時間が勿体ないので自前で初期解析を行いたい場合には、 crash コマンドを用いて vmcore の初期解析を行う手順をご利用ください。詳細については、（ＮＴＴ ＯＳＳセンタの契約者向けコンテンツである）「ナレッジの泉」を参照してください。</p>
<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="http://kumaneko-sakura.sblo.jp/article/187355182.html">
<link>http://kumaneko-sakura.sblo.jp/article/187355182.html</link>
<title>RHEL7/CentOS7 で最新版 clamav のオンアクセススキャン機能を利用する手順について</title>
<description>先月 clamav パッケージが 0.102 にバージョンアップした際に、 RHEL 7 / CentOS 7 で提供されている curl のバージョンが古すぎることが原因で、 RHEL 7 / CentOS 7 向けの clamav におけるオンアクセススキャン機能が「突然」使えなくなってしまいました。オンアクセススキャン機能を必要としている人は、業務で使っている人が多いと思うので、今すぐ RHEL 8 / CentOS 8 に乗り換えるという選択肢は難しいと思います。なの..</description>
<dc:subject>Linux</dc:subject>
<dc:creator>熊猫さくら</dc:creator>
<dc:date>2020-04-07T13:28:36+09:00</dc:date>
<content:encoded><![CDATA[
<p>先月 clamav パッケージが 0.102 にバージョンアップした際に、 RHEL 7 / CentOS 7 で提供されている curl のバージョンが古すぎることが原因で、 RHEL 7 / CentOS 7 向けの clamav におけるオンアクセススキャン機能が「突然」使えなくなってしまいました。</p>

<p>オンアクセススキャン機能を必要としている人は、業務で使っている人が多いと思うので、今すぐ RHEL 8 / CentOS 8 に乗り換えるという選択肢は難しいと思います。なので、既存環境への影響を最小限に抑えながら、 RHEL 7 / CentOS 7 環境でもオンアクセススキャン機能を使えるようにするための手順を作りました。</p>

<p>(1) ビルドに必要なパッケージを開発環境にインストールします。</p>
<table border=1><tr><td><pre>
# yum -y install gcc rpm-build yum-utils wget epel-release
</pre></td></tr></table>

<p>(2) curl の最新版（記事作成時点では 7.69.1 ）を開発環境でコンパイルします。</p>
<table border=1><tr><td><pre>
# wget https://curl.haxx.se/download/curl-7.69.1.tar.bz2 \
       https://curl.haxx.se/download/curl-7.69.1.tar.bz2.asc \
       https://daniel.haxx.se/mykey.asc
# gpg --import mykey.asc
# gpg curl-7.69.1.tar.bz2.asc
# tar -xf curl-7.69.1.tar.bz2
# cd curl-7.69.1
# ./configure --prefix=/usr/local/curl-7.69.1
# make
# make install
</pre></td></tr></table>

<p>(3) clamav の最新版（記事作成時点では 0.102.2-4.el7 ）を開発環境でコンパイルします。</p>
<table border=1><tr><td><pre>
# cd
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
# yumdownloader --source clamav
# rpm --checksig clamav-0.102.2-4.el7.src.rpm
# rpm -ivh clamav-0.102.2-4.el7.src.rpm
# yum-builddep -y ~/rpmbuild/SPECS/clamav.spec
# patch -d ~/rpmbuild/SPECS/ -p0 &lt;&lt; "EOF"
--- clamav.spec
+++ clamav.spec
@@ -4,7 +4,7 @@

 ## Fedora Extras specific customization below...
 # EL7's curl is too old
-%if 0%{?fedora} || 0%{?rhel} &gt;= 8
+%if 0%{?fedora} || 0%{?rhel} &gt;= 7
 %bcond_without  clamonacc
 %else
 %bcond_with     clamonacc
@@ -264,6 +264,7 @@ export have_cv_ipv6=yes
 rm -rf libltdl autom4te.cache Makefile.in
 autoreconf -i
 %configure \
+    --with-libcurl=/usr/local/curl-7.69.1 \
     --enable-milter \
     --disable-clamav \
     --disable-static \
EOF
# rpmbuild -bb ~/rpmbuild/SPECS/clamav.spec
</pre></td></tr></table>

<p>(4) 開発環境で作成したファイルを本番環境にコピーします。なお、開発環境と本番環境が同一の場合は不要です。</p>
<table border=1><tr><td><pre>
# tar -cf ~/curl+clamav.tar /usr/local/curl-7.69.1/ ~/rpmbuild/RPMS/x86_64/clamd-*.rpm \
          ~/rpmbuild/RPMS/x86_64/clamav-*.rpm ~/rpmbuild/RPMS/noarch/clamav-*.rpm
</pre></td></tr></table>
<table border=1><tr><td><pre>
# tar -xf ~/curl+clamav.tar -C /
</pre></td></tr></table>

<p>(5) 本番環境で clamav パッケージをインストールします。</p>
<table border=1><tr><td><pre>
# rpm -ivh ~/rpmbuild/RPMS/x86_64/clamd-0.102.2-4.el7.x86_64.rpm \
           ~/rpmbuild/RPMS/x86_64/clamav-0.102.2-4.el7.x86_64.rpm \
           ~/rpmbuild/RPMS/x86_64/clamav-lib-0.102.2-4.el7.x86_64.rpm \
           ~/rpmbuild/RPMS/noarch/clamav-data-0.102.2-4.el7.noarch.rpm \
           ~/rpmbuild/RPMS/noarch/clamav-filesystem-0.102.2-4.el7.noarch.rpm
</pre></td></tr></table>

<p>(6) clamonacc が開発環境でコンパイルした curl ライブラリを参照する設定になっていることを確認します。</p>
<table border=1><tr><td><pre>
# objdump -p /usr/bin/clamonacc | grep curl
  NEEDED               libcurl.so.4
  RPATH                /usr/local/curl-7.69.1/lib
</pre></td></tr></table>

<p>(7) 本番環境で必要な設定をしてから clamonacc を起動します。</p>
<table border=1><tr><td><pre>
# sed -i -e 's/^#TCP/TCP/' /etc/clamd.d/scan.conf
# systemctl start clamd@scan
# /usr/bin/clamonacc
</pre></td></tr></table><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
</rdf:RDF>
