サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ドラクエ3
kernhack.hatenablog.com
tl;tr 2023/02/17に放送大学の2023年2学期の成績発表もされ、卒業要件の124単位も一通り取りきったのでなんとか4年で卒業できる感じになりました😊 放送大学に入ったときのblogエントリはこちら。 kernhack.hatenablog.com 学位の情報も登録されているし、4年間の区切りがついたなあと🌝 まあ、学位の情報は成績発表の3日位前にシステム上で登録されてるのを確認できてたので正式な成績発表前に履修した科目の単位を取れてたことは知ってたんですけどね🥲 履修した科目 取得した単位は124単位で、そのうち放送授業が104単位、面接・オンライン授業が20単位でした。 以下が自分が履修した科目です。所属コースは情報コースなので当然情報コースからの履修が多く、社会と産業からは仕事で役に立つこともあるだろう経営学系、経済関係の知識も欲しいよねというところで経済系などを取
fapolicydがどのようにアプリケーションの実行を禁止しているのだろうか?と思って調べためもです。 fapolicydがアプリケーションの実行を禁止する仕組み 仕組みとしてはfanotifyの仕組みを使ってファイルが実行のために開かれた場合に通知を受け取り、設定されたルールを調べて実行可能かどうかを返すということをしてます。 fanotify fanotifyの機能を使うには2つの関数があります。fanotify_init(2)とfanotify_mark(2)の2つです。fanotify_init(2)で初期化をしてファイルディスクリプタを得ます。次にfanotify_mark(2)で通知を受け取りたいイベントなどを設定します。イベントの受信はpoll(2)を使います。pollfd構造体の配列のうち1つはfanotify_init(2)によって初期化したfdを設定します。 実行の許可
この記事はLinux Advent Calendar 2020の17日目の記事です。 OSSのコントリビュート方法はpatchを書いたりドキュメントを翻訳したり、バグレポートしたりと色々な方法がありますね。fedoraでテストというとリリース前のベータ版のテスト、パッケージがアップデートされた際のテスト(QA:Updates Testing - Fedora Project Wiki)、テストイベントのTest Days(QA/Test Days - Fedora Project Wiki)などがあります。 updates-testing このなかで手軽なものとしてはupdates testingがあります。fedoranはパッケージがアップデートされる場合、最初にupdates-testingリポジトリに更新されたパッケージが入ります。その後、基本的には以下のルールに則ってパッケージがu
この記事はLinux Advent Calendar 2020の24日目の記事です。 自分がLinuxを使いだした頃、OSはどうやってブートしてんるんだろう🤔とか色々知りたくて買ったのが↓の本です。 Linuxカーネルインターナル 買った当時は知識がなくて読むのが大変だったけど今はそれなりに読めるようになり、さすがに成長したなとも思ってみたり😃 初版が1999年6月25日と書いてあるので2000年台の始めの頃に買ったんでしょう。それにしても翻訳版の初版が発行された時点からでも21年前の本ということか。 この本が対象としているのはLinux 2.0です。目次は次のようになってます。メモリ管理、ファイルシステム、モジュール、ネットワーク等々ありますね。基本的な機能は変わってないので現在のカーネルでこの目次の内容に沿ってコードを読んでみるというのは面白いかもしれません。この記事を書いている時
この記事はLinuxその2 Advent Calendar 2020の4日目の記事です。 今回はtoolネタです。vgrepというgrep系のツールがあって結構便利です。これは今年のOpen Source Summit + Embedded Linux Conference North America 2020でのAsk the Expert SessionでGreg KHさんがコードを調べる時にvgrepを使ってると言っていたので知りました。 使い方はわりと簡単なのでREADME.mdを見ればOKだと思います。 grepとの比較 grep系のコマンドなので速さはどうなの?というところですが、qemu上のこんなriscv64環境(cpu4個、メモリ8GB)で試してみます。fedoraのriscv64版にもvgrepパッケージあります。 masami@fedora-riscv:~/linux
この記事はRISC-V Advent Calendar 2020の1日目の記事です。 RISC-Vの実機としてHiFive1 Rev Bを勢いで買いました😊 HiFive1 Rev B 64bitのRISC-V64GCならLinuxも動くんですけど、HiFive UnleashedはディスコンだしHiFive Unmatchedはまだ出てないので手軽に遊べそうなHiFive1 Rev Bで良いじゃんって感じです。手頃なサイズ感のRISC-V64GCが乗ったボードがあれば欲しいかも。 開発環境を整える それはさておき、うちのメイン環境はfedora 33です。そして開発環境を整えようと思ってこれらをダウンロードしてセットアップします。 Freedom E SDK GNU Embedded Toolchain — v2020.04.1 OpenOCD — v2020.04.6 J-Link
この記事はLinux Advent Calendar 2020 - Qiitaの1日目の記事です。 Tiny Core Linux(以下tcl)を使ってLinuxのブートプロセスを見てましょう。Tiny Core Linuxは軽量ディストリビューションで最小のisoイメージだと11MBほどです😃 ブートプロセスを見ると言っても電源onからの流れではなくてinitプロセスの実行に関する部分です。 この記事ではバージョン11.1のCore-current.iso を利用しています。 www.tinycorelinux.net isoファイルの構成 まずはtclのisoがどんな感じで構成されていて、Linuxを起動させるのか確認しましょう。 isoファイルの構成はこのようになっています。 $ sudo mount -o loop Core-current.iso ./mnt $ tree ./
Linux Advent Calendar 2019でunameコマンドから始めるデバッグ&カーネルハック入門という記事を書きました。 kernhack.hatenablog.com このときはFedora 31を実験環境として選んで書いたんですが、環境をCentOS 8にして内容を加筆修正して電子書籍にしました。 masami256.booth.pm 目次はこんな感じです。 strace、gdb、bcc、bpftrace、カーネルハック、Livepatch、systemtapでunameコマンドと戯れる内容です。 BOOTH様便利ですね👍 booth.pm CentOS8 実践ガイド [システム管理編] impress top gearシリーズ 作者:古賀政純発売日: 2020/03/13メディア: Kindle版
機種依存ですが、fedoraで5.4系のカーネルで起動時にカーネルパニックするようになり、自分もこのバグに当たったので修正してパッチをlkmlに投稿しました。 このパッチはLinux5.5.に取り込まれました🎉 github.com ついでなのでどんな感じでデバッグしたかの記録です。10日前くらいの話だし、デバッグ時の思考の時系列は多少違う気もしますがだいたいこんな感じということで。 環境 こんな感じです。 fedora 31 5.4.7-200-fc.31 Thinkpad A587(cpuはRyzen) Secure Boot有効 バグの内容 自分がこのバグに当たったときにはfedoraのbugzillaにすでにバグ登録されてました bugzilla.redhat.com 5.4系のカーネルだと起動時にカーネルパニックする☠という内容です。実際こんな感じでした。 oops ただ、自分
fedoraなら多分一番手軽だと思う署名方法です。他のディストリビューションはわかりません😭 テスト環境 ディストリビューションは(もちろん) fedoraです。バージョンは31です。実機ではなくてqemuでテストしました。 準備 まずpesignとnss-toolsパッケージをインストールします。pesignパッケージをインストールするとpesignコマンドなどのバイナリの他に/etc/pki/pesign/と/etc/pki/pesign-rh-testにデータベースがインストールされます。今回は/etc/pki/pesign-rh-testにあるものを使います。 署名前の準備 まずcertificateファイルを取り出します。 $ sudo certutil -d /etc/pki/pesign-rh-test -L -n "Red Hat Test CA" -r > rhca.c
この記事はLinux Advent Calendar 2019の1日目の記事です。 はじめに 環境 おことわり uname(1) uname(1)が出力する内容 strace(1) gdb(1) bpftrace systemtap Kernel Hack Livepatch おまけ RHEL 8.1 CentOS 8 まとめ はじめに 本記事ではLinuxサーバのホスト名、Linuxカーネルのバージョン、cpuアーキテクチャなどのシステム情報を表示するuname(1)を利用してLinux環境でのデバッグとカーネルハックについて説明していきます。本記事ではコマンドやツールの使い方の説明ではなくて、それらを使ってどのようにデバッグするのかというところを説明します。 環境 ディストリビューションにはFedora 31(x86_64)を利用します。動作環境はQEMUやlibvirt、Oracle
FedoraではkernelのテストイベントとかGnome 3.34 Test Day、I18N Test Day などのテストイベントがちょくちょくあります。 今回はKernel 5.3 Test Weekの備忘録です。ちなみに、この手のイベントはfedora MAGAZINEで紹介されることがあります。 今回の参加結果の最終成果はこちらです。 github.com 参加ε≡≡ヘ( ´Д`)ノ 今回のtest weekは開催時期が9月末から10月の最初の週でちょうどfedora 31のリリースが近かったころです。当時のfedora 29と30はカーネルは5.2系が使われていて、fedora 31が5.3系って感じでした。メインラインは5.4のrc1が出てた辺りです。それでfedora 31もそろそろ出るし、ベータとかrcのテストも参加してなかったし、メインラインのカーネルも最近使ってない
このブロクで使ってるカテゴリは↓のようになっていて、こいつLinuxとかカーネル好きだなって感じなんですが、前まではLinux自体は使うけどそれくらいでガッツリとLinuxに絡んだりとかはしてませんでした。 前職はこんな感じのところでnodejsなんかのコード書いてわけですね。 web系っぽい記事もたまに書いてましたよw qiita.com とまあ、前職はweb系だったわけですが今はLinuxがっつりな仕事になってます。転職したのは去年の12月ですけどね。Linuxが好きでいろいろやってきて、そこでやったことをblogに書いたりしたわけですが、それも今の仕事で役立つことがあったりとまあ何が役立つかわからないものですね。メモリ管理に興味を持ったり自作OSに興味を持ったり、CTFだったりと低レイヤ周辺をウロウロしてたけど基本的な部分はブレなかったのが良かった気がします。 継続は力なりなんて格言
はじめに 名前空間 名前空間の利点 名前空間の種類 Mount名前空間 IPC名前空間 UTS名前空間 Net名前空間 PID名前空間 User名前空間 名前空間の管理 プロセスと名前空間 名前空間のエクスポート nsfs 名前空間共通データ NSProxy構造体 NSProxyと名前空間 参照カウンタ NSProxyと名前空間の関連 名前空間へのアクセス デフォルトの名前空間 名前空間の共有・分離・移動 名前空間の共有と複製 fork(2) clone(2) fork(2)・clone(2)時の処理 unshare(2) 名前空間の分離処理 名前空間の移動 setns(2) 名前空間の移動処理 Mount名前空間 Mount名前空間の実装 Mount名前空間の初期化 Mount名前空間の分離 IPC名前空間 IPC名前空間の実装 IPC名前空間の初期化 UTS名前空間 UTS名前空間の実
はじめに スラブアロケータ以外の動的メモリ確保 vmalloc関数 vmalloc関数で使用するデータ構造 vmallocの初期化 vmallocでのメモリ確保 vfree関数でのメモリ解放 その他の非連続メモリ領域からメモリを確保する関数 vmap関数 ioremap関数 /proc/vmallocinfoによるメモリ確保状況の確認 はじめに 前回のLinuxカーネル4.1のSLUBアローケータ(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモと同じくドラフト版公開です。こちらはLinuxカーネル4.1のメモリレイアウト(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモで説明しなかったvmalloc()の説明です。 カーネルのバージョンは4.1系です。 文書自体も完成版ではないし、markdownから手作業ではてなblogにコピペして修正してるので章立
はじめに ユーザプロセス空間とカーネル空間 x86_64のメモリレイアウト ダイレクトマップ(ストレートマップ)領域 vmalloc/ioremap領域 仮想メモリマップ %esp fixup stack カーネルテキスト領域 モジュールマッピング領域 vsyscall 固定マップ領域 はじめに 前回のLinuxカーネル4.1のSLUBアローケータ(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモと同じくドラフト版公開です。 カーネルのバージョンは4.1系です。 文書自体も完成版ではないし、markdownから手作業ではてなblogにコピペして修正してるので章立てとか変になってるところとかあるかもしれませんが気にしないでください。 一部は文書修正してます。 ユーザプロセス空間とカーネル空間 Linux x86_64では48bit(256TiB)のアドレス空間を使用できます
はじめに スラブアローケータ Linuxのスラブアローケータ slabアローケータ slobアローケータ slubアローケータ スラブオブジェクトの管理 使用中リスト スラブのマージ機能 Chache Coloring スラブの不活性化 frozen状態 スラブキャッシュの情報 slubアローケータのデータ構造 データの関連 slubアローケータで使用するデータの関連 スラブのライフサイクル スラブアローケータの機能 スラブキャッシュの作成 スラブキャッシュ生成時に設定するフラグ 空きオブジェクトの管理 空きスラブオブジェクトの設定 スラブオブジェクトの確保 スラブオブジェクトの解放 kmem_cache_cpu構造体のデータクリア スラブの不活性化 スラブの削除 スラブキャッシュの削除 スラブキャッシュのセットアップ slubアローケータで使用するヘルパー関数 __cmpxchg_dou
Fedora 30でChanges/BootLoaderSpecByDefaultというプロポーザルがあって、Fedora 30βでは実際にこの仕様になってます。カーネルを弄る人にはちょっと影響があるかなって感じです。 仕様 The Boot Loader Specificationに書かれています どんな風になったか boot時のgrubの画面は変化はありません。 grub 変わったのはエントリーの書き方です。今まではgrub.cfgにエントリーを追加していたわけですが、カーネルのエントリー部分が独立した感じです。 root@kerntest:/home/masami# ls /boot/loader/entries/ 9575947ef933448ea2005318c989c813-0-rescue.conf 9575947ef933448ea2005318c989c813-5.0.6
この記事はLinux Advent Calendar 2018の12日目の記事です。 カーネルのソースコードに含まれるscripts/を探索してみます。カーネルのビルド中で使うようなものもあるし、それ以外の時に使うものもあります。今回は後者の方を探してみましょう。 diffconfig ファイルはsrcipts/diffconfigです。カーネルの.configのdiffを見やすくするツールです。 普通にdiffを取るとこんな感じです。 masami@saga:~$ diff -u /boot/config-4.19.9-300.fc29.x86_64 /boot/config-4.19.12-301.fc29.x86_64 --- /boot/config-4.19.9-300.fc29.x86_64 2018-12-14 02:44:50.000000000 +0900 +++ /bo
この記事はLinux Advent Calendar 2018の1日目ですΣ(゚∀゚ノ)ノキャー イントロ ほんとは別の内容にしようと思ってたのですが、進めてる途中でカーネルのデバッグをするハメになったのでカーネルデバッグをネタにしてみました。カーネルのデバッグと言っても普通のデバッグと変わらないよね〜というところがわかると思います。(`・ω・´)<コワクナイヨー デバッグの環境としてはlibvirt(qemu)で動いてるゲスト環境にホスト側からgdbでデバッグする感じです。ディストリビューションはFedora 29です。デバッグするカーネルはFedoraのカーネルで4.19.2-300.fc29.x86_64です。 テストコード テストコードは↓です。これはdebugfsのディレクトリ(大概は/sys/kernel/debug/だと思います)にopen-testってファイルを作って、その
qemuのstaticなバイナリとbinfmt_miscを使ってdockerでクロスビルド環境を作ってみます。 今回作ったものはこちらに置きました。 github.com 環境 HostはFedora 29で、arm64v8/fedoraにあるaarch 64のFedora 28(2018/10/11時点でのlatestはfedora 28です)。このイメージはオフィシャルなものです。 qemu qemuのパッケージで必要なのは qemu-user-static です。これをサクッとインストールしましょう。 binfmt_misc つぎにbinfmt_miscの設定が必要なんですが、fedoraの場合systemdのproc-sys-fs-binfmt_misc.mountが動いてればOKです。自分の場合はインストールした後に所要で再起動したのですが、restartとかすれば良い気がします
CVE-2018-14634(Integer overflow in Linux's create_elf_tables function)でRed Hatのbugzillaを見ていて軽減策としてsystemtapでlivepatch的なことをしていて面白いな〜って思ったのでめもです。 環境はFedora 28で、カーネルのバージョンは4.18.9-200です。systemtapを使っているのでkernel-debuginfoパッケージも入れてます。 utsname構造体のnodenameを書き換えてホスト名を変えてみたいと思います。まずは初期状態はこうです。kerntestがnodenameになります。 masami@kerntest:~$ uname -a Linux kerntest 4.18.9-200.fc28.x86_64 #1 SMP Thu Sep 20 02:43:23
KVMよりもEPTの使用前提なbhyveのほうがコード読みやすかったのです。Nested Paging in bhyveというFreeBSDのメモリ管理からbhyveでのEPT周りの実装を解説した論文があったのも理由としては大きいですね。 EPTPの設定 vmx_vminit()という関数でeptpの設定をする関数を呼びます。 814 static void * 815 vmx_vminit(struct vm *vm, pmap_t pmap) 816 { 817 uint16_t vpid[VM_MAXCPU]; ~ 略 ~ 827 } 828 vmx->vm = vm; 829 830 vmx->eptp = eptp(vtophys((vm_offset_t)pmap->pm_pml4)); pmap_tはpmap構造体で、PML4のアドレスを保持している(LinuxだとPGD)。
Linuxとかカーネル方面のYoutubeチャンネルをめも hupstream Kernel Recipesというタイトルのシリーズがカーネルの濃い発表動画。 www.youtube.com KVM Forum KVMやQEMUなど。 www.youtube.com The Linux Foundation 色んなカンファレンス動画がある。 www.youtube.com USENIX 色んなカンファレンス動画がある。 www.youtube.com Fedora Project Flockが開発者・ユーザーがあつまるイベントでディストリビューションの開発に関するネタが多い。 www.youtube.com DebConf Videos Debianのカンファレンス。 www.youtube.com FOSDEM FOSDEM(Free and Open Source Developmen
KVMはioctl(2)でVMを作ったりvcpuを作ったりします。この時に使うfdは/dev/kvmファイルに対してioctl(2)を実行した時の戻り値です。ioctl(2)の戻り値がioctl(2)可能なfdとなってます。ユーザーランドに返すfdはどうやって作るのかというのが今回のめもです。 早速ですが、出来たコードはこうなります。 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include <linux/module.h> #include <linux/kernel.h> #include <linux/slab.h> #include <linux/anon_inodes.h> #include <linux/string.h> #include <linux/miscdevice.h> #include <linux/fs.h> #i
前に仕事で作ったdockerを使ったwebアプリの開発環境の覚書です。 実環境はAWSで動いていて、ALBがhttpsでリクエストを受けてALBとwebアプリはhttpで通信します。このような構成をdockerで作りたかったわけです。 簡単な概要はこんな図になります。 ALBのところをNginxのリバースプロキシに置き換えて作りました。 Nginxのリバースプロキシはこんな設定です。 server { listen 443; server_name www.webapp-test.local; ssl on; ssl_certificate /etc/nginx/server.crt; ssl_certificate_key /etc/nginx/server.key; location / { proxy_set_header Host $host; proxy_set_header X
なんとなくやってみた系ですね。 今回はCONFIG_DEBUG_OBJECTSのところです。 CONFIG_DEBUG_OBJECTS_FREEがkmalloc/kfreeをヘヴィにつかうような場合にパフォーマンス劣化するよーなんていってます。 まずはCONFIG_DEBUG_OBJECTSの項目を全部無効にした場合。 この時点でもロック周りに時間取ってますね。 hackbenchを引数 10 process 20000 で実行してる時の様子がこんな感じです。 次にCONFIG_DEBUG_OBJECTSの項目を全部無効にした場合。 起動した時点でかなりの時間をロックで使ってます。 そして、hackbenchを同じく実行するとこうこうなります/(^o^)\ このときはこんな感じになっていてもうどうにもならない感がありますね。 説明に書いてあるとおり、ほんと遅くなりますね。 ( ´ー`)フゥ
ゲスト側のLinuxカーネルでシリアルコンソールを有効にしているときに、ホストからpythonでシリアルコンソールにアクセスするときメモです。 ゲスト側はカーネルのコマンドラインでシリアルの設定をするのと、qemuのオプションで-serial ptyとしてptyを使うようにする。 $ qemu-kvm -initrd ./initramfs-4.17.2-200.fc28.x86_64.img -kernel ./vmlinuz-4.17.2-200.fc28.x86_64 -m 512 -append "console=ttyS0,115200" -serial pty -nographic QEMU 2.11.1 monitor - type 'help' for more information (qemu) qemu-system-x86_64: -serial pty: char
前書き (´-`).oO(ほんとに小ネタが多いな 今週のpatch vdsoの未使用ファイル削除 [PATCH] x86/vdso: remove unused fileです。読まなくて良いファイルが消えるのは良いことですね。 gcc8でobjtoolのワーニングがたくさん出る問題 Kernel build with gcc 8 a lot of warningsで相談が始まり、[PATCH 0/3] objtool: GCC 8 supportでpatchが投げられてます。こちらのレスポンスで具体的な問題の内容とか修正内容の説明もされてます。 Fedora 28、Archあたりはgcc8なので影響受けている人いますね。 フォーマット指定しのチェックをするのに__printf()が良いよ [PATCH] slub: add printf verification to ‘slab err’
次のページ
このページを最初にブックマークしてみませんか?
『φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く