Есть ли в ядре strerror
-подобная функциональность? Я не смог найти его, поэтому моя мысль - нет, но что еще важнее, есть ли какие-либо дискуссии об этом? Я бы подумал, что это может сократить время устранения неполадок, так как вам не придется искать коды ошибок (которые не все запомнили) и, возможно, упростить работу системных администраторов и обычных пользователей в течение дня (через dmesg
).Уязвимость в ядре в ядре?
Я хотел спросить здесь, прежде чем отправлять LKML. Мои мысли касались двойного механизма, один для имени ошибки (например, EINVAL
), а другой для описания. Кроме того, расширение glibc %m
может быть добавлено в printk, за исключением того, что ему нужно будет прочитать код ошибки, так как расширение glibc читает errno
. Возможно, %m
может печатать имя ошибки, а %M
может печатать описание ошибки?
В любом случае, если он добавлен, это должен быть параметр .config, так как он раздувает размер текста. Размер может быть сокращен путем простого хранения имен ошибок (от 1 до 133 в настоящее время) в одной строке с нулевым терминатором между каждой строкой и только медленным strerror
(принудительно для итерации по строке и подсчета нуль-терминаторов), поскольку скорость это не имеет значения. Внутренние ошибки 512-529 должны быть в отдельной строке. Затем может быть возвращен прямой указатель на строку с завершающим нулем, без необходимости копировать что-либо. По моим расчетам, это займет примерно 1322 байта для имен ошибок и 3540 байт для описаний (на основе того, что теперь содержится в комментариях после #define каждой ошибки и добавления «без описания» для тех, которые в настоящее время отсутствуют).
Тогда, когда config-disabled, printk %m
можно просто интерпретировать как %d
и %M
может просто ничего не печатать (или некоторые такие).
Попробуйте 'man strace'. Если вас интересует фактический код ошибки, у вас есть альтернативные способы отображения его из пользовательского пространства. Иногда ожидаются ошибки, такие как «stat» и т. Д. Ядро может предоставлять более подробную информацию об ошибке вне контекста «errno». Это то, из чего изготовлен 'dmesg'. –
@ бесшумный шум спасибо за ваш комментарий и извините за поздний ответ. Я не играл с «strace» в течение долгого времени, и я забыл, насколько он полезен, спасибо! Тем не менее, я в основном думаю о том, когда вы выводите код ошибки в printk. Я думаю, что я что-то собираю и предлагаю его lkml, но после того, как я закончил свой текущий проект. –
Хмм, я забыл об этом, и с тех пор я написал этот патч. Я должен был использовать '% de', так как использование% m нарушило gcc's printf предупреждения. :(Думаю, я должен пойти дальше и представить это. Единственное, чего сейчас не хватает, это то, что он не разбирает несколько вещей в одной арке (я думаю, pa-risc, я забыл сейчас). –