сообщения «segfault» в файле /var/log/messages

Thank you for reading this post, don't forget to subscribe! 
Ошиб­ка сег­мен­та­ции (в ори­ги­на­ле segmentation fault часто сокра­ща­е­мая до segfault) или нару­ше­ние досту­па — это ошиб­ка, воз­ник­шая у обо­ру­до­ва­ния с защи­той памя­ти, что­бы уве­до­мить опе­ра­ци­он­ную систе­му (ОС) о нару­ше­нии досту­па к памяти.
Ядро Linux отве­ча­ет на него, выпол­няя неко­то­рые кор­рек­ти­ру­ю­щие дей­ствия, обыч­но пере­да­вая ошиб­ку в про­цесс-нару­ши­тель, посы­лая про­цес­су сиг­нал типа # 11.
В неко­то­рых слу­ча­ях про­цес­сы могут уста­нав­ли­вать поль­зо­ва­тель­ский обра­бот­чик сиг­на­лов, что поз­во­ля­ет им вос­ста­нав­ли­вать­ся само­сто­я­тель­но, но в про­тив­ном слу­чае исполь­зу­ет­ся обра­бот­чик сиг­на­лов по умол­ча­нию в Linux.
Обыч­но segfault при­во­дит к завер­ше­нию про­цес­са и гене­ри­ру­ет дамп ядра с пра­виль­ной настрой­кой ulimit.

Как проверить?

1. Определить segfault

Segfault обыч­но про­сто озна­ча­ет ошиб­ку в одном кон­крет­ном про­цес­се или программе.
Это не озна­ча­ет ошиб­ку ядра Linux.
Ядро про­сто обна­ру­жи­ва­ет ошиб­ку про­цес­са или про­грам­мы и (на неко­то­рых архи­тек­ту­рах) выво­дит инфор­ма­цию в жур­нал, как пока­за­но ниже:

 2. Что означает подробности этого сообщения?

Зна­че­ние RIP — это зна­че­ние реги­стра ука­за­те­ля коман­ды, а RSP — зна­че­ние реги­стра ука­за­те­ля стека.

Зна­че­ни­ем ошиб­ки явля­ет­ся бито­вая мас­ка битов кода ошиб­ки стра­ни­цы (из arch/x86/mm/fault.c):

Вот опре­де­ле­ние бита ошибки:

Код ошиб­ки 15 — 1111 бит.
Нако­нец, мы можем узнать зна­че­ние 1111 сле­ду­ю­щим образом:
Это сооб­ще­ние ука­зы­ва­ет, что при­ло­же­ние вызы­ва­ет ошиб­ку защи­ты, пото­му что этот про­цесс пытал­ся запи­сать доступ к заре­зер­ви­ро­ван­но­му раз­де­лу памя­ти в режи­ме пользователя.