init_on_freeマップされていないVMAをすぐにゼロにしますか?

init_on_freeマップされていないVMAをすぐにゼロにしますか?

この機能はコミットに追加されました。6471384a、ページが解放されると初期化する必要があります。これはソースファイルで次のように行われます。mm/page_alloc.cそしてfree_pages_prepare()prep_new_page()

VMAがマッピング解除されると(手動またはプロセス終了時に自動的に)、すべてのプロセスメモリがゼロに初期化されることは保証されますか?パイプを介してデータを転送したり、カーネルとユーザー間でページを渡したりするカーネルボー​​ドはどうですか?一部のタブレットでは機能しますが、ユーザーページでは機能しないコミットメッセージに記載されている重要な例外に注意してください。

init_on_alloc=1 と init_on_free=1 はどちらも、アロケータがゼロのメモリを返すことを保証します。 2つの例外は、コンストラクタとSLAB_TYPESAFE_BY_RCUフラグを持つボードキャッシュです。意味を維持するためにゼロに初期化されません。

256ビット未満のすべてのデバイスマッパー暗号化キーを一覧表示し、すべてのデバイスマッパーターゲットを削除し、プロセスからキーを削除する次の仮想スクリプトを検討します。

#!/bin/bash

count=0
dmsetup table --showkeys | while IFS= read table; do
    set -- $table # key material is now present in $6
    [[ ${#6} -lt 64 ]] && ((count++))
done
echo "$count keys less than 256 bits"
dmsetup remove_all --force

関連するすべてのプロセスが終了した後、重要なデータはいつ保存されますかinit_on_free=1?スワッピングやトレースがないと仮定すると、スラブデバッグやページポイズニングなどが無効になります。


興味深くdmsetup使わずにDM_SECURE_DATA_FLAG、バッファのフラグが ioctl を介して DM に渡され、バッファがクリアされる可能性があります。drivers/md/dm-ioctl.c:1855:

secure_data = param_kernel->flags & DM_SECURE_DATA_FLAG;

[...]

/* Wipe the user buffer so we do not return it to userspace */
if (secure_data && clear_user(user, param_kernel->data_size))
    goto bad;

おそらくプロセスが終了し、すべてのページが解放されると、これは重要ではありません。

ベストアンサー1

おすすめ記事