В ядре Linux устранена следующая уязвимость:
ocfs2: исправлено управление заголовком буфера в ocfs2_read_blocks(). В ocfs2_read_blocks() вызывающая сторона не должна предполагать, что вернулся заголовок буфера.
принадлежит sb_getblk(), поэтому put_bh() всегда удаляется.
b_count от 1 до 0. Если это не так, голова буфера остается в режиме ожидания и
скорее всего, будет возвращен при следующем вызове sb_getblk() без изменений - это
то есть с установленным битом BH_Uptodate, даже если ранее проверка не прошла,
что позволяет вставить эту голову буфера в кеш метаданных OCFS2 и
отправить его на верхние уровни.
Чтобы избежать такого сценария, BH_Uptodate должен
очищаться сразу после того, как обратный вызов 'validate()' обнаружил некоторые данные
непоследовательность.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: ocfs2: fix buffer head management in ocfs2_read_blocks() In ocfs2_read_blocks(), caller should't assume that buffer head returned by 'sb_getblk()' is exclusively owned and so 'put_bh()' always drops b_count from 1 to 0. If it is not so, buffer head remains on hold and likely to be returned by the next call to 'sb_getblk()' unchanged - that is, with BH_Uptodate bit set even if it has failed validation previously, thus allowing to insert that buffer head into OCFS2 metadata cache and submit it to upper layers. To avoid such a scenario, BH_Uptodate should be cleared immediately after 'validate()' callback has detected some data inconsistency.