「OPENSSL malloc」の版間の差分

提供: セキュリティ
移動: 案内検索
(ページの作成:「OPENSSL_malloc とは、 OpenSSL ライブラリが提供する メモリ確保用API '''malloc''' のラッパー関数です。 '''読み方''' ;OPENSSL_mall...」)
 
(相違点なし)

2017年8月24日 (木) 23:46時点における最新版

OPENSSL_malloc とは、 OpenSSL ライブラリが提供する メモリ確保用API malloc のラッパー関数です。

読み方

OPENSSL_malloc
おーぷんえすえす まろく

概要

C言語 では、メモリの確保に malloc () 、メモリの開放に free () を利用します。 OpenSSL では、OPENSSL_malloc と OPENSSL_free などのメモリ操作のラッパー関数を提供します。

OpenSSL メモリアロケーションは、 OPENSSL_xxx API によって操作されます。 OPENSSL_xxx API は、基本的に標準的なC言語の __FILE__ と __LINE__ パラメータを追加し、ローレベルの CRYPTO_xxx API を呼びます。これらの関数は、一貫性のためにパラメータを追加しません。

OPENSSL_malloc の定義

OPENSSL_malloc は、 ./include/openssl/crypto.h に define として定義されています。

# define OPENSSL_malloc(num) \
        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)

OPENSSL_malloc の実体は、./crypto/mem.c の

void *CRYPTO_malloc(size_t num, const char *file, int line)

として実装されています。


CRYPTO_malloc () は、以下のように実装されています。

void *CRYPTO_malloc(size_t num, const char *file, int line)
{
    void *ret = NULL;
 
    if (malloc_impl != NULL && malloc_impl != CRYPTO_malloc)
        return malloc_impl(num, file, line);
 
    if (num == 0)
        return NULL;
 
    allow_customize = 0;
#ifndef OPENSSL_NO_CRYPTO_MDEBUG
    if (call_malloc_debug) {
        CRYPTO_mem_debug_malloc(NULL, num, 0, file, line);
        ret = malloc(num);
        CRYPTO_mem_debug_malloc(ret, num, 1, file, line);
    } else {
        ret = malloc(num);
    }
#else
    osslargused(file); osslargused(line);
    ret = malloc(num);
#endif
 
    return ret;
}

malloc_impl () は、なにか?というと関数ポインタです。 CRYPTO_set_mem_functions() を利用して、 malloc_impl に関数を設定することができます。

使い方

通常の malloc / free のように使えば良いようです。

使う意味は?

OPENSSL_malloc について言えば、OpenSSL が提供する malloc/free だからといって、特別セキュアな機能が提供されるわけではありません。 デバッグ用には、便利かもしれませんが、一方でムダなチェックが走るので、パフォーマンスを重視するなら、C言語 の malloc/free を利用したほうが良いでしょう。

関連項目