Hi Heinrich, > > + > > + /* make sure we have enough space for replacements */ > > + if (u16_strsize(name) < sizeof(*name) * start + u16_strsize(L"####")) { > > + ret = EFI_INVALID_PARAMETER; > > + goto out; > > + } > > + boot_order_size = sizeof(boot_order); > > + ret = efi_get_variable_int(L"BootCurrent", > > + &efi_global_variable_guid, NULL, > > + &boot_order_size, &boot_order, NULL); > > + if (ret != EFI_SUCCESS) > > + goto out; > > + > > + name_dup = u16_strdup(name); > > + if (!name_dup) { > > + ret = EFI_OUT_OF_RESOURCES; > > + goto out; > > + } > > + /* Match name variable to BootCurrent */ > > + name_dup[start] = hexmap[(boot_order & 0xf000) >> 12]; > > + name_dup[start + 1] = hexmap[(boot_order & 0x0f00) >> 8]; > > + name_dup[start + 2] = hexmap[(boot_order & 0x00f0) >> 4]; > > + name_dup[start + 3] = hexmap[(boot_order & 0x000f) >> 0]; > > Please, consider using efi_create_indexed_name().
That one doesn't check any input variables and just asks for the user to provide sufficient buffers for the output. I am explicitly checking the sizes here. I guess I can add similar checks to efi_create_indexed_name() and use it, instead of open coding again. Just a note here, there's similar code to the efi bootmgr, so we should probably start replacing all of the functions. Regards /Ilias > > Best regards > > Heinrich > > > + > > + var_value = get_var(name_dup, &efi_global_variable_guid, &size); > > + if (!var_value) { > > + ret = EFI_NOT_FOUND; > > + goto out; > > + } > > + > > + ret = string_to_load_args(var_value, info); > > + if (ret != EFI_SUCCESS) > > + goto out; > > + > > + if (fs_set_blk_dev(info->dev, info->part, FS_TYPE_ANY)) { > > + ret = EFI_NO_MEDIA; > > + goto out; > > + } > > + > > + if (!fs_exists(info->filename)) { > > + ret = EFI_NOT_FOUND; > > + goto out; > > + } > > + > > +out: > > + free(var_value); > > + free(name_dup); > > + return ret; > > +} > > >