Memory used internally by Botan not deallocated

112 Views Asked by At

I have currently a memory issue using the Botan library (version 2.15) for cryptography functions within a C++ project. My development environment is Solus Linux 4.1 (kernel-current), but I could observe this issue on Debian Buster too.

I observed that some memory allocated internally by Botan for calculations is not deallocated when going out of scope. When I called Botan::HashFunction, Botan::StreamCipher and Botan::scrypt multiple times, always going out of scope in between, the memory footprint increases steadily.

For example, consider this code:

#include <iostream>
#include <vector>

#include "botan/scrypt.h"


void pause() {
    char ch;
    std::cout << "Insert any key to proceed... ";
    std::cin >> ch;
}


std::vector<uint8_t> get_scrypt_passhash(std::string const& password, std::string const& name) {

    std::vector<uint8_t> key (32);
    Botan::scrypt(key.data(), key.size(), password.c_str(), password.length(), salt.c_str(), salt.length(), 65536, 32, 1);

    std::cout << "From function: before closing.\n";
    pause();

    return key;
}


int main(int argc, char *argv[]) {

    std::cout << "Beginning test.\n";
    pause();

    auto pwhashed = get_scrypt_passhash(argv[1], argv[2]);

    std::cout << "Test ended.\n";
    pause();
}

I used the pause() function to observe the memory consumption (I called top/pmap and observed KSysGuard during the pause), when it is called from within get_scrypt_passhash before terminating, the used memory (both by top/pmap and KSysGuard) is about 2 MB more than at beginning, and after terminating the same.

I tried to dive into the Botan source code, but I cannot find memory leaks or the like. Valgrind also outputted that all allocated bytes have been freed, so no memory leaks were possible. Just for information, I tried the same functionality with Crypto++ without observing this behavior.

Has anyone experienced the same issue? Is there a way to fix it?

0

There are 0 best solutions below