[lvc-project] [PATCH v2] ocfs2: add chain list sanity check to ocfs2_block_group_alloc()
Dmitry Antipov
dmantipov at yandex.ru
Fri Oct 24 09:05:39 MSK 2025
On 10/23/25 11:12 PM, Fedor Pchelkin wrote:
> * открывать задачи в проекте на gitlab, насколько понимаю, не
> планируете? Учитывая высокие показатели по этому направлению, мы
> полагаем, что наверно оно и не нужно?
Ради соблюдения минимальных формальностей я могу открыть одну задачу
для tracking'a всего этого процесса и выгрузить туда текущий набор
патчей.
Должен заявить, что текущая ситуация с поддержкой всего этого процесса
сообществом мне не нравится. Из трёх человек, указанных в MAINTAINERS
относительно OCFS2, иногда отвечает только один; почему патчи подбираются
именно Мортоном и добавляются им в какую-то mm-nonmm-unstable ветку,
тоже не вполне понятно, и т.д. Создаётся впечатление, что процесс
организован по остаточному принципу.
> * теги Fixes в патчах прям очень сильно бы оказались полезными - на
> некоторые из этих патчей в сообществе могут завести CVE, облегчило бы
> жизнь тем, кто их будет устранять.
Могу попробовать посмотреть.
> Также сейчас вот этот патч, нужно
> ли нам его добавлять в LVC-ветки, и если да, то в какие?
>
> в Closes: https://syzkaller.appspot.com/bug?extid=77026564530dbc29b854
> стоит UBSAN: array-index-out-of-bounds in ocfs2_block_group_fill
>
> Cause bisection: introduced by (bisect log) :
> commit aa545adbe491402cf1e664f6be0a799ed69d9946
> Author: Dmitry Antipov <dmantipov at yandex.ru>
> Date: Tue Oct 7 12:35:26 2025 +0000
>
> ocfs2: annotate flexible array members with __counted_by_le()
>
>
> не очень ясно, какое это имеет отношение к текущему патчу. Ну т.е.
> текущий патч судя по всему правит какую-то давнюю ошибку, но бисекция
> указывает на свежий патч с flexible-array аннотациями, который не
> предназначен для портирования..
Тут дело в том, что без __counted_by(...) можно делать так:
struct T {
...
int x;
int v[];
};
T *t = ...alloc([общий размер]);
memset (t, 0, [общий размер]);
t->v[0] = 1;
t->v[1] = 2;
t->x = [фактический размер v];
В ситуации с
struct T {
...
int x;
int v[] __counted_by(x);
};
так делать нельзя, потому что после memset() t->x будет равен 0
и попытки записи в t->v вызовут срабатывание UBSAN. Поэтому как
минимум в одном месте лихой вызов memset() на всю структуру
целиком пришлось заменить более аккуратной инициализацией членов.
Дмитрий
More information about the lvc-project
mailing list