lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Fri, 30 Aug 2013 16:12:24 -0700
From:	Roy Franz <roy.franz@...aro.org>
To:	Grant Likely <grant.likely@...retlab.ca>, matt.fleming@...el.com
Cc:	Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
	linux-efi@...r.kernel.org,
	"linux-arm-kernel@...ts.infradead.org" 
	<linux-arm-kernel@...ts.infradead.org>,
	Russell King - ARM Linux <linux@....linux.org.uk>,
	Leif Lindholm <leif.lindholm@...aro.org>,
	Dave Martin <dave.martin@....com>,
	Mark Salter <msalter@...hat.com>
Subject: Re: [PATCH 12/16] Fix types in EFI calls to match EFI function definitions.

On Fri, Aug 30, 2013 at 6:39 AM, Grant Likely <grant.likely@...retlab.ca> wrote:
> On Fri,  9 Aug 2013 16:26:13 -0700, Roy Franz <roy.franz@...aro.org> wrote:
>> EFI calls can made directly on ARM, so the function pointers
>> are directly invoked.  This allows types to be checked at
>> compile time, so here we ensure that the parameters match
>> the function signature.
>>
>> Signed-off-by: Roy Franz <roy.franz@...aro.org>
>> ---
>>  drivers/firmware/efi/efi-stub-helper.c |   15 +++++++++------
>>  1 file changed, 9 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/firmware/efi/efi-stub-helper.c b/drivers/firmware/efi/efi-stub-helper.c
>> index b707a9f..4bb542f 100644
>> --- a/drivers/firmware/efi/efi-stub-helper.c
>> +++ b/drivers/firmware/efi/efi-stub-helper.c
>> @@ -321,7 +321,7 @@ static efi_status_t handle_cmdline_files(efi_system_table_t *sys_table_arg,
>>       status = efi_call_phys3(sys_table_arg->boottime->allocate_pool,
>>                               EFI_LOADER_DATA,
>>                               nr_files * sizeof(*files),
>> -                             &files);
>> +                             (void **)&files);
>>       if (status != EFI_SUCCESS) {
>>               efi_printk(sys_table_arg, "Failed to alloc mem for file handle list\n");
>>               goto fail;
>> @@ -372,7 +372,8 @@ static efi_status_t handle_cmdline_files(efi_system_table_t *sys_table_arg,
>>                       boottime = sys_table_arg->boottime;
>>
>>                       status = efi_call_phys3(boottime->handle_protocol,
>> -                                     image->device_handle, &fs_proto, &io);
>> +                                     image->device_handle, &fs_proto,
>> +                                             (void **)&io);
>>                       if (status != EFI_SUCCESS) {
>>                               efi_printk(sys_table_arg, "Failed to handle fs_proto\n");
>>                               goto free_files;
>> @@ -406,7 +407,8 @@ static efi_status_t handle_cmdline_files(efi_system_table_t *sys_table_arg,
>>
>>  grow:
>>               status = efi_call_phys3(sys_table_arg->boottime->allocate_pool,
>> -                                     EFI_LOADER_DATA, info_sz, &info);
>> +                                     EFI_LOADER_DATA, info_sz,
>> +                                     (void **)&info);
>>               if (status != EFI_SUCCESS) {
>>                       efi_printk(sys_table_arg, "Failed to alloc mem for file info\n");
>>                       goto close_handles;
>> @@ -456,18 +458,19 @@ grow:
>>
>>               addr = file_addr;
>>               for (j = 0; j < nr_files; j++) {
>> -                     u64 size;
>> +                     unsigned long size;
>>
>>                       size = files[j].size;
>>                       while (size) {
>> -                             u64 chunksize;
>> +                             unsigned long chunksize;
>>                               if (size > EFI_READ_CHUNK_SIZE)
>>                                       chunksize = EFI_READ_CHUNK_SIZE;
>>                               else
>>                                       chunksize = size;
>>                               status = efi_call_phys3(fh->read,
>>                                                       files[j].handle,
>> -                                                     &chunksize, addr);
>> +                                                     &chunksize,
>> +                                                     (void *)addr);
>
> I think you need some description in the commit text about why the type
> of chunksize is changing. It's not clear why you're making this change.
> It is a bug fix?

The type was changed to match the EFI_FILE_PROTOCOL specification -
chunk size is
defined as a native width unsigned integer.  So yes, this is a bug in
that this is wrong for
ia32, since that really should be a u32 in that case.
Since the x86 wrappers break type checking by the compiler these types
were never checked at compile time
before.  chunksize is the the only change that isn't a cast to a type
of void pointer.

I can break this change out as a separate patch if desired.

Matt - would you like me to split the chunksize type change into a
separate patch from the arm EFI stub series?

Roy



>
> g.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists