Notice: file_put_contents(): Write of 21886 bytes failed with errno=28 No space left on device in /var/www/tgoop/post.php on line 50
Linux / Линукс@linux_gram P.8589
LINUX_GRAM Telegram 8589
Линус Торвальдс в привычной для себя манере высказался о файловых системах с поддержкой case folding (регистронезависимых файлов и папок).

Поводом послужила проблема с поддержкой case folding в Bcachefs, обнаруженная на этой неделе и уже имеющая фикс для Linux 6.15. Линус написал сообщение в рассылке разработчиков Linux (LKML), изложив своё мнение о реализации case folding.

Стоит отметить, что проблема с case folding в Bcachefs — не первая для Linux: ранее уже возникали баги, связанные с обработкой эмодзи и других специальных символов Unicode.

"Единственный вывод здесь — разработчики файловых систем ничему не учатся.

Имена без учёта регистра — это катастрофическая ошибка, которую вообще не стоило допускать. Проблема не в недостаточном тестировании — проблема в том, что вы вообще решили это реализовать.

Затем ситуация ещё усугубляется, когда люди пытаются "сделать правильно" то, что в принципе правильно сделать невозможно. В итоге получается ещё хуже: произвольные байты начинают использоваться как "магическое" значение.

И кстати, тесты тоже полностью сломаны. Последний раз, когда я их смотрел, они не покрывали действительно интересные случаи — те, что могут приводить к уязвимостям в user-space.

Например, такие уязвимости: приложение в user-space проверяет, что имя файла не совпадает с каким-то безопасным паттерном. А файловая система с "регистронезависимостью" всё равно позволяет обойти эту проверку - потому что люди, реализующие регистронезависимость, ВСЕГДА делают вещи типа игнора непечатаемых символов и тд. В итоге "регистронезависимость" превращается в "независимость от черт знает чего".

Примеры смотрите в коммитах:

5c26d2f1d3f5 ("unicode: Don't special case ignorable code points")

и

231825b2e1ff ("Revert "unicode: Don't special case ignorable code points"")

— и плачьте.

Подсказка: ❤️ и ❤️ — это два разных Unicode-символа, различающихся только по "игнорируемым" кодовым точкам. И угадайте что? Безумные бездарные разработчики, желающие чтобы эти два символа считались одинаковыми — случайно делают так, что другие(возможно относящиеся к безопасности) имена файлов начинают считаться одинаковыми — просто потому что содержат эти игнорируемые символы.

В результате каждое приложение, которое фильтрует пути, чтобы не трогать определенные директории — может быть обмануто и заставлено работать с файлами, которых оно должно было избегать. И нет, такое поведение не редкость и не что-то странное, а стандартная практика: множество программ полагаются на такие проверки.

Чёрт возьми. Регистронезависимость — это БАГ. Тот факт, что разработчики файловых систем до сих пор считают это фичей, для меня необъясним. Такое ощущение, что они настолько обожают древнюю файловую систему FAT, что не могут не попытаться её воссоздать — только ещё хуже."


Linux / Линукс
🥸
Please open Telegram to view this post
VIEW IN TELEGRAM
😁54👍253🫡1



tgoop.com/linux_gram/8589
Create:
Last Update:

Линус Торвальдс в привычной для себя манере высказался о файловых системах с поддержкой case folding (регистронезависимых файлов и папок).

Поводом послужила проблема с поддержкой case folding в Bcachefs, обнаруженная на этой неделе и уже имеющая фикс для Linux 6.15. Линус написал сообщение в рассылке разработчиков Linux (LKML), изложив своё мнение о реализации case folding.

Стоит отметить, что проблема с case folding в Bcachefs — не первая для Linux: ранее уже возникали баги, связанные с обработкой эмодзи и других специальных символов Unicode.

"Единственный вывод здесь — разработчики файловых систем ничему не учатся.

Имена без учёта регистра — это катастрофическая ошибка, которую вообще не стоило допускать. Проблема не в недостаточном тестировании — проблема в том, что вы вообще решили это реализовать.

Затем ситуация ещё усугубляется, когда люди пытаются "сделать правильно" то, что в принципе правильно сделать невозможно. В итоге получается ещё хуже: произвольные байты начинают использоваться как "магическое" значение.

И кстати, тесты тоже полностью сломаны. Последний раз, когда я их смотрел, они не покрывали действительно интересные случаи — те, что могут приводить к уязвимостям в user-space.

Например, такие уязвимости: приложение в user-space проверяет, что имя файла не совпадает с каким-то безопасным паттерном. А файловая система с "регистронезависимостью" всё равно позволяет обойти эту проверку - потому что люди, реализующие регистронезависимость, ВСЕГДА делают вещи типа игнора непечатаемых символов и тд. В итоге "регистронезависимость" превращается в "независимость от черт знает чего".

Примеры смотрите в коммитах:

5c26d2f1d3f5 ("unicode: Don't special case ignorable code points")

и

231825b2e1ff ("Revert "unicode: Don't special case ignorable code points"")

— и плачьте.

Подсказка: ❤️ и ❤️ — это два разных Unicode-символа, различающихся только по "игнорируемым" кодовым точкам. И угадайте что? Безумные бездарные разработчики, желающие чтобы эти два символа считались одинаковыми — случайно делают так, что другие(возможно относящиеся к безопасности) имена файлов начинают считаться одинаковыми — просто потому что содержат эти игнорируемые символы.

В результате каждое приложение, которое фильтрует пути, чтобы не трогать определенные директории — может быть обмануто и заставлено работать с файлами, которых оно должно было избегать. И нет, такое поведение не редкость и не что-то странное, а стандартная практика: множество программ полагаются на такие проверки.

Чёрт возьми. Регистронезависимость — это БАГ. Тот факт, что разработчики файловых систем до сих пор считают это фичей, для меня необъясним. Такое ощущение, что они настолько обожают древнюю файловую систему FAT, что не могут не попытаться её воссоздать — только ещё хуже."


Linux / Линукс
🥸

BY Linux / Линукс




Share with your friend now:
tgoop.com/linux_gram/8589

View MORE
Open in Telegram


Telegram News

Date: |

Unlimited number of subscribers per channel Read now Developing social channels based on exchanging a single message isn’t exactly new, of course. Back in 2014, the “Yo” app was launched with the sole purpose of enabling users to send each other the greeting “Yo.” How to Create a Private or Public Channel on Telegram? In 2018, Telegram’s audience reached 200 million people, with 500,000 new users joining the messenger every day. It was launched for iOS on 14 August 2013 and Android on 20 October 2013.
from us


Telegram Linux / Линукс
FROM American