Use KVec::zeroed() to allocate the zero-padded microcode buffer and copy the bootloader code into it. Also use KVVec::zeroed() to initialize the firmware object's leading zero padding.
Signed-off-by: Thorsten Blum <[email protected]> --- Changes in v2: - Add a // PANIC comment to copy_from_slice() (Danilo) - v1: https://lore.kernel.org/r/[email protected]/ --- drivers/gpu/nova-core/firmware/fwsec/bootloader.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/nova-core/firmware/fwsec/bootloader.rs b/drivers/gpu/nova-core/firmware/fwsec/bootloader.rs index ec4d92317a93..1aa08ae8de78 100644 --- a/drivers/gpu/nova-core/firmware/fwsec/bootloader.rs +++ b/drivers/gpu/nova-core/firmware/fwsec/bootloader.rs @@ -137,10 +137,9 @@ pub(crate) fn new( .align_up(Alignment::new::<{ falcon::MEM_BLOCK_ALIGNMENT }>()) .ok_or(EINVAL)?; - let mut ucode = KVec::with_capacity(aligned_code_size, GFP_KERNEL)?; - ucode.extend_from_slice(code, GFP_KERNEL)?; - ucode.resize(aligned_code_size, 0, GFP_KERNEL)?; - + let mut ucode = KVec::zeroed(aligned_code_size, GFP_KERNEL)?; + // PANIC: ucode is sliced to code.len(); code.len() <= aligned_code_size. + ucode[..code.len()].copy_from_slice(code); ucode }; @@ -162,8 +161,7 @@ pub(crate) fn new( .ok_or(EOVERFLOW)? }; - let mut firmware_obj = KVVec::new(); - firmware_obj.extend_with(align_padding, 0u8, GFP_KERNEL)?; + let mut firmware_obj = KVVec::zeroed(align_padding, GFP_KERNEL)?; firmware_obj.extend_from_slice(firmware.ucode.0.as_slice(), GFP_KERNEL)?; (
