n1ro°
RU

Ошибки · Решение

Linux errno EFAULT: что означает и как исправить

Системному вызову передан недоступный или некорректный адрес памяти.

Редакция N1RO · Проверено

Короткий ответ

В Linux errno EFAULT означает «Bad address». Сначала найдите системный вызов, который вернул код, затем проверяйте условия именно этой операции. Числовое значение errno не следует считать переносимым между архитектурами: ориентируйтесь на символическое имя.

Что означает ошибка

Системному вызову передан недоступный или некорректный адрес памяти.

Возможные причины

  • Нативный код передал неверный pointer в kernel API.
  • Буфер уже освобождён или имеет неправильный lifetime.
  • FFI/JNI/расширение сформировало адрес с неверным типом или размером.

Что проверить

  • Определите системный вызов и pointer argument по trace/debugger.
  • Проверьте lifetime и границы буфера до входа в syscall.
  • Запустите нативную часть под ASan/Valgrind, если ошибка воспроизводится.

Безопасные шаги

  1. Исправьте владение и размер буфера в нативном коде.
  2. Не маскируйте EFAULT повторными вызовами с тем же адресом.
  3. Добавьте проверки границ на границе FFI или драйверного API.

Только безопасные обратимые действия. Опасные шаги — только по официальной инструкции и с пониманием рисков.

Когда нужен сервис

  • Если errno EFAULT воспроизводится после проверки системного вызова и окружения, приложите strace-фрагмент, путь/ресурс и kernel log владельцу соответствующего subsystem.

Похожие ошибки

  • /errors/linux-errno-esrch/
  • /errors/linux-errno-eintr/
  • /errors/linux-errno-eio/

Что учитывать

Точная причина зависит от версии ПО/прошивки, полного текста ошибки и контекста. Официальная инструкция имеет приоритет.

Официальный источник

Расшифровка сверена с официальными страницами поддержки из источников ниже. Редакция N1RO не диагностировала ваш конкретный случай.