What is SEGV_MAPERR
, why does it always come up with SIGSEGV
?
Asked
Active
Viewed 1e+01k times
2 Answers
231
There are two common kinds of SEGV, which is an error that results from an invalid memory access:
- A page was accessed which had the wrong permissions. E.g., it was read-only but your code tried to write to it. This will be reported as
SEGV_ACCERR
. - A page was accessed that is not even mapped into the address space of the application at all. This will often result from dereferencing a null pointer or a pointer that was corrupted with a small integer value. This is reported as
SEGV_MAPERR
.
Documentation of a sort (indexed Linux source code) for SEGV_MAPERR
is here: https://elixir.bootlin.com/linux/latest/A/ident/SEGV_MAPERR.
-
9Why is http://stackoverflow.com/a/1000010/358475 marked as the answer when this one is more complete and helpful? – OldPeculier Apr 28 '15 at 16:56
-
2The question and other answer are much older than my answer. I did edit the other answer to improve it at least. – ahcox Apr 28 '15 at 18:25
-
It would be interesting to know the circumstances that differentiate these from EXC_BAD_ACCESS exception types. e.g. is the page mapped but not allocated (/ recently deallocated)? – Bobjt Mar 01 '16 at 21:05
-
7One example of `SEGV_MAPERR` is stack overflow (no pun intended). :D – Antti Haapala -- Слава Україні Jul 07 '16 at 16:14
-
2There are even more SEGV types: http://elixir.free-electrons.com/linux/latest/source/include/uapi/asm-generic/siginfo.h#L223 – tomasz Oct 30 '17 at 12:12
-
@tomasz Yes, the last version with just the two was 3.18: http://elixir.free-electrons.com/linux/v3.18.78/source/include/uapi/asm-generic/siginfo.h#L200 – ahcox Oct 31 '17 at 18:05
43
It's a segmentation fault. Most probably a dangling pointer issue, or some sort of buffer overflow.
SIGSSEGV
is the signal that terminates it based on the issue, segmentation fault.
Check for dangling pointers as well as the overflow issue.
Enabling core dumps will help you determine the problem.