Bug #121027 MySQL Shell 8.4.9 / 8.4.10 — util.loadDump() crashes with SIGSEGV in __strlen_evex (NULL pointer dereference)
Submitted: 29 Jul 5:35
Reporter: hoyoung ryu Email Updates:
Status: Open Impact on me:
None 
Category:MySQL Server: Document Store: MySQL Shell Severity:S2 (Serious)
Version:8.4.9, 8.4.10 OS:Ubuntu (22.04)
Assigned to: CPU Architecture:Any

[29 Jul 5:35] hoyoung ryu
Description:
mysqlsh reproducibly crashes with SIGSEGV (exit 139) during util.loadDump() restoring a large logical dump (~438GB, ~2.2B rows, 41 tables) from S3-compatible storage. Crash point varies per run (data loading or index building phase) but the signature is always identical. Initially suspected an AVX-512/glibc issue on Cascade Lake and tried disabling AVX-512 via GLIBC_TUNABLES=glibc.cpu.hwcaps=-AVX512F,-AVX512DQ,-AVX512CD,-AVX512BW,-AVX512VL,-AVX512_VNNI — this did not prevent the crash.

Root cause (gdb + core dump): Installed gdb + libc6-dbg, captured a core dump. Crash thread is always in __strlen_evex() with rdi=0x0 (first argument to strlen, per x86-64 calling convention) — i.e. a NULL pointer passed to strlen(), not an AVX-512 hardware bug. Higher stack frames are unresolved (consistent with mysqlsh's embedded GraalVM/JIT engine, libjitexecutor.so); the binary is stripped so the exact JS/native call site couldn't be pinpointed.

How to repeat:
1. util.dumpInstance() to S3-compatible storage.
2. util.loadDump(prefix, {s3BucketName, s3EndpointOverride, s3Region, threads: 4, deferTableIndexes: "all", showProgress: true, showMetadata: true})
3. Against a large dataset, the process eventually crashes with SIGSEGV (139) at a non-deterministic point (observed at 5%, 17%, 58%, 92%, 100%/entering-index-build, mid-index-build).
4. Re-running the identical command (without resetting progress) resumes correctly and eventually completes, sometimes after several crash/resume cycles.

No single small deterministic repro found — crash appears data/timing-dependent, reproduced with both threads=4 and threads=16, with/without deferTableIndexes.

Suggested fix:
Expected: loadDump completes without crashing.
Actual: SIGSEGV (139) at __strlen_evex(), rdi=0x0.

Workaround: progress-file-based resume (load-progress.<server_uuid>.json) reliably continues from the interruption point on re-run — never failed across our testing on either version. Impact is extra wall-clock time only, not data loss.

Attachments available on request: full gdb backtrace + register dump (both versions), dmesg segfault entries. Core dumps (~380MB each) available if needed.