[pve-devel] [PATCH installer 5/6] sys: block: fix possible use of `undef`-value when detecting disk sizes

Wolfgang Bumiller w.bumiller at proxmox.com
Wed Aug 23 10:31:29 CEST 2023


On Wed, Aug 09, 2023 at 03:44:24PM +0200, Christoph Heiss wrote:
> `$size` and `$logical_bsize` might get unset if there invalid, but then
> are unconditionally converted to an int - which throws an error.
> This was reported on the forum by a user [0].
> 
> Fix it by changing the check a bit to skip the disk immediately if
> detecting either of those two values are invalid or simply not present.
> The fix for `$logical_bsize` simply avoids trying to convert to value to
> an int if invalid.
> 
> tl;dr: Should have no impact at all, in the end. The same
> `run-env-info.json` is generated w/ and w/o the patch if all disks are
> fine. I then also hacked up the script a bit to actually have an invalid
> size, this resulted in the "affected" disk simply missing from the disk
> array - the expected behavior in this case.
> 
> [0] https://forum.proxmox.com/threads/error-installing-proxmox-8.131921/
> 
> Signed-off-by: Christoph Heiss <c.heiss at proxmox.com>
> ---
>  Proxmox/Sys/Block.pm | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/Proxmox/Sys/Block.pm b/Proxmox/Sys/Block.pm
> index 26085e3..f76e0f1 100644
> --- a/Proxmox/Sys/Block.pm
> +++ b/Proxmox/Sys/Block.pm
> @@ -90,10 +90,10 @@ my sub hd_list {
>  	}
>  
>  	my $size = file_read_firstline("$bd/size");
> +	next if !$size;
>  	chomp $size;
> -	$size = undef if !($size && $size =~ m/^\d+$/);
> +	next if $size !~ m/^\d+$/;
>  	$size = int($size);
> -	next if !$size;

^ not sure it makes sense to remove this, but OTOH, file_read_firstline
already chomps, so the first one already catches at least the zero-sized
device case (which btw. is easily reproducible by simply plugging in a
card reader without a card inserted ;-) )





More information about the pve-devel mailing list