[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