Ошибки · Решение
Linux errno EFAULT: что означает и как исправить
Системному вызову передан недоступный или некорректный адрес памяти.
Короткий ответ
В Linux errno EFAULT означает «Bad address». Сначала найдите системный вызов, который вернул код, затем проверяйте условия именно этой операции. Числовое значение errno не следует считать переносимым между архитектурами: ориентируйтесь на символическое имя.
Что означает ошибка
Системному вызову передан недоступный или некорректный адрес памяти.
Возможные причины
- Нативный код передал неверный pointer в kernel API.
- Буфер уже освобождён или имеет неправильный lifetime.
- FFI/JNI/расширение сформировало адрес с неверным типом или размером.
Что проверить
- Определите системный вызов и pointer argument по trace/debugger.
- Проверьте lifetime и границы буфера до входа в syscall.
- Запустите нативную часть под ASan/Valgrind, если ошибка воспроизводится.
Безопасные шаги
- Исправьте владение и размер буфера в нативном коде.
- Не маскируйте EFAULT повторными вызовами с тем же адресом.
- Добавьте проверки границ на границе FFI или драйверного API.
Только безопасные обратимые действия. Опасные шаги — только по официальной инструкции и с пониманием рисков.
Когда нужен сервис
- Если errno EFAULT воспроизводится после проверки системного вызова и окружения, приложите strace-фрагмент, путь/ресурс и kernel log владельцу соответствующего subsystem.
Похожие ошибки
- /errors/linux-errno-esrch/
- /errors/linux-errno-eintr/
- /errors/linux-errno-eio/
Что учитывать
Точная причина зависит от версии ПО/прошивки, полного текста ошибки и контекста. Официальная инструкция имеет приоритет.
Официальный источник
Расшифровка сверена с официальными страницами поддержки из источников ниже. Редакция N1RO не диагностировала ваш конкретный случай.