vak: (Default)
[personal profile] vak
Вам надоели указатели в Си/Си++? Тогда CHERI идёт к вам!

CHERI расшифровывается как "Capability Hardware Enhanced RISC Instructions". Это исследовательский проект в Кембридже по замене указателей на более безопасные capabilities. Не знаю как это по русски. В отличие от указателей capabilities содержат также границы и уровень доступа. ARM сделал экспериментальный процессор Morello с поддержкой capabilities.

Архитектура хардвера описана в статье: "CheriABI: Enforcing Valid Pointer Provenance and Minimizing Pointer Privilege in the POSIX C Run-time Environment" (PDF).

Особенности языка Си/Си++ на такой архитектуре приведены в статье: "CHERI C/C++ Programming Guide" (PDF).

Развивается проект CheriBSD: перенос операционной системы FreeBSD на платформу CHERI.

На видео показана работа графического сервера Wayland и демо OpenGL на процессоре Morello под операционной системой CheriBSD.



Подобных проектов в истории было много. Кто помнит, советская ЭВМ Эльбрус разрабатывалась с аналогичной целью, защититься от программных ошибок адресации памяти. Но во всех таких проектах софт приходилось писать с нуля из-за полной несовместимости с существующими методами программирования. А здесь 99% софта переносится без проблем.

Date: 2022-06-17 19:20 (UTC)
kondybas: (Default)
From: [personal profile] kondybas
Я к сям пришел после асма на СМ1420, а там аппаратно были реализованы косвенная и двойная косвенная адресации, поэтому сишное **ptr легло, как родное. Да оно, собсно, и было родное для PDP-11. Примерно тогда же у меня созрело ощущение сей, как метаасма поверх макроасма, да так и осталось по сей день.

Date: 2022-06-17 19:22 (UTC)
malyj_gorgan: (Default)
From: [personal profile] malyj_gorgan
Досі "чотаржу", згадуючи, як 25+ років тому, в молоді аспірантські роки, ми в 7 ранку їхали додому після безсонної ночі на факультеті, де я робив домашку з електродинаміки, а Тарас і Юля закінчували проект з C++. Тарас чогось сів через місце від нас, я йому кажу: "сунься ближче." A він бурмотить щось типу: "нема сили, але добре," -- і, продовжуючи сидіти, де сидів, починає показувати пальцем на сусіднє місце.

Пробую зрозуміти, як би воно все виглядало, якби уже тоді замість poiner'ів існували оті вашіі capabilities.

Date: 2022-06-17 19:32 (UTC)
From: [personal profile] ivanrubilo
Ваш непокорный слуга приложил к этому руку немножко.

Date: 2022-06-17 22:00 (UTC)
From: [personal profile] ivanrubilo
Нет, не Руслан, знаю Руслана шапочно.
В смысле приложил руку к Морелло, не CheriBSD.

Date: 2022-06-17 20:01 (UTC)
perdakot: (Default)
From: [personal profile] perdakot
Это предполагает, что верифицировать корректность железа проще, чем программы? Если найдут дырку в реализации capabilities, придется же процессор менять.

Date: 2022-06-17 20:08 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Надо же. А Раст туда не лучше сядет? Если сядет.

Date: 2022-06-21 20:52 (UTC)
dmytrish: (Default)
From: [personal profile] dmytrish
Вот здесь человек рассказывает, как планируют подружить CHERI и Rust: https://gankra.github.io/blah/fix-rust-pointers/#cheri

Но все-таки немного разноплановые вещи.
Edited Date: 2022-06-21 20:52 (UTC)

Date: 2022-06-21 21:44 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Ох тяжелая там работа...

Date: 2022-06-17 21:19 (UTC)
vit_r: default (Default)
From: [personal profile] vit_r
Не будет ли это жутко тормозить?

На мой взгляд, проблема как раз в методах программирования. Ошибки всё равно придётся обрабатывать.

Date: 2022-06-17 22:02 (UTC)
perdakot: (Default)
From: [personal profile] perdakot
Ошибки всё равно придётся обрабатывать.

Эта штуковина будет предсказуемо крашиться при обращении не в ту память что полезно для безопасности и ошибка доступа будет видна сразу, а не как попезет.

Date: 2022-06-18 05:06 (UTC)
vit_r: default (Default)
From: [personal profile] vit_r
Та программа, которая не запускается, полностью безопасна. Но есть и другие критерии.

Date: 2022-06-21 20:54 (UTC)
dmytrish: (bartson)
From: [personal profile] dmytrish
A memory-safe language это однозначно хорошо, поддержка железом соблюдения pointer provenance — тоже очень хорошо.

nz

Date: 2022-06-28 12:34 (UTC)
From: [personal profile] nz

Звучит интересно, но не совсем понятна целевая аудитория проекта.

Referential safety protects pointers (references) themselves. This includes integrity (corrupted pointers cannot be dereferenced) and provenance validity (only pointers derived from valid pointers via valid manipulations can be dereferenced).

Это борьба с запихиванием указателей в int/long c потерей старших бит? Полезно, наверное, но этими детскими болезнями вроде бы все уже переболели при переходе с 32 на 64 бита лет 15 назад.

Spatial safety ensures that pointers may be used only to access memory within bounds of their associated allocation; dually, manipulating an out-of-bounds pointer will not grant access to another allocation.

Bounds checking из-под палки? Вой на болотах будет оглушительным.

temporal safety is accomplished by preventing new pointers being returned to a previously allocated region of memory while any prior pointers to that memory persist in application-accessible memory.

Пока указатель не обнулишь, память не освободится? Вой на болотах будет оглушительным, переписывать придется много. Забавно, что это уже почти GC, но не GC, т.к. дереференсить тоже нельзя.

Наверное, все это помогло бы заткнуть основные дырки в C-коде, но там же публика привыкла экономить на спичках, а тут 100% оверхеда в каждом указателе, bounds checking, карантинная память и обработка всей этой роскоши в рантайме. Добрый вечер, мы вам принесли неотключаемый ASAN. У меня есть сомнения, что это зайдет.

В C++ голые указатели и манипуляции с ними - вообще фу-фу-фу уже давно. Постоянный оверхед в качестве платы за решение не слишком насущных проблем тоже вряд ли будет принят с ликованием.