2015-01-01から1年間の記事一覧

user_ns: task_structからuser_nsの取得めも

誰得なめも。task_structからuser_nsの取得の方法。 名前空間はstruct nsproxyで管理されているけど、user namespaceはstruct credが管理していて、user namespace以外の名前空間はその構造体にuser namespaceへのポインタを持っている。 このポインタがどう…

Linux: inodeからtask_struct構造体を取得

Namespace周りのコードを読んでいたらinodeからtask_struct構造体を取得をしているところがあって、こんなことできるんだ〜などと思ったのでどんな方法で取得するのか見てみます。 使ってた場所はproc_ns_follow_link()とかです。 ↓のように。 37 struct tas…

buddy system: __alloc_pages_slowpath()のざっくりとした流れ。

LinuxのPage Allocatorで __alloc_pages_slowpath()の流れをメモ程度に。 読んでいるカーネルのversionは4.0。 __alloc_pages_nodemask()でget_page_from_freelist()を呼んだ時にpageの確保ができなかった場合に呼ばれるのが __alloc_pages_slowpath()。 get…

aurのパッケージをaur4に移行した

Arch LinuxのAURにPKGBUILDをアップロードしている人には「AUR 4.0.0 migration notification」というメールが届きましたね。aru4になってもパッケージをメンテナンスしたいひとは6月8日〜7月8日での間にgitリポジトリにコミットしてねってということで、早…

Solaris 10が安かったので購入して仮想環境に入れてみた

単なるやってみた系ですm(__)m Twitterで↓を見て、「Solaris 10が108円なら買いだな!土曜日に行ってみて売ってたら買おう!」と思い、実際にアキバパレットタウンに行ったところ売ってたので買ってみました。 「SOLaris ¥108」アキバパレットタウン #akiba…

buddy allocator: __rmqueue_fallback()を調べる

前回の記事では__rmqueue_smallest()を見たので、今回は __rmqueue_fallback()を見ていきます。 この関数の呼び出し元は__rmqueue()で、__rmqueue_smallest()でメモリを確保できなかった場合に実行されます。 では、処理を見ていきましょう。 __rmqueue_fall…

buddy allocator: __rmqueue_smallest()を調べる

前回の「buffered_rmqueue()めも - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ」続きとして、__rmqueue_smallest()を読みます。 これは割と分かりやすい感じです。 では、見ていきます。 関数のプロトタイプはこうなっていて、引数はpageを確保する対象のzo…

firewalld+ipdeny.com+systemdでブラックリストに載ってるIPからの接続を弾く

iptableでもやってたんですが、firewalldに乗り換えたので。 実行するのはこのスクリプトです。何も考えずにファイルにあるものを追加していってますw ChainNameのところは使っているchain名に変えてください。 #!/bin/bash ZONE_FILE_URL="http://www.ipde…

firewalldでzoneを作ってsshのブルートフォースアタック対策を入れる位までのめも

そろそろfirewalldを使ってみようかな〜ということで、yaourt -S firewalldしてインストールして設定してみました。 やったことはzoneを新規に作って、source(192.168.11.0/24)をそこに割り当てて、サービス(sshとか)を許可したりということ。 まずはデフォ…

buffered_rmqueue()めも

今日はLinuxカーネルもくもく会 #12 を利用してbuffered_rmqueue()から読んでく。 buffered_rmqueue() 最初の大きな分岐はページ確保のorderが0(1page)かどうかで処理が変わる まずは1page分の場合から見ていく if文には1pageにlikelyが使われいるのでこっ…

マウント名前空間でちょっとハマっためも

Mount namespaceをちょっと確認って思って、unshareコマンドでマウント名前空間を分離したのにプロセス間でマウント状況が分離されてなくてちょっと調べたという。 アップデート済みのarchとfedora 22で試したんだけど、unshareしたプロセスでmountしたもの…

Raspberry Pi向けのArch Linuxでdocker imageを作った

ベースディストリビューションがRaspberry Pi向けのArch LinuxなDocker imageを作ってDocker Hubに登録しました。 リポジトリはmasami256/arch-raspiです。 Dockerfileとベースになるファイルシステムのビルドスクリプトはgithubのmasami256/arch-raspi-dock…

get_page_from_freelist()の処理

前回は__alloc_pages_nodemask()を見たので、今回はそこから呼ばれ、実際にallocationを行う部分の get_page_from_freelist()を見ていきます。 基本的な流れは、 boolの変数consider_zone_dirtyにalloc_flagsとgfpフラグの値から真偽値を決める ここでgfpフ…

linux: page allocatorの辺りを読んでいこう

Linuxのpage単位のallocatorを理解したいなーというところで、mm/page_alloc.cの __alloc_pages_nodemask()を起点にコードを読み始める。 __alloc_pages_nodemask()はalloc_pages()なんかから呼ばれるところですね。 __alloc_pages_nodemask()の細かいところ…

Selenium/Appium: WD.jsで独自の関数を追加する

WD.jsはSelenium2とAppiumに対応しているnode.js向けのドライバーですが、これって独自の関数を追加できるので、この辺をちゃんと使うと便利だなと気付いたわけです。 WD.jsは使い方としてQ promises + chaining、Pure async等ありますが、ここではQ promise…

