Skip to content

easy-multimercluster crashes with munmap_chunk(): invalid pointer on mixed-chain-count inputs (regression after v10) #584

Description

@bviggiano

Summary

The Linux x86_64 AVX2 build of foldseek from https://mmseqs.com/foldseek/foldseek-linux-avx2.tar.gz (continuous master HEAD, BuildID 8a31a73a..., dated 2026-03-10, commit message "Set chain tm default paramter to 0") heap-corrupts and aborts inside the internal clust step of easy-multimercluster when given certain mixed-chain-count input sets:

[================================================================ munmap_chunk(): invalid pointer
Aborted (core dumped)
Error: Clustering died
Error: Multimercluster died

The same inputs cluster cleanly with the v10 tagged release (10-941cd33, Jan 2025), so this is a regression introduced somewhere in the master commits between Jan 2025 and March 2026.

Trigger

Any input set with 3 or more multimers that contains a 3-chain assembly mixed with non-3-chain assemblies. 2-input sets always work; 3+-sets with all-same chain counts work; 3+-sets with a 3-chain assembly mixed with 2-chain or 4-chain crash.

Input set Chain counts Result
1TIM + 8TIM 2, 2 pass
3BIK + 1TIM 3, 2 pass (2-set)
4HHB + 2HHB 4, 4 pass
3BIK + 1TIM + 8TIM 3, 2, 2 CRASH
3BIK + 4HHB + 2HHB 3, 4, 4 CRASH
4HHB + 2HHB + 1TIM 4, 4, 2 pass
4HHB + 1TIM + 8TIM 4, 2, 2 pass
3BIK + 3CMP + 3SE8 3, 3, 3 pass (homogeneous)
3BIK (chain C stripped) + 1TIM + 8TIM 2, 2, 2 pass
3BIK (HETATMs stripped) + 1TIM + 8TIM 3, 2, 2 crash

Stripping HETATMs from 3BIK doesn't help; stripping its 3rd chain (making it 2-chain) does. So the trigger is the chain-count combination, not the file content.

Reproduction

mkdir -p /tmp/fs_repro/structures /tmp/fs_repro/fs_tmp
for pdb in 3BIK 1TIM 8TIM; do
  curl -sS "https://files.rcsb.org/download/${pdb}.pdb" \
    -o "/tmp/fs_repro/structures/${pdb}.pdb"
done

foldseek easy-multimercluster \
  /tmp/fs_repro/structures \
  /tmp/fs_repro/multimercluster \
  /tmp/fs_repro/fs_tmp \
  --multimer-tm-threshold 0.65 \
  --chain-tm-threshold 0.001 \
  --interface-lddt-threshold 0.5 \
  --alignment-type 2 \
  --tmscore-threshold 0.0 \
  --lddt-threshold 0.0 \
  --threads 2

End of stderr:

Add missing connections
[================================================================ munmap_chunk(): invalid pointer
Aborted (core dumped)
Error: Clustering died
Error: Multimercluster died

Bisection

  • v10 (10-941cd33, Jan 2025)https://github.com/steineggerlab/foldseek/releases/download/10-941cd33/foldseek-linux-avx2.tar.gz — handles all the above input sets cleanly.
  • master HEAD (BuildID 8a31a73a..., 2026-03-10)https://mmseqs.com/foldseek/foldseek-linux-avx2.tar.gz — crashes as shown.

The regression was introduced somewhere in master between the v10 tag and 2026-03-10. The crash signature points at the clust "Add missing connections" phase.

Environment

  • OS: Linux 5.15.0-176-generic, x86_64
  • Inputs: vanilla RCSB PDB downloads, no preprocessing
  • Reproduction is deterministic (fires on every invocation with the same inputs)

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