Skip to content

Commit a241d94

Browse files
committed
efi: libstub: fix type confusion for load_options_size
Even though it is unlikely to ever make a difference, let's use u32 consistently for the size of the load_options provided by the firmware (aka the command line) While at it, do some general cleanup too: use efi_char16_t, avoid using options_chars in places where it really means options_size, etc. Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
1 parent c37b830 commit a241d94

3 files changed

Lines changed: 12 additions & 11 deletions

File tree

drivers/firmware/efi/libstub/efi-stub-helper.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ bool efi_load_option_unpack(efi_load_option_unpacked_t *dest,
310310
*
311311
* Detect this case and extract OptionalData.
312312
*/
313-
void efi_apply_loadoptions_quirk(const void **load_options, int *load_options_size)
313+
void efi_apply_loadoptions_quirk(const void **load_options, u32 *load_options_size)
314314
{
315315
const efi_load_option_t *load_option = *load_options;
316316
efi_load_option_unpacked_t load_option_unpacked;
@@ -341,21 +341,22 @@ void efi_apply_loadoptions_quirk(const void **load_options, int *load_options_si
341341
*/
342342
char *efi_convert_cmdline(efi_loaded_image_t *image, int *cmd_line_len)
343343
{
344-
const u16 *s2;
345-
unsigned long cmdline_addr = 0;
346-
int options_chars = efi_table_attr(image, load_options_size);
347-
const u16 *options = efi_table_attr(image, load_options);
344+
const efi_char16_t *options = efi_table_attr(image, load_options);
345+
u32 options_size = efi_table_attr(image, load_options_size);
348346
int options_bytes = 0, safe_options_bytes = 0; /* UTF-8 bytes */
347+
unsigned long cmdline_addr = 0;
348+
const efi_char16_t *s2;
349349
bool in_quote = false;
350350
efi_status_t status;
351+
u32 options_chars;
351352

352-
efi_apply_loadoptions_quirk((const void **)&options, &options_chars);
353-
options_chars /= sizeof(*options);
353+
efi_apply_loadoptions_quirk((const void **)&options, &options_size);
354+
options_chars = options_size / sizeof(efi_char16_t);
354355

355356
if (options) {
356357
s2 = options;
357358
while (options_bytes < COMMAND_LINE_SIZE && options_chars--) {
358-
u16 c = *s2++;
359+
efi_char16_t c = *s2++;
359360

360361
if (c < 0x80) {
361362
if (c == L'\0' || c == L'\n')

drivers/firmware/efi/libstub/efistub.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -861,7 +861,7 @@ typedef struct {
861861
u16 file_path_list_length;
862862
const efi_char16_t *description;
863863
const efi_device_path_protocol_t *file_path_list;
864-
size_t optional_data_size;
864+
u32 optional_data_size;
865865
const void *optional_data;
866866
} efi_load_option_unpacked_t;
867867

@@ -906,7 +906,7 @@ __printf(1, 2) int efi_printk(char const *fmt, ...);
906906

907907
void efi_free(unsigned long size, unsigned long addr);
908908

909-
void efi_apply_loadoptions_quirk(const void **load_options, int *load_options_size);
909+
void efi_apply_loadoptions_quirk(const void **load_options, u32 *load_options_size);
910910

911911
char *efi_convert_cmdline(efi_loaded_image_t *image, int *cmd_line_len);
912912

drivers/firmware/efi/libstub/file.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ efi_status_t handle_cmdline_files(efi_loaded_image_t *image,
154154
unsigned long *load_size)
155155
{
156156
const efi_char16_t *cmdline = image->load_options;
157-
int cmdline_len = image->load_options_size;
157+
u32 cmdline_len = image->load_options_size;
158158
unsigned long efi_chunk_size = ULONG_MAX;
159159
efi_file_protocol_t *volume = NULL;
160160
efi_file_protocol_t *file;

0 commit comments

Comments
 (0)