linux
gdb turns off ASLR « codeblogを見ていてpersonality(2)を使えば良いのか〜と知ったのでめもです。 tl;dr personality(2)でADDR_NO_RANDOMIZEをセットすればoffにできる。 personality(2) aslr以外にも設定可能な項目はいくつか有ります。設定されている内…
libbfdの使い方のめもです。利用してるバージョンはbinutils-devel-2.31.1-13.fc29.x86_64です。 nmもどき アドレスとセクション名、それにdebug情報があればファイル名と行数を表示。連想配列が使いたかったのでヘッダファイルだけで実装されてるuthashとい…
忘れないようにメモっとこうという程度なので大したことはしてないです。 aarch64やarmhfpのイメージはIndex of /pub/Linux/Fedora/releasesから取得したとします。 qemuのバージョン ホストはx86_64なFedora 29で、qemuは3.0.0になります。 masami@saga:~/a…
When I did grep kernel symbol address, addresses were all zero. masami@saga:~$ grep slab_alloc /proc/kallsyms 0000000000000000 t ___slab_alloc 0000000000000000 t __slab_alloc So, I checked kptr_restrict if it's not zero. masami@saga:~$ sud…
qemuのstaticなバイナリとbinfmt_miscを使ってdockerでクロスビルド環境を作ってみます。 今回作ったものはこちらに置きました。 github.com 環境 HostはFedora 29で、arm64v8/fedoraにあるaarch 64のFedora 28(2018/10/11時点でのlatestはfedora 28です)…
sysfs、debugfs、procfs等でファイルを作ってユーザーランドからreadするときにseq_file構造体を使う方法が有るけど使ったことなかったのでめもです。 コード こんな感じです。 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include <linux/module.h> #include <linux/kernel.h> #include <linux/string.h> </linux/string.h></linux/kernel.h></linux/module.h>…
CVE-2018-14634(Integer overflow in Linux's create_elf_tables function)でRed Hatのbugzillaを見ていて軽減策としてsystemtapでlivepatch的なことをしていて面白いな〜って思ったのでめもです。 環境はFedora 28で、カーネルのバージョンは4.18.9-200で…
runtime.jsを試してみたのでメモ書きです。 runtme.jsはunikernelの一つでカーネルにv8のエンジンが組み込まれてて、JavaScriptの実行がサポートされています。runtime.jsのサンプルで、eshttpを使ったwebアプリのサンプルが有ったのでこれを使って動かして…
Linuxとかカーネル方面のYoutubeチャンネルをめも hupstream Kernel Recipesというタイトルのシリーズがカーネルの濃い発表動画。 www.youtube.com KVM Forum KVMやQEMUなど。 www.youtube.com The Linux Foundation 色んなカンファレンス動画がある。 www.y…
KVMはioctl(2)でVMを作ったりvcpuを作ったりします。この時に使うfdは/dev/kvmファイルに対してioctl(2)を実行した時の戻り値です。ioctl(2)の戻り値がioctl(2)可能なfdとなってます。ユーザーランドに返すfdはどうやって作るのかというのが今回のめもです。…
なんとなくやってみた系ですね。 今回はCONFIG_DEBUG_OBJECTSのところです。 CONFIG_DEBUG_OBJECTS_FREEがkmalloc/kfreeをヘヴィにつかうような場合にパフォーマンス劣化するよーなんていってます。 まずはCONFIG_DEBUG_OBJECTSの項目を全部無効にした場合。…
ゲスト側のLinuxカーネルでシリアルコンソールを有効にしているときに、ホストからpythonでシリアルコンソールにアクセスするときメモです。 ゲスト側はカーネルのコマンドラインでシリアルの設定をするのと、qemuのオプションで-serial ptyとしてptyを使う…
前書き 細かいpatchも見ているとなるほどーなとか勉強になりますね 今週のpatch 2038年問題対応 [PATCH 0/6] Transition vfs to 64-bit timestampsです。VFSがstruct timespecを使っているところで、この構造体は2038年問題があるのでstruct timespec64に置…
前書き (´-`).oO(ほんとに小ネタが多いな 今週のpatch vdsoの未使用ファイル削除 [PATCH] x86/vdso: remove unused fileです。読まなくて良いファイルが消えるのは良いことですね。 gcc8でobjtoolのワーニングがたくさん出る問題 Kernel build with gcc 8 a …
前書き 今週もなんとか小ネタを集めて。。。 今週のpatch IRQのon/off切り替わり時のトレースポイントでパフォーマンス劣化してた [PATCH RFC] tracepoint: Introduce tracepoint callbacks executing with preempt onです。hackbenchで〜10%のパフォーマン…
たまにやる必要があったりするのでメモです。 まずは。。。 pagerを1に設定することで、出力内容が多い時に(catとかで)moreとlessみたいに1ページ毎にページ送り出来ます。これないと辛い。。 setコマンドで引数渡さなければ現在の設定が見れます。これで…
前書き 2018 Linux Storage, Filesystem, and Memory-Management Summit関連の記事でlwn.netに面白そうな記事が増えてる今日この頃ですヽ(=´▽`=)ノ 今週のpatch メモリを確保してデータを書き込んだあとはR/Oにするpmalloc() 前にlwn.netでも紹介されてたかも…
前書き 今週も細かいネタを拾っていきます。重要そうなpatchはLWN.netをチェックしましょう。lwnはSubscriberになると最新の記事がすぐに読めて快適ですΣ(゚∀゚ノ)ノキャー 今週のpatch cpuタイマーのバグフィックス LKML: Laura Abbott: [PATCH] posix-cpu-timers:…
まえがき 週刊Railsウォッチというrailsを中心とした記事がとても良い感じで、これのカーネル版あったら嬉しなということで自分でやってみました(*´Д`) どれくらいのボリュームでとか、毎週ちゃんと書くのかは全く不明でございます。 我々にはWelcome to LW…
最近のgccはインラインアセンブラ内からcのgotoラベルに飛べる仕組みがあるのでそれのメモです。 ドキュメントはUsing the GNU Compiler Collection (GCC): Extended AsmとUsing the GNU Compiler Collection (GCC): Extended Asmです。たしかLKMLに送られて…
ふとvdsoで提供されている関数の一覧が見たくなったので。 dump vdso masami@saga:~$ gcc read_vdso.c -o read_vdso masami@saga:~$ ./read_vdso [*]read 2 pages [*]vdso start address is 0x7ffd532fb000 [*]write data [*]Done. masami@saga:~$ file vdso…
Linuxのしくみの5章でページングの説明がありますね。なんとなく、この辺の挙動をエミュレートする感じのものでも作ってみようかなと思ったりしたので。 リポジトリはこちらです。 github.com ページングのコードを実際に書くなら自作OSを書くのが良いと思い…
著者の武内さんより「[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識」を献本いただきました。ありがとうございますm( )m 武内さんはQiitaなどでもわかりやすいカーネルの解説記事を書かれているので、記事を読んだことが有る方も…
カーネルをgdbでリモートデバッグできるようにするかーとか思ってやってたわけです。 しかし、下記のような感じでちょっとハマってました。 ブレークポイントが効かなかったり vmlinuxとvmlinuzの組が合ってるのにシンボル名が出なかったり Cannot access me…
/proc/cpuinfoでcpuの機能を表示するflagsのところってどうやって名称設定してんだろ?と思ったので調べてみたメモです。調べたカーネルのバージョンはv4.14.12です。 ↓これですね /proc/cpuinfoのopen処理 これはfs/proc/cpuinfo.cにあるcpuinfo_open()が担…
Linux 4.14でプロセスをforkした時のPage Global Directoryの設定を見てみます。読むカーネルはv4.14.12です。 前にLinux x86_64のPaging:Page Global Directory辺りの扱いを見てみる - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ書いてたけど、最新のカー…
この記事はLinux Advent Calendar 2017の9日目の記事です。 なんとなくlib/を見ていたらonce.cなんてファイルを見つけて、一度だけ実行したいという時に使う関数を見つけたのでその機能についてのきじになります。 使い方 まず使い方をザクっと見てみましょ…
この記事はLinux Advent Calendar 2017の22日目の記事です。 カーネルのコードを書いていてサイズを表示したい時にstring_get_size()を使うとお手軽に2進接頭辞(KiBとか)とSI接頭辞(KBとか)を使ったサイズの文字列を作ることができます。 関数のプロトタイ…
この記事はIT勉強会/コミュニティ運営 Advent Calendar 2017の3日目の記事です。2日目はikkouさんのIT勉強会/コミュニティ運営 Advent Calendar 2017 をやるよ、あるいは今からでも書いてくれる人を募集しているよ、という話でした。 Linuxカーネルもくもく…
この記事はLinux Advent Calendar 2017の1日目の記事です。Linuxのスラブアロケーター仕組みを多少弄りながら学んでみます。 スラブアロケーターとはなんぞやというところはSlab allocation - Wikipediaを参照してください。スラブアロケーターはSolaris5.4…