====== Safe C Library ====== Safe C Libraryは、ISO/IEC TR 24731に準拠したバウンドチェックメモリと文字列関数を提供します。これらの関数は、より安全で安全なプログラミングを促進する、既存の標準Cライブラリに対する代替関数です。\\ \\ ISO/IEC プログラミング言語 - C spec、C11には、付録K「境界チェックインターフェース」の境界APIが含まれています。\\ \\ この最新のアップロードは静的ライブラリ、共有ライブラリ、そしてLinuxカーネルモジュールの構築をサポートします。\\ \\ [[https://sourceforge.net/projects/safeclib/|Safe C Library download | SourceForge.net]] より\\ [[https://github.com/rurban/safeclib|GitHub - rurban/safeclib: safec libc extension with all C11 Annex K functions]]\\ ===== C11:2011 年以降のC言語仕様 ===== バッファオーバーフロー(あふれ)対策が施された strcpy_s 関数をはじめとする 37の関数が導入された。\\ [[https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c910.html|IPA ISEC セキュア・プログラミング講座:C/C++言語編 第10章 著名な脆弱性対策:コマンド注入攻撃対策]] より\\ ===== gcc で strcpy_s などの関数群を使用する方法 ===== 2019/02/12 現在、glibc が strcpy_s などの関数をサポートしていない。\\ そこで登場するのが Safe C Library である。\\ Safe C Library は glibc の代わりに関数群を提供してくれます。\\ ===== ダウンロード ===== GitHub より最新の Safe C Library を入手する。 $ git clone https://github.com/rurban/safeclib.git ===== ビルド ===== ビルドに必要な Graphviz の dot ツールをインストールするために Graphviz をインストールする。 $ sudo dnf install graphviz Safe C Library のビルドを行う。 $ cd safeclib/ $ ./build-tools/autogen.sh $ ./configure --libdir=/usr/local/lib64 $ make ===== インストール ===== $ sudo make install ===== トラブルシューティング ===== ==== make で以下の警告が発生する ==== doxygen warning: Included by graph for 'safe_str_lib.h' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES. Doxyfile.in を修正して DOT_GRAPH_MAX_NODES の値を 10 から 100 に変更すると警告されなくなる。 $ vi Doxyfile.in #DOT_GRAPH_MAX_NODES = 10 DOT_GRAPH_MAX_NODES = 100 ==== make で以下の警告が発生する ==== rm doc/man/man3/EOK.3 rm: 'doc/man/man3/EOK.3' を削除できません: そのようなファイルやディレクトリはありません make[2]: [Makefile:1660: doc/man/man3/EOK.3] エラー 1 (無視されました) Makefile.am でドキュメント生成前に削除しようとしてエラーになっている様である。\\ ビルド自体に支障は無いためエラーを無視する。\\