From: Ingo Molnar <mingo@kernel.org>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Taku Izumi <izumi.taku@jp.fujitsu.com>,
Matt Fleming <matt.fleming@intel.com>,
Ingo Molnar <mingo.kernel.org@gmail.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
kamezawa.hiroyu@jp.fujitsu.com,
"linux-efi@vger.kernel.org" <linux-efi@vger.kernel.org>
Subject: Re: [PATCH v2] efi: Fix warning of int-to-pointer-cast on x86 32-bit builds
Date: Fri, 23 Oct 2015 10:50:11 +0200 [thread overview]
Message-ID: <20151023085011.GB21631@gmail.com> (raw)
In-Reply-To: <CAKv+Gu8WPvG5rzBB57eK1_Ehj1wB19wR=zzBDRoQbmhRfpCGng@mail.gmail.com>
* Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
> On 23 October 2015 at 11:50, Taku Izumi <izumi.taku@jp.fujitsu.com> wrote:
> > commit-0f96a99 introduces the following warning message:
> >
> > drivers/firmware/efi/fake_mem.c:186:20: warning: cast to pointer
> > from integer of different size [-Wint-to-pointer-cast]
> >
> > new_memmap_phy was defined as a u64 value and casted to void*.
> > This causes a warning of int-to-pointer-cast on x86 32-bit
> > environment.
> >
> > This patch changes the type of "new_memmap_phy" variable
> > from "u64" into "ulong" to avoid it.
> >
> > v1 -> v2:
> > - change the type of "new_memmap_phy" from phys_addr_t
> > into ulong according to Ard's comment
> >
> > Reported-by: Ingo Molnar <mingo@kernel.org>
> > Signed-off-by: Taku Izumi <izumi.taku@jp.fujitsu.com>
> > ---
> > drivers/firmware/efi/fake_mem.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/firmware/efi/fake_mem.c b/drivers/firmware/efi/fake_mem.c
> > index 32bcb14..1f483b4 100644
> > --- a/drivers/firmware/efi/fake_mem.c
> > +++ b/drivers/firmware/efi/fake_mem.c
> > @@ -59,7 +59,7 @@ void __init efi_fake_memmap(void)
> > u64 start, end, m_start, m_end, m_attr;
> > int new_nr_map = memmap.nr_map;
> > efi_memory_desc_t *md;
> > - u64 new_memmap_phy;
> > + ulong new_memmap_phy;
> > void *new_memmap;
> > void *old, *new;
> > int i;
>
>
> After looking at the original (already merged) patch 11/11 again, I
> realize this is still not right: the problem is that efi_memory_map's
> phys_map member uses a void* type to hold a physical address, which
> happens to be correct in the normal case even when phys_addr_t is
> larger than void* (like on ARM with LPAE enabled) since the address it
> holds is the address of an allocation performed by the firmware, which
> only uses 1:1 addressable memory.
>
> However, overwriting memmap.phys_map with a value produced my
> memblock_alloc() is problematic, since the allocation may be above 4
> GB on 32-bit (L)PAE platforms. So the correct way to do this would be
> to set the memblock limit to 4GB before memblock_alloc() on 32-bit
> platforms, and restore it afterwards. This is a bit of a kludge,
> though, and it would be more correct to change the type of
> efi_memory_map::phys_map to phys_addr_t, although I don't know what
> the potential fallout of that change is. Matt?
>
> So that means your v1 of this patch is correct after all, and the
> warning spotted by Ingo uncovered a problem with the original series
> that requires an additional fix.
No, v1 is not right either. This type cast loses information:
memmap.phys_map = (void *)new_memmap_phy;
Because there are countless platforms where 'void *' is 32-bit while physical
addresses are wider.
No way of fudging around the type of 'new_memmap_phy' will solve that bug, it
might only make the symptoms and the warning go away ...
The real problem is with the inappropriate (too narrow) type of memmap.phys_map,
not with the type of new_memmap_phy. The cast just hides it.
One more page in the '1000 real-life examples of why type casts are evil' book.
Thanks,
Ingo
next prev parent reply other threads:[~2015-10-23 8:50 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-23 9:50 [PATCH v2] efi: Fix warning of int-to-pointer-cast on x86 32-bit builds Taku Izumi
[not found] ` <1445593826-4578-1-git-send-email-izumi.taku-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2015-10-23 8:37 ` Ard Biesheuvel
2015-10-23 8:37 ` Ard Biesheuvel
2015-10-23 8:50 ` Ingo Molnar [this message]
2015-10-23 9:48 ` [PATCH 1/2] efi: use correct type for struct efi_memory_map::phys_map Ard Biesheuvel
[not found] ` <1445593697-1342-1-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-10-23 9:48 ` [PATCH 2/2] efi: Fix warning of int-to-pointer-cast on x86 32-bit builds Ard Biesheuvel
2015-10-23 9:48 ` Ard Biesheuvel
2015-10-23 10:27 ` Ingo Molnar
[not found] ` <20151023102728.GA1974-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-10-23 10:30 ` Ingo Molnar
2015-10-23 10:30 ` Ingo Molnar
[not found] ` <20151023103022.GA2297-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-10-23 10:33 ` Ingo Molnar
2015-10-23 10:33 ` Ingo Molnar
2015-10-27 21:12 ` Matt Fleming
2015-10-28 11:28 ` Ingo Molnar
2015-10-27 21:11 ` Matt Fleming
2015-10-28 20:57 ` [tip:core/efi] " tip-bot for Taku Izumi
2015-10-27 21:09 ` [PATCH 1/2] efi: use correct type for struct efi_memory_map::phys_map Matt Fleming
2015-10-28 20:57 ` [tip:core/efi] efi: Use correct type for struct efi_memory_map:: phys_map tip-bot for Ard Biesheuvel
[not found] ` <CAKv+Gu8WPvG5rzBB57eK1_Ehj1wB19wR=zzBDRoQbmhRfpCGng-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-10-26 21:02 ` [PATCH v2] efi: Fix warning of int-to-pointer-cast on x86 32-bit builds Matt Fleming
2015-10-26 21:02 ` Matt Fleming
2015-10-27 2:33 ` Ard Biesheuvel
[not found] ` <CAKv+Gu-1MfUJiF5idd0KoziUxhrDStmRwXQZHuX+gwnJvq083g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-10-27 21:08 ` Matt Fleming
2015-10-27 21:08 ` Matt Fleming
2015-10-23 8:40 ` Ingo Molnar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151023085011.GB21631@gmail.com \
--to=mingo@kernel.org \
--cc=ard.biesheuvel@linaro.org \
--cc=izumi.taku@jp.fujitsu.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-efi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=matt.fleming@intel.com \
--cc=mingo.kernel.org@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.