Skip to content

SEGV crash with externally encoded large maps from port/NIF thread #8208

Closed
@dotsimon

Description

Describe the bug
BEAM crashes when a thread sends a large (>128 keys) map externally encoded using e.g. erl_drv_send_term

The problem is that commit 184634a works around having no process by assuming there is a scheduler. For threads created with erl_drv_thread_create or similar this is not true.

To Reproduce
A trivial port program that simply echoes a received term back to the calling process is attached.

Compile the driver with the appropriate flags for your system, t.ex.

gcc -c -fPIC -I/usr/local/otp_25.3/lib/erlang/usr/include -Wall -fno-common -o sigsegv_drv.o sigsegv_drv.c
cc -bundle -flat_namespace -undefined suppress -o sigsegv_drv.so sigsegv_drv.o

Compile the test module
erlc sigsegv_drv.erl

Verify the basic functionality of the test program
sigsegv_drv:go(128).

Reproduce the fault
sigsegv_drv:die().

Expected behavior
BEAM does not crash.
Test program prints "I DID NOT DIE!"

Affected versions
OTP-23.3.4.15+
OTP-24.3.4.2+
OTP-25.1+
OTP-26+

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

Labels

bugIssue is reported as a bugteam:VMAssigned to OTP team VM

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions