c_cpp:safe_c_library

Safe C Library

Safe C Libraryは、ISO/IEC TR 24731に準拠したバウンドチェックメモリと文字列関数を提供します。これらの関数は、より安全で安全なプログラミングを促進する、既存の標準Cライブラリに対する代替関数です。

ISO/IEC プログラミング言語 - C spec、C11には、付録K「境界チェックインターフェース」の境界APIが含まれています。

この最新のアップロードは静的ライブラリ、共有ライブラリ、そしてLinuxカーネルモジュールの構築をサポートします。

Safe C Library download | SourceForge.net より
GitHub - rurban/safeclib: safec libc extension with all C11 Annex K functions

バッファオーバーフロー(あふれ)対策が施された strcpy_s 関数をはじめとする 37の関数が導入された。
IPA ISEC セキュア・プログラミング講座:C/C++言語編 第10章 著名な脆弱性対策:コマンド注入攻撃対策 より

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
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
Doxyfile.in
#DOT_GRAPH_MAX_NODES    = 10
DOT_GRAPH_MAX_NODES    = 100
rm doc/man/man3/EOK.3
rm: 'doc/man/man3/EOK.3' を削除できません: そのようなファイルやディレクトリはありません
make[2]: [Makefile:1660: doc/man/man3/EOK.3] エラー 1 (無視されました)

Makefile.am でドキュメント生成前に削除しようとしてエラーになっている様である。
ビルド自体に支障は無いためエラーを無視する。

  • c_cpp/safe_c_library.txt
  • 最終更新: 2019/08/19 06:49
  • by ともやん