Skip to content

Commit

Permalink
erasure-code: use new/delete to alloc/free coefficients array
Browse files Browse the repository at this point in the history
before this change, we allocate coefficients table with
`malloc()` in `ErasureCodeIsaDefault::prepare()`, but free them using
`delete`. this is identified by LeakSanitizer, and it reports

```
==3135332==ERROR: AddressSanitizer: alloc-dealloc-mismatch (malloc vs operator delete) on 0x60700002a870
    #0 0x5627c6ef721d in operator delete(void*) (/home/jenkins-build/build/workspace/ceph-pull-requests/build/bin/unittest_erasure_code_plugin_isa+0x1ca21d) (BuildId: 7922906370e5183d67f55211a868c0b0e22b4a2c)
    #1 0x7fbbe38e858f in ErasureCodeIsaTableCache::~ErasureCodeIsaTableCache() /home/jenkins-build/build/workspace/ceph-pull-requests/src/erasure-code/isa/ErasureCodeIsaTableCache.cc:65:13
    #2 0x7fbbe390be40 in ErasureCodePluginIsa::~ErasureCodePluginIsa() /home/jenkins-build/build/workspace/ceph-pull-requests/src/erasure-code/isa/ErasureCodePluginIsa.h:24:7
    #3 0x7fbbe390be68 in ErasureCodePluginIsa::~ErasureCodePluginIsa() /home/jenkins-build/build/workspace/ceph-pull-requests/src/erasure-code/isa/ErasureCodePluginIsa.h:24:7
    #4 0x5627c7063b52 in ceph::ErasureCodePluginRegistry::~ErasureCodePluginRegistry() /home/jenkins-build/build/workspace/ceph-pull-requests/src/erasure-code/ErasureCodePlugin.cc:49:5
    #5 0x7fbbeccb6494 in __run_exit_handlers stdlib/./stdlib/exit.c:113:8
    #6 0x7fbbeccb660f in exit stdlib/./stdlib/exit.c:143:3
    #7 0x7fbbecc9ad96 in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:74:3
    #8 0x7fbbecc9ae3f in __libc_start_main csu/../csu/libc-start.c:392:3
    #9 0x5627c6e38da4 in _start (/home/jenkins-build/build/workspace/ceph-pull-requests/build/bin/unittest_erasure_code_plugin_isa+0x10bda4) (BuildId: 7922906370e5183d67f55211a868c0b0e22b4a2c)
```

so, in this change, we use `new []` and `delete []` to allocate and free
them, to be more consistent, and to silence this warning.

Signed-off-by: Kefu Chai <[email protected]>
  • Loading branch information
tchaikov committed Mar 30, 2024
1 parent 8d7564a commit 6a88e09
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 5 deletions.
7 changes: 5 additions & 2 deletions src/erasure-code/isa/ErasureCodeIsa.cc
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,10 @@ ErasureCodeIsaDefault::prepare()
dout(10) << "[ cache tables ] creating coeff for k=" <<
k << " m=" << m << dendl;
// build encoding coefficients which need to be computed once for each (k,m)
encode_coeff = (unsigned char*) malloc(k * (m + k));
//
// the coeff array is freed by ErasureCodeIsaTableCache::setEncodingCoefficient
// or ErasureCodeIsaTableCache::~ErasureCodeIsaTableCache()
encode_coeff = new unsigned char[k * (m + k)];

if (matrixtype == kVandermonde)
gf_gen_rs_matrix(encode_coeff, k + m, k);
Expand All @@ -398,7 +401,7 @@ ErasureCodeIsaDefault::prepare()
dout(10) << "[ cache tables ] creating tables for k=" <<
k << " m=" << m << dendl;
// build encoding table which needs to be computed once for each (k,m)
encode_tbls = (unsigned char*) malloc(k * (m + k)*32);
encode_tbls = new unsigned char[k * (m + k)*32];
ec_init_tables(k, m, &encode_coeff[k * k], encode_tbls);

// either our new created table is stored or if it has been
Expand Down
6 changes: 3 additions & 3 deletions src/erasure-code/isa/ErasureCodeIsaTableCache.cc
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ ErasureCodeIsaTableCache::~ErasureCodeIsaTableCache()
for (table_it = tables_it->second.begin(); table_it != tables_it->second.end(); ++table_it) {
if (table_it->second) {
if (*(table_it->second)) {
delete *(table_it->second);
delete[] *(table_it->second);
}
delete table_it->second;
}
Expand All @@ -75,7 +75,7 @@ ErasureCodeIsaTableCache::~ErasureCodeIsaTableCache()
for (table_it = tables_it->second.begin(); table_it != tables_it->second.end(); ++table_it) {
if (table_it->second) {
if (*(table_it->second)) {
delete *(table_it->second);
delete[] *(table_it->second);
}
delete table_it->second;
}
Expand Down Expand Up @@ -211,7 +211,7 @@ ErasureCodeIsaTableCache::setEncodingCoefficient(int matrix, int k, int m, unsig
if (*ec_out_coeff) {
// somebody might have deposited these coefficients in the meanwhile, so clean
// the input coefficients and return the stored ones
free (ec_in_coeff);
delete[] ec_in_coeff;
return *ec_out_coeff;
} else {
// we store the provided input coefficients and return these
Expand Down

0 comments on commit 6a88e09

Please sign in to comment.