導入演習として、新しいシステム コールを実装しました。バッファを取り込み、そのバッファを printk するだけです。後で、copy_from_user を使用するのが正しい方法であることを知りました。
これはアドレスを検証するための単なる予防措置ですか、それともシステム コールがエラー (ページ フォールト?) を引き起こしているのでしょうか?
それが単なる予防措置である場合、それは何から保護していますか?
ありがとう!
導入演習として、新しいシステム コールを実装しました。バッファを取り込み、そのバッファを printk するだけです。後で、copy_from_user を使用するのが正しい方法であることを知りました。
これはアドレスを検証するための単なる予防措置ですか、それともシステム コールがエラー (ページ フォールト?) を引き起こしているのでしょうか?
それが単なる予防措置である場合、それは何から保護していますか?
ありがとう!
いくつかの理由があります。
copy_from_user
実際に正しいメモリアドレスを取得することが不可欠です。copy_from_user
ないと、ユーザーがカーネル アドレスを渡した場合に情報漏えいが発生する可能性があります。さらに悪いことに、ユーザー提供のバッファーに を使用せずに書き込みを行うcopy_to_user
と、ユーザーがカーネル メモリを上書きする可能性があります。copy_from_user
戻ることができるように、フォルトから保護します。EFAULT