[lvc-project] [PATCH 6.1/6.12] gfs2: validate rindex bitmap length before allocation

Fedor Pchelkin pchelkin at ispras.ru
Sun Aug 9 23:34:02 MSK 2026


Есть ли проблема в апстриме (master ветке ядра)?  Если есть, то
исправление сначала готовится и отправляется туда.  6.1/6.12 в теме
письма пока не надо.

On Fri, 07. Aug 14:28, Makar Semyonov wrote:
> 

Лишняя пустая строка в начале описания.

> Validate ri_length against ri_bitbytes before allocating rd_bits.
> Fix a WARNING in gfs2_ri_update().

Здесь не вижу постановки проблемы.  Точнее, она очень лаконичная, и из
неё ничего непонятно.  Что за WARNING?  Можно приложить полное сообщение
об ошибке (как в issue на гитлабе).

Из-за чего случается эта проблема?  Это важно пояснять, т.к. это
собственно и есть суть анализа ошибки, которая позволит в том числе
оценить корректность её исправления.

> 

Нужен тег Fixes.

https://portal.linuxtesting.ru/How-to-send-patches-to-kernel.html#Fixes

> Signed-off-by: Makar Semyonov <m.semenov at tssltd.ru>
> ---
>  fs/gfs2/rgrp.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
> index f602fb844951..91b02201bb1d 100644
> --- a/fs/gfs2/rgrp.c
> +++ b/fs/gfs2/rgrp.c
> @@ -763,6 +763,16 @@ static int compute_bitstructs(struct gfs2_rgrpd *rgd)
>  	if (!length)
>  		return -EINVAL;
>  
> +	if (length > 1) {

Зачем нужна эта проверка?

> +		u32 bitmap_bytes_per_block = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_meta_header);
> +		u32 max_bitmap_blocks = DIV_ROUND_UP(rgd->rd_bitbytes, bitmap_bytes_per_block) + 1;
> +		if (length > max_bitmap_blocks) {
> +			gfs2_lm(sdp, "invalid rindex: ri_length=%u ri_bitbytes=%u max=%u\n", length,
> +			rgd->rd_bitbytes, max_bitmap_blocks);
> +			return -EIO;
> +		}
> +	}

Информации, позволяющей понять читателю патча, почему производимые в патче
расчёты max_bitmap_blocks корректны, в описании патча нет..


На этот блок кода ругается scripts/checkpatch.pl из исходников ядра.

WARNING: Missing a blank line after declarations
#25: FILE: fs/gfs2/rgrp.c:769:
+		u32 max_bitmap_blocks = DIV_ROUND_UP(rgd->rd_bitbytes, bitmap_bytes_per_block) + 1;
+		if (length > max_bitmap_blocks) {

WARNING: line length of 100 exceeds 80 columns
#26: FILE: fs/gfs2/rgrp.c:770:
+			gfs2_lm(sdp, "invalid rindex: ri_length=%u ri_bitbytes=%u max=%u\n", length,

CHECK: Alignment should match open parenthesis
#27: FILE: fs/gfs2/rgrp.c:771:
+			gfs2_lm(sdp, "invalid rindex: ri_length=%u ri_bitbytes=%u max=%u\n", length,
+			rgd->rd_bitbytes, max_bitmap_blocks);

> +
>  	rgd->rd_bits = kcalloc(length, sizeof(struct gfs2_bitmap), GFP_NOFS);
>  	if (!rgd->rd_bits)
>  		return -ENOMEM;
> -- 
> 2.43.0



More information about the lvc-project mailing list