Skip to content

Commit 6a3a0f4

Browse files
committed
hnswalg.h: cap M to 100000
This patch works around issue #467, also referenced as CVE-2023-37365, by implementing Yury Malkov's suggestion about capping the M value, coding the maximum number of outgoing connections in the graph, to a reasonable enough value of the order of 100000. For the record, the documentation indicates reasonable values for M range from 2 to 100, which are well within the cap; see ALGO_PARAMS.md. The reproducer shown in issue #467 doesn't trigger the double free condition anymore after this change is applied, but completes successfully, although with the below warning popping up on purpose: warning: M parameter exceeds 100000 which may lead to adverse effects. Cap to 100000 will be applied for the rest of the processing. Signed-off-by: Étienne Mollier <emollier@debian.org>
1 parent 359b2ba commit 6a3a0f4

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

hnswlib/hnswalg.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,13 @@ class HierarchicalNSW : public AlgorithmInterface<dist_t> {
101101
data_size_ = s->get_data_size();
102102
fstdistfunc_ = s->get_dist_func();
103103
dist_func_param_ = s->get_dist_func_param();
104-
M_ = M;
104+
if ( M <= 100000 ) {
105+
M_ = M;
106+
} else {
107+
std::cerr << "warning: M parameter exceeds 100000 which may lead to adverse effects." << std::endl;
108+
std::cerr << " Cap to 100000 will be applied for the rest of the processing." << std::endl;
109+
M_ = 100000;
110+
}
105111
maxM_ = M_;
106112
maxM0_ = M_ * 2;
107113
ef_construction_ = std::max(ef_construction, M_);

0 commit comments

Comments
 (0)