copy_from / to_user详解

参考ます。http://www.wowotech.net/memory_management/454.html

ソングDaxia素晴らしい記事、また素晴らしい国泰夏のコメント。

結論次のように簡単に要約:

  • どちらのカーネルモードまたは有効なユーザアドレス空間へのユーザモードアクセスの仮想アドレスを物理アドレスとの間のマッピングされていない、ページフォルト処理とほぼ同じである、私たちは物理メモリのマッピングを作成して適用するのに役立ちます。()この場合コピー_ _user {にし、より}よってのmemcpy()と同様です。
  • 権限のないユーザーがによって、カーネルモードアドレス空間をアクセスするとき.fixup__ex_table修理に異常の2つのセクションのヘルプ試み。この修理は異常なビルド、アドレスマッピングが、変更do_page_fault()の戻りアドレスではありません。memcpy()がこれを行うことができないので、このようなAセグメントの非存在下でのmemcpy()は、作成されています。
  • 有効でCONFIG_ARM64_SW_TTBR0_PANCONFIG_ARM64_PAN(ハードウェアでサポートされている場合にのみ有効)私たちがユーザーモード、カーネルモードPGDへのアクセスを禁止することができたとしても時に、リンカスクリプトで同じアカウントの割り当てをすべてゼロの1ページテーブルとしてTTBR0を変更することによって動作します(とswap_page_dirビット)。この時点で、我々は、_user({から、へ} _が使用できる ) (直接memcpyを使用する、このインターフェイス)許容できません。
  • 臨時:{から、へ}メモリコピーコピー_と交換 ()_user 絶対的に禁止され、何のアドレスチェック(access_ok)は、セキュリティ上の問題を引き起こすことはできません。4.13カーネル痛みを伴う場合があります。root権限を取得するために通常のプロセスようcopy_to_userの危険なバージョンを使用してwaitpidのシステムコール、access_okが欠落し、セキュリティの脆弱性につながる、ハッカーは簡単に脆弱性を悪用することができます。
    あなたがメモリを使用する場合また、(_user {から、へ} _が置き換えコピー ) 、あなたはいくつかの仮定を行う潜在意識。32ビットシステムは、例えば、1G:アドレス空間割り当ての3Gは(高1Gカーネル空間は、すべてのプロセス間で共有)のみの選択、おそらく4Gない:4Gも悪い考えではありません。システム構成が4Gである場合:4Gは、メモリコピーが置換されていない{からの、}コピー_ _userは( )

その他のリンク:4G:4Gます。https://lwn.net/Articles/86715/とhttps://lwn.net/Articles/39283/

おすすめ

転載: www.cnblogs.com/zengjianrong/p/11886725.html