Re: [PATCH 1/2] erofs-utils: fix undefined behavior shift in erofs_init_devices

Gao Xiang <[email protected]>
Newsgroups org.ozlabs.lists.linux-erofs
Message-ID <[email protected]>

On 2026/4/19 21:16, Nithurshen wrote:
> In erofs_init_devices(), roundup_pow_of_two() can potentially trigger
> an undefined behavior shift if the incremented 'ondisk_extradevs'
> value results in an overflow or an input that leads to an
> out-of-bounds shift.

I wonder why there is "out-of-bounds shift"? why you all
think it's an issue? Can you please explain in details?

ondisk_extradevs is 65535 at most.

Thanks,
Gao Xiang


> 
> Promote the argument to u64 before the increment to ensure the
> rounding logic operates on a safe bit-width.
> 
> Signed-off-by: Nithurshen <[email protected]>
> ---
>   lib/super.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/lib/super.c b/lib/super.c
> index 088c9a0..10831a7 100644
> --- a/lib/super.c
> +++ b/lib/super.c
> @@ -49,7 +49,7 @@ static int erofs_init_devices(struct erofs_sb_info *sbi,
>   		return 0;
>   
>   	sbi->extra_devices = ondisk_extradevs;
> -	sbi->device_id_mask = roundup_pow_of_two(ondisk_extradevs + 1) - 1;
> +	sbi->device_id_mask = roundup_pow_of_two((u64)ondisk_extradevs + 1) - 1;
>   	sbi->devs = calloc(ondisk_extradevs, sizeof(*sbi->devs));
>   	if (!sbi->devs)
>   		return -ENOMEM;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.