週刊? Linux Kernel Patch Watch 20180520

前書き

細かいpatchも見ているとなるほどーなとか勉強になりますね

今週のpatch

2038年問題対応

[PATCH 0/6] Transition vfs to 64-bit timestampsです。VFSがstruct timespecを使っているところで、この構造体は2038年問題があるのでstruct timespec64に置き換え。

typo修正

[PATCH] cramfs: Fix IS_ENABLED typoです。 fs/cramfs/inode.cで4.15からtypoってたようです。利用者数とかもあるんでしょうけど、意外と気付かれないものですね。

boot初期のhashed pointer表示

[PATCH] vsprintf: Add command line option debug_boot_weak_hashです。早い段階だと十分なエントロピーがないため、ポインタのアドレスをhash値で表現できずに固定の文字列表示になってしまうのですが、これだとデバッグが難しいということで、bootの初期段階でもhash値を作れるようにするpatchです。

空の/proc//cmdlineは許可しない

[PATCH] proc: Don't allow empty /proc/PID/cmdline for user tasksです。カーネルスレッドがの場合、/proc//cmdlineが空になっていて、ps(1)等はこれでプロセスがカーネルスレッドか判定してるそうです。ただ、この挙動は普通のユーザーランドのプログラムでエミュレートできるので止めようとのことです。

secompのフィルターに引っかかったらユーザ空間に通知

[PATCH v2 0/4] seccomp trap to userspaceです。secompでフィルターに引っかかったらそれをユーザーランド側に通知する仕組みの追加です。カーネル側に色々と処理を持たすよりもユーザーランド側で処理するようにしたほうが柔軟にもなりますね。

その他

UPのシステムでfor_each_cpu()がバグってる?

for_each_cpu() is buggy for UP kernel?です。

以下のイテレータで、システムがUni Processorな場合でmaskに0が設定されていてもmaskの値が無視されているからループが一回走ってしまって良くないということです。

#define for_each_cpu(cpu, mask)                 \
        for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask)

4.16.10だとUPでない場合はfor_each_cpu()はこのようになっていて、maskの値が使われます。

/**
 * for_each_cpu - iterate over every cpu in a mask
 * @cpu: the (optionally unsigned) integer iterator
 * @mask: the cpumask pointer
 *
 * After the loop, cpu is >= nr_cpu_ids.
 */
#define for_each_cpu(cpu, mask)                \
   for ((cpu) = -1;             \
       (cpu) = cpumask_next((cpu), (mask)),    \
       (cpu) < nr_cpu_ids;)

これについては過去に議論されたけど、結論はでてないとのことでした。

あとがき

(´-`).。oO(遅れましたがなんとか