コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2025年3月7日 >>> 2025年2月22日
link もっと後

2025年3月7日

wchanとptrace_may_access()

目次: Linux

以前、LinuxのI/O統計情報が読めないプロセス(systemd --user)がある話をしました。/proc/[pid]/ioファイルのreadアクセス権があっても、ptrace_may_access()の判定で拒否されるためにread()時にEPERMエラーになります。読めるかどうかの判別がopen()時にできず、試し読みでread()するしかない面倒な作りです。

今回はさらに判別が面倒な例/proc/[pid]/wchanについてのメモです。wchanはCONFIG_KALLSYMS=yになっていれば機能するはずです。

wchanの挙動

I/O統計情報と同様にwchanも特権の有無で挙動が変わります。動作例を見た方が早いでしょう。

/proc/[pid]/wchanの挙動変化
$ LANG=C ps aux | grep 'systemd --user$'
katsuhi+    1535  0.0  0.0  22004 12048 ?        Ss   Mar08   0:00 /usr/lib/systemd/systemd --user

$ cat /proc/1535/wchan ; echo
0

$ sudo cat /proc/1535/wchan ; echo
do_epoll_wait

特権があればdo_epoll_waitが読めますが、特権がないと0が読めます。不思議な動きですね。

コードを確かめる

なぜこんなことが起きるのか?Linuxカーネルのコードも見ておきます。

/proc/[pid]/wchanの実装

// fs/proc/base.c

#ifdef CONFIG_KALLSYMS
/*
 * Provides a wchan file via kallsyms in a proper one-value-per-file format.
 * Returns the resolved symbol.  If that fails, simply return the address.
 */
static int proc_pid_wchan(struct seq_file *m, struct pid_namespace *ns,
			  struct pid *pid, struct task_struct *task)
{
	unsigned long wchan;
	char symname[KSYM_NAME_LEN];

	if (!ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS))    //★★これ★★
		goto print0;

	wchan = get_wchan(task);
	if (wchan && !lookup_symbol_name(wchan, symname)) {
		seq_puts(m, symname);
		return 0;
	}

print0:
	seq_putc(m, '0');
	return 0;
}
#endif /* CONFIG_KALLSYMS */

以前見た/proc/[pid]/ioと同様で、先頭にptrace_may_access()のチェックが存在していて、チェックに引っかかると常に'0'を返す実装になっています。読めるかどうかの判別がopen()でもread()でもできない、内容で判断するしかない新手のパターンです。

何かの事情でwchanを読めるかどうかチェックするとしたら、試しにread()して内容が'0'かどうかを見るwchan専用の処理を書くしかないですね。なかなか面倒な存在です……。

編集者:すずき(2025/03/15 18:16)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2025年3月3日

健康保険料率

給与明細を見ていて、なんか健康保険料がやたら高くないか……?と気になりました。要因の一つは見た目の問題です。今の会社はこれまで勤めてきた会社と給与制度が違ってボーナスがありません(年俸の12分の1 = 月給)から、同じ年収でもボーナスがある場合に比べて月給が高く見えます。でもこれは見た目だけの問題で気にしなくて良いです。

他の可能性があるとすると、所属する健康保険組合が全国健康保険協会(協会けんぽ)に変わったことです。協会けんぽ(令和6年3月〜、東京)の料率を調べると、

  • 40歳未満: 9.98%
  • 40歳以降: 11.58%

でした。ちなみに大手企業の健保は料率8〜9%くらいが多いらしいので、それと比べたら高いです。私のような40歳以降のおじさんだと、介護保険料1.6%が上乗せされるのでさらに高くなります。辛い。

VC健保は救いの神か?

会社の方針で協会けんぽから「VCスタートアップ健康保険組合」に切り替えるそうで、保険料率が下がるかもと案内がありました。うお〜良いじゃないかと思って調べてみると、

  • 40歳未満: 8.98%
  • 40歳以降: 11.16%(8.98% + 2.18%)

でした。若い人は確かに安くなります。ただ残念ながら40歳以降のおじさんの場合はあまり変わりません。介護保険が協会けんぽの1.6%より割高の2.18%に設定されているためです。スタートアップは若者が圧倒的に多いと思うので、若者が得する設計にするのは当然ですね。仕方ないね……。

編集者:すずき(2025/03/15 00:32)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2025年3月1日

レガシィの半年点検(2025)

目次:

先週、ディーラーに半年点検に持っていったら毎度おなじみのバッテリーがイカレていて、日帰りの予定が1週間の入院と相成りました。バッテリー液の比重が1.2くらいになっていたみたいです(本来の比重は1.28)。今度こそバッテリー交換を提案されるかな?と思いきや「充電してみます!」とのことでした。

今回も何とかバッテリー君は復活してくれたようで良かったです。次はもうダメそうな雰囲気を感じましたけど……これまでのバッテリーに比べたら割と長期間耐えているのでまあ良いでしょう。

バッテリーが早々にイカレてしまう原因は、社外セキュリティの待機電力がでかいことと、あまりにも乗らなさすぎなことで、大阪に住んでいた10年以上前から原因は明確なんですが、ライフスタイルはそんな劇的に変えられないのです。

編集者:すずき(2025/03/12 00:21)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2025年3月7日 >>> 2025年2月22日
link もっと後

管理用メニュー

link 記事を新規作成

<2025>
<<<03>>>
------1
2345678
9101112131415
16171819202122
23242526272829
3031-----

最近のコメント5件

  • link 24年12月9日
    すずきさん (03/14 00:42)
    「Thanks for your comm...」
  • link 24年12月9日
    hyfanさん (03/13 07:21)
    「Hello from Santa Cla...」
  • link 25年2月10日
    すずきさん (02/13 02:03)
    「解読しました。なるほど、exitの引数が...」
  • link 25年2月10日
    hdkさん (02/12 08:06)
    「あ、すみません、比較元に間違いがありまし...」
  • link 25年2月10日
    hdkさん (02/12 08:01)
    「なるほど、最後に%rdiを0にするのはこ...」

最近の記事3件

  • link 23年4月10日
    すずき (03/15 18:17)
    「[Linux - まとめリンク] 目次: Linux関係の深いまとめリンク。目次: RISC-V目次: ROCK64/ROCK...」
  • link 25年3月7日
    すずき (03/15 18:16)
    「[wchanとptrace_may_access()] 目次: Linux以前、LinuxのI/O統計情報が読めないプロセス(...」
  • link 25年3月3日
    すずき (03/15 00:32)
    「[健康保険料率] 給与明細を見ていて、なんか健康保険料がやたら高くないか……?と気になりました。要...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 2025年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www2.katsuster.net
RDFファイル RSS 1.0

最終更新: 03/15 18:17