linux

Linux Kernel: PSI - Pressure Stall Information /proc/pressure/io で IO 待ちを観察する

www.kernel.org Linux Kernel 4.20 で導入された PSI - Pressure Stall Information の /proc/pressure/io について気になることがあったので調べていました イントロダクション PSI を使うと CPU, メモリ, IO で stall した時間(割合) を計測できるってなこ…

Linux Kernel: cgroup v1 の制限下で slab_out_of_memory を発生させて観察する

イントロダクション cgroup v1 の memory コントローラーで memory.kmem.limit_in_bytes を制限すると slab_out_of_memory を起こすことができるので、それを調べたり観察したエントリです 不具合・バグの調査ではないです ソースやコマンドの結果を大量に貼…

Linux Kernel: カーネルモードで CPU 掴んでるタスクのバックトレースをとりたい

表題の通りなのだが、結論からいうと sysrq-trigger を使うのがいいみたい 「特定のタスクがクリティカルセクションを実行していてボトルネックとなっているが、どのタスクなのか分からない」という事象を正確に観測したくて、このテーマで調べました カーネ…

Linux Kernel: rtnl_mutex を長時間 ロックして刺さった状態を観察する (2) with bpftrace

前回の続き hiboma.hatenadiary.jp rtnl_mutex でロックを獲得してクリティカルセクションを実行中のタスクを何らかの方法でトレースしたり、時間を計測したいと思って、あれこれ調べたり、試行錯誤していた 最終的に bpftrace でがちゃがちゃと試すまでを記…

strace 5.2 で追加された -z -Z オプション

strace.io strace 5.2 で追加された -z -Z オプションが面白かったので書いておきます (注意: この記事を書いた時点では 5.3 が最新です ) -Z 失敗したシステムコールだけフィルターしてくれるオプション root@xenial:~/strace-5.3# ./strace -Z ls >/dev/nu…

Linux Kernel: rtnl_mutex を長時間 ロックして刺さった状態を観察する

Linux Kernel で struct net_device や Routing Netlink の処理を排他制御する mutex である rtnl_mutex を任意の時間 ロックするカーネルモジュールを作成して、rtnl_mutex のロックがユーザランドのプロセスやカーネルスレッド等にどういった影響を及ぼす…

Proof of Concept: Linux カーネルモジュールで特定のディレクトリ以下の dentry キャッシュを破棄する (2)

hiboma.hatenadiary.jp 前回の続きのエントリです カーネルのバージョンを変えつつ ソースを読み込んでみたところ理解が進んだ点が2つあったのでまとめます ファイルシステム(マウントポイント?) を remount すると dentry を破棄できる evict_inodes() を…

Proof of Concept: Linux カーネルモジュールで特定のディレクトリ以下の dentry キャッシュを破棄する

動機 社内の同僚がカーネル周りの問題を調べていて slab キャッシュ ( = dentry, inode ) に関する内容を追っていた。 その問題自体の内容は、アレがコレで、伏せておく。 その問題をみているうちに 「特定のディレクトリ以下の slab キャッシュ = dentry / …

Linux Kernel CVE-2019-9857 の PoC を書いて検証・観察した

表題の通り CVE-2019-9857 が出ており、その PoC を書いてどのような影響があるのを検証・観察した. CVE-2019-9857 の概要 nvd.nist.gov In the Linux kernel through 5.0.2, the function inotify_update_existing_watch() in fs/notify/inotify/inotify_us…

Linux 版の Sysinternals ProcDump を試す (2)

前回の続きです hiboma.hatenadiary.jp 実装の話 本エントリでは ProcDump が コアダンプをどのように採取するかを調べていく. (現状の) Linux ProcDump は gcore を薄くラップして扱うバイナリと理解した ダンプの採取方法を調べる github.com ソースコー…

Linux 版の Sysinternals ProcDump を試す (1)

先のエントリで書いたように最近は Windows も触っていて 主に Sysinternals ツールを使って Windows 探検をしている hiboma.hatenadiary.jp その流れで ProcDump の使い方を調べていた. Sysinternals の ProcDump technet.microsoft.com Windows 版の詳細は…

抽象ソケットアドレス abstract socket address

抽象ソケットアドレス abstract socket address について 2011年にエントリを書いていた d.hatena.ne.jp しばらく存在を忘れていたのだけど、社内 slack に話題が上がって思い出した。以下のような UNXI ソケットの亜種である。 abstract (抽象): 抽象ソケッ…

【まとめ】CentOS7 で glibc をアップデート後、 mod_php + httpd の logrotate (reload ) が失敗する: /lib64/libresolv.so.2: symbol __h_errno, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference

3つのエントリで問題を追いかけたのでまとめ 追いかけていた問題 httpd + mod_php で glibc をアップデート後、 logrotate 時に以下のログを出して失敗する問題を追っていた Graceful restart requested, doing restart httpd: Syntax error on line 39 of /…

【Vol.3 変更履歴の追跡】CentOS7 で glibc をアップデート後、 mod_php + httpd の logrotate (reload ) が失敗する: /lib64/libresolv.so.2: symbol __h_errno, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference

hiboma.hatenadiary.jp hiboma.hatenadiary.jp 上記エントリの続きです 前回まで調べていたこと CentOS7 で glibc をアップデート後、 mod_php + httpd の logrotate (reload ) が失敗するのを調べていた 失敗する際に以下のログを出す Graceful restart req…

CentOS7 で glibc をアップデート後、 mod_php + httpd の logrotate (reload ) が失敗する: /lib64/libresolv.so.2: symbol __h_errno, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference

CentOS7 で glibc をアップデート後、mod_php + httpd の logrotate(reload) に失敗する という内容を追いかけるエントリです (追記) 社内で共有してみたところ、前に踏んだ && 対応してたという事例もあがってきた。よくある問題なのかなぁ 経緯 社内の同僚…

Linux Kernel CVE-2018-5390 SegmentSmack の PoC を書いて分析・検証した

表題の通り Linux Kernel に付いた CVE-2018-5390 / SegmentSmack の PoC を書いて検証・観察をしていた VirtualBox で CVE-2018-5390 SegmentSmack を再現できたぽい? ( si = software interrupts が 100% 近くで張り付く + tcp_collapse_ofo_queue() を呼…

【続 Vol.3 】ClamAV - clamd の OnAccessExtraScanning 機能のメモリリークをレポートした - 0.1002 が出た

hiboma.hatenadiary.jp hiboma.hatenadiary.jp ↑ のようなエントリを書いていたが、0.100.2 がリリースされて次の展開を見せた blog.clamav.net On-Access "Extra Scanning," an opt-in minor feature of OnAccess scanning on Linux systems, has been disa…

Linux Kernel CVE-2017-18017 の Poc を書いて検証した

表題の通り CVE-2017-18017 の PoC を書いてどのような影響があるのを検証・観察した ⚠️ 一年以上前に修正パッチが出ている CVE です CVE の Description The tcpmss_mangle_packet function in net/netfilter/xt_TCPMSS.c in the Linux kernel before 4.11,…

【続 Vol.2 】ClamAV - clamd の OnAccessExtraScanning 機能のメモリリークをレポートした

2018年3月に ClamAV のバグレポートを出していた hiboma.hatenadiary.jp 最近、進捗があったようで、以下のようなコメントをもらった Due to time constraints in the development process for version 0.101, OnAccessExtraScanning will be disabled in th…

procfs の hidepid オプション

Linuxカーネルの Changelog を斜め読みしていたら hidepid オプションなるものが出ていたのを知りました。 ps や top 等のコマンドを使うと他ユーザのプロセス名やその他の情報を procfs (/proc) を通していい感じに参照できますが、procfsの仕組みとしてこ…

Apache MPM worker の pmap が分からんという話から Linux pthread (NPTL) のスタックサイズとガード領域まで

ひょんなことから 32bit カーネルで動いている Apache (MPMは worker = マルチスレッド) を /usr/bin/pmap で調べていました。調べている中で pthread のスタックの割当テ方にも興味がわいたので glibc なども深追いして調べました。以降の内容は次の環境で…

initプロセスをstraceする

initプロセス ( pid = 1 ) を strace できることを昨日知りました下のログは Ubuntu Server、カーネルは 2.6.38 で実行したものです # strace -p 1 Process 1 attached - interrupt to quit select(11, [3 5 6 7 8 9 10], [], [7 8 9 10], NULL) = ? ERESTAR…

ブラウザの名前解決が遅い時は

IPv6->IPv4にするhttp://linux2ch.is.land.to/index.php?NetworksFAQs#f8b2e994 ブラウザなどで名前解決が異常に遅いです †アクセスの際に IPv6 で接続しようとするため、アドレス解決に時間がかかっていると考えられます。その結果、ページが表示されるまで…

Ubuntu入れた

Macを手に入れてから一戦を退いてたDynabook E7にUbuntuを入れてみました。何も問題なく一発で入ったのが嬉しいです。以前ほかのディストリビューションを試した時は全然ダメだったからなぁ。

zshで最後に打ったコマンドをEmacsの編集中バッファに挿入する

下記のelispを.emacs.el等に貼付けてから M-x zsh-last-historyすると,zshで最後に打ったコマンドを編集中のバッファに挿入します。ChangeLogとか書いてる時にコマンド履歴をいちいちコピペするの面倒だと思って書いた。 環境に依存しないとは思うけど、いち…

colordiffでdiffの色づけ

zsh: diffの結果をvimで色付けして表示するグローバルエイリアス でも、diffの結果はちょっと読みにくい。もしdiffの結果が色付けされていたら、もっと読みやすいじゃないかと、今日ふと思いました。 そこで、zshのグローバルエイリアスを使って、diffの結果…

まじで手が滑った

root /home/svnroot/wkdir # rm -rf /* rm: cannot remove directory `/boot': デバイスもしくはリソースがビジー状態です rm: cannot remove `/dev/pts/0': 許可されていない操作です rm: cannot remove `/dev/pts/1': 許可されていない操作です rm: cannot…

インストール

友達がRubyを勉強する環境を作りたいって言うので、Linuxのインストールしてあげた。(WindowsでRubyの方がいいんだろうけど、ま せっかくだからLinuxでもやってみたらーとおせっかい焼いてみた)ひさしぶりにLinuxのGUIを見て新鮮な気分になった。

WebDAV

試験的に自分のサーバーにWebDAV/Apacheを導入してみた。サーバー機のディストリビューションはVine Linuxなので下記のサイトを参考にやってみた。すんなり上手くいった。 http://vinememo.mydns.jp/2006/06/webdav_1.html肝心のWebDAVそのものが何かという…

/var/log/secure

cat /var/log/secure すると Aug 14 07:21:27 localhost proftpd:...(略) Aug 14 07:21:27 localhost proftpd:... Aug 13 22:22:33 localhost proftpd:... Aug 13 22:22:33 localhost proftpd:... Aug 14 07:23:20 localhost proftpd:... とログが並んでる…