2015年5月のYo API事情

久々にYoを使って進化したんだなーと言うところも有るし、そんな変わっていないなーというところもありますね。ということでその辺をつらつらと。 まず、どんなAPIがあるのかというところですが、これはYoのデベロッパー向けドキュメントを見ればバッチリで…

きらら各紙の発売日にYoを送るものを作った

app

きらら各紙(きらら、きららMAX、きららキャラット、きららミラク、きららフォワード)の発売日にYoを送るものを作りました。 YoアカウントKIRARADAYO にYoを送ると初回に限り返信のYoを返します。 その後はきらら系各紙の発売日にYoを送ります。 きらら系各…

livepatchでftraceのハンドラでセットしたInstruction Pointerがどう使われるのか調べた

Linuxのlivepatchはftraceを使って古い関数へのアクセスをフックして新しい関数を呼ぶようにしているというのは以前の記事で調べたんですが、 じゃあ、セットしたIP(Instruction Pointer)をどのように使って新しい関数に飛ばしているのか?というのが知りた…

linux: livepatchめも klp_find_object_symbol()でpatch対象関数のアドレスを探すところ

前のlinux: livepatchコードリーディングめも1 〜 patch側のデータ設定とpatchの登録まで - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモではさらっと流したklp_find_object_symbol()でpatch対象関数のアドレスを探すところを見てみる。 呼んでいる場所として…

dnsmasqを設定するときにlibvirtdの方とコンフリクトしたというメモ

ふと、dnsmasqを使うかなと思って動かしたらlivirtdの方とコンフリクトしたので何が起きたのかという程ではないけど記録のめも。 最初に普通にdnsmasqを設定して起動するとこんな感じに。 masami@saga:~$ sudo systemctl start dnsmasq Job for dnsmasq.serv…

Appiumでsslの自己証明書の許可をする

httpsを使うところで開発環境だとオレオレ証明書でやったりすると思うんですが、Appiumでどうやって自己証明書を受け入れるのかなーと思って調べました。 方法としてはブラウザのcapabilityでautoAcceptAlertsにtrueをセットすれば良いと判明。 やり方は2つ…

linux: livepatchめも 新たに関数が追加れされる場合

livepatchはftraceを使って既存の関数のアドレスにフィルターをセットして、フィルターにセットしたハンドラがripを新しい関数のアドレスに置き換えて実行を継続するというのは前回の記事で分かったんだけど、新しい関数を追加する場合はどうすんだろ?と思…

linux: livepatchコードリーディングめも2 〜 patchのenable

前回の記事(linux: livepatchコードリーディングめも1 〜 patch側のデータ設定とpatchの登録まで - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ)はpatchを登録するを見たので今回はpatchを有効にする部分を見てきます。 まず、livepatch-sample.cでpatchを…

linux: livepatchコードリーディングめも1 〜 patch側のデータ設定とpatchの登録まで

Linuxカーネルもくもく会 #11でやったことです。Linux kernel 4.0 のlivepatchを調べてみる。patchとなるsamples/livepatch/にあるlivepatch-sample.cからスタートして読んでいきましょう。livepatchモジュールにpatchを登録するまでを見ていきます。 まずは…

Selenium Webdriver(wd)でselect boxとかのdata取得

Selenium Webdriverのnode.js bindingのwdを使ってselect box等のデータを取得するというメモ。 例えば、select boxなら<option value=xxx>hogehoge</option>のhogehogeの部分を取得したいとか。 というわけで、Yahooの路線検索にあるセレクトボックスから年の部分を取ってみたいと思い…

Appium + iOS Simulatorでのテストコードメモ

Appium + iOS Simulatorのメモです。実機は設定が面倒なのでシミュレータで。 インストールとかセットアップは公式のマニュアルを読むか、qiitaなどで検索すれば問題無いと思います。 使うものはこれら。 appium node.js node.jsはnpmでこれらを入れます。と…

vagrantのconfig.vm.network設定とVirtualBoxのアダプター対応メモ

vagrantのconfig.vm.networkでpublic_networkやprivate_networkを設定した場合にVirtualBoxのアダプターはどのようになるのかをメモ。 まず、Vagrantfileでこのように設定する。vagrantを使うときはアダプター1はNatじゃないとダメなようなので2-4を設定。 #…

perf probeで関数の引数も記録する

perf probeで引数とかもログ取れる?と思って確認したらできることが分かったのでその辺のめも。 例えばlong do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)の引数を記録するのはこんな感じ。filename引数は文字列として扱う…

linux: slub code reading

最近調べていたslubのkmem_cache_alloc()、kmem_cache_free()のまとめですm( )m Slub alloc and_free from Masami Ichikawa Slub alloc and_free Amazon Web Services 基礎からのネットワーク&サーバー構築作者: 玉川憲,片山暁雄,今井雄太出版社/メーカー: …

Linuxのthis_cpu_cmpxchg_double()によるpercpuなデータの交換

Linux kernelでpercpuなデータの入れ替えに使用されるthis_cpu_cmpxchg_double()のメモ。見ているカーネルは3.18。 これはマクロでlinux/include/percpu-defs.hにて下記のように定義されています。 507 #define this_cpu_cmpxchg_double(pcp1, pcp2, oval1, …