Данную ситуацию, если по-хорошему, и C исключает, если думать головой.Там написано примерно следующее:
struct l2cap_chan {
...
void *data;
...
};
Этот data может указывать на структуру, как минимум, двух разных типов. Об этом не написано в заголовке, где объявлен l2cap_chan (там на всю структуру с несколькими десятками полей ровно ноль комментариев). Это, видимо, большой секрет, и, надо полагать, задумка в том, чтобы оценить квалификацию разработчика по тому, сможет ли он разобраться в том, на какие типы может указывать data, и понять, когда и на какой тип он указывает. Собственно эта уязвимость говорит о том, что удалось найти как минимум одного разработчика, кто не смог разобраться. Ура-ура! Можно прочистить ряды разработчиков линукса, и ещё чуть-чуть поднять средний уровень квалификации разработчика.
Можно же было написать не void *data, а union, так? Можно было написать комментарий, поясняющий когда актуально то или иное поле union'а, так? Можно было добавить ещё одно поле типа enum, которое бы отражало актуальность полей union'а -- ну чтоб наточняк. Или ещё наточнее, можно было бы написать inline-функций доступа к полю data, которые бы максимально усложнили бы создание некогерентной структуры.
Но нет ведь, инкапсуляция -- это признак слабости. Если ты не можешь без инкапсуляции, значит иди дальше учиться программировать и повышать свою квалификацию. union вместо приведения типов? Для использования union'а надо пасть ниже всякой слабости.
Будь мужиком! Забей на возможности предоставляемые системой типов. Вкачивай лучше себе внимание с детства, это ключ к успеху.
Вот как раз такие, как я понимаю, и пропагандируют идею, что unsafe в rust'е перечёркивает все гарантии безопасности, которые даёт раст -- естественно: такие как они будут рассматривать неиспользование unsafe как признак слабости, и кончится это ровно тем же, потому что никакие возможности языка программирования не спасут от программиста-конченного дебила.