Skip to content

GaloisKeys serialization crash #249

@bcebere

Description

@bcebere

With the following code snippet, I'm receiving SIGKILL, it seems to be an infinite loop at the save step.

 #include "seal/seal.h"
 
 using namespace std;
 using namespace seal;
 
 std::string SEALSerialize(const GaloisKeys& sealobj) {
     std::stringstream stream;
     sealobj.save(stream);
 
     return stream.str();
 }
 
 GaloisKeys SEALDeserialize(const SEALContext& sealctx, const string& in) {
     GaloisKeys out;
     std::stringstream stream;
     stream << in;
     out.load(sealctx, stream);
     return out;
 }
 
 int main() {
     EncryptionParameters parameters(scheme_type::ckks);
     parameters.set_poly_modulus_degree(8192);
     parameters.set_coeff_modulus(
         CoeffModulus::Create(8192, {40, 21, 21, 21, 21, 21, 21, 40}));
 
     auto ctx = SEALContext(parameters);
     auto keygen = KeyGenerator(ctx);
     auto sk = SecretKey(keygen.secret_key());
 
     GaloisKeys gk;
     keygen.create_galois_keys(gk);
 
     auto serial = SEALSerialize(gk);
     auto new_gk = SEALDeserialize(ctx, serial);
     SEALSerialize(new_gk);
 
     return 0;
 }

My only "custom" flags for the build system are

set(CMAKE_CXX_STANDARD 17)

I ran the test with strace, and it actually shows an infinite loop of mmaps until it crashes.

mmap(NULL, 79695872, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efbdca7a000
mmap(NULL, 79958016, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efbd7e39000
mmap(NULL, 80220160, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efbd31b8000
mmap(NULL, 80482304, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efbce4f7000
mmap(NULL, 80744448, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efbc97f6000
mmap(NULL, 81006592, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efbc4ab5000
mmap(NULL, 81268736, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efbbfd34000
mmap(NULL, 81530880, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efbbaf73000
mmap(NULL, 81793024, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efbb6172000
mmap(NULL, 82055168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efbb1331000
mmap(NULL, 82317312, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efbac4b0000
mmap(NULL, 82579456, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efba75ef000
mmap(NULL, 82841600, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efba26ee000
mmap(NULL, 83103744, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efb9d7ad000
mmap(NULL, 83365888, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efb9882c000
mmap(NULL, 83628032, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efb9386b000
mmap(NULL, 83890176, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efb8e86a000
mmap(NULL, 84152320, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efb89829000
+++ killed by SIGKILL +++
Killed

Tested with SEAL 3.6. Ubuntu 20.04. gcc 9.3.0
The code was OK with SEAL 3.5.9, I hope I didn't miss something in the updated API.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions