Message ID | 1420710898-32298-1-git-send-email-ard.biesheuvel@linaro.org |
---|---|
State | Accepted |
Commit | 0e63ea48b4d8035dd0e91a3fa6fb79458b47adfb |
Headers | show |
> On 8 jan. 2015, at 11:36, Will Deacon <will.deacon@arm.com> wrote: > >> On Thu, Jan 08, 2015 at 09:54:58AM +0000, Ard Biesheuvel wrote: >> The early ioremap support introduced by patch bf4b558eba92 >> ("arm64: add early_ioremap support") failed to add a call to >> early_ioremap_reset() at an appropriate time. Without this call, >> invocations of early_ioremap etc. that are done too late will go >> unnoticed and may cause corruption. >> >> This is exactly what happened when the first user of this feature >> was added in patch f84d02755f5a ("arm64: add EFI runtime services"). >> The early mapping of the EFI memory map is unmapped during an early >> initcall, at which time the early ioremap support is long gone. >> >> Fix by adding the missing call to early_ioremap_reset() to >> setup_arch(), and move the offending early_memunmap() to right after >> the point where the early mapping of the EFI memory map is last used. >> >> Fixes: f84d02755f5a ("arm64: add EFI runtime services") >> Cc: <stable@vger.kernel.org> >> Signed-off-by: Leif Lindholm <leif.lindholm@linaro.org> >> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> >> --- >> >> After discussing off-list between Mark Salter, Leif and myself, this is the >> bare minimum to fix the early ioremap issue in kernels up to 3.19, combined >> into a single patch. Considering that the early_ioremap support was added in >> 3.15 (eol), but not used until EFI runtime services support was added in 3.16, >> there is no reason to split this up. Also, we have work underway to drastically >> change the way runtime services etc are mapped during early boot [which we hope >> will make it into 3.20] so it makes sense to do the bare minimum here and handle >> any fallout in terms of style etc later. > > Ok, so this replaces the two patch series sent earlier by Leif and should be > appied for 3.19? > yes, please. @leif: please confirm on-list > Will > >> arch/arm64/kernel/efi.c | 2 +- >> arch/arm64/kernel/setup.c | 1 + >> 2 files changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c >> index 6fac253bc783..2bb4347d0edf 100644 >> --- a/arch/arm64/kernel/efi.c >> +++ b/arch/arm64/kernel/efi.c >> @@ -326,6 +326,7 @@ void __init efi_idmap_init(void) >> >> /* boot time idmap_pg_dir is incomplete, so fill in missing parts */ >> efi_setup_idmap(); >> + early_memunmap(memmap.map, memmap.map_end - memmap.map); >> } >> >> static int __init remap_region(efi_memory_desc_t *md, void **new) >> @@ -380,7 +381,6 @@ static int __init arm64_enter_virtual_mode(void) >> } >> >> mapsize = memmap.map_end - memmap.map; >> - early_memunmap(memmap.map, mapsize); >> >> if (efi_runtime_disabled()) { >> pr_info("EFI runtime services will be disabled.\n"); >> diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c >> index b80991166754..20fe2932ad0c 100644 >> --- a/arch/arm64/kernel/setup.c >> +++ b/arch/arm64/kernel/setup.c >> @@ -402,6 +402,7 @@ void __init setup_arch(char **cmdline_p) >> request_standard_resources(); >> >> efi_idmap_init(); >> + early_ioremap_reset(); >> >> unflatten_device_tree(); >> >> -- >> 1.8.3.2 >> >> -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Jan 08, 2015 at 11:36:55AM +0000, Will Deacon wrote: > On Thu, Jan 08, 2015 at 09:54:58AM +0000, Ard Biesheuvel wrote: > > The early ioremap support introduced by patch bf4b558eba92 > > ("arm64: add early_ioremap support") failed to add a call to > > early_ioremap_reset() at an appropriate time. Without this call, > > invocations of early_ioremap etc. that are done too late will go > > unnoticed and may cause corruption. > > > > This is exactly what happened when the first user of this feature > > was added in patch f84d02755f5a ("arm64: add EFI runtime services"). > > The early mapping of the EFI memory map is unmapped during an early > > initcall, at which time the early ioremap support is long gone. > > > > Fix by adding the missing call to early_ioremap_reset() to > > setup_arch(), and move the offending early_memunmap() to right after > > the point where the early mapping of the EFI memory map is last used. > > > > Fixes: f84d02755f5a ("arm64: add EFI runtime services") > > Cc: <stable@vger.kernel.org> > > Signed-off-by: Leif Lindholm <leif.lindholm@linaro.org> > > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> > > --- > > > > After discussing off-list between Mark Salter, Leif and myself, this is the > > bare minimum to fix the early ioremap issue in kernels up to 3.19, combined > > into a single patch. Considering that the early_ioremap support was added in > > 3.15 (eol), but not used until EFI runtime services support was added in 3.16, > > there is no reason to split this up. Also, we have work underway to drastically > > change the way runtime services etc are mapped during early boot [which we hope > > will make it into 3.20] so it makes sense to do the bare minimum here and handle > > any fallout in terms of style etc later. > > Ok, so this replaces the two patch series sent earlier by Leif and should be > appied for 3.19? Correct. / Leif -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index 6fac253bc783..2bb4347d0edf 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c @@ -326,6 +326,7 @@ void __init efi_idmap_init(void) /* boot time idmap_pg_dir is incomplete, so fill in missing parts */ efi_setup_idmap(); + early_memunmap(memmap.map, memmap.map_end - memmap.map); } static int __init remap_region(efi_memory_desc_t *md, void **new) @@ -380,7 +381,6 @@ static int __init arm64_enter_virtual_mode(void) } mapsize = memmap.map_end - memmap.map; - early_memunmap(memmap.map, mapsize); if (efi_runtime_disabled()) { pr_info("EFI runtime services will be disabled.\n"); diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c index b80991166754..20fe2932ad0c 100644 --- a/arch/arm64/kernel/setup.c +++ b/arch/arm64/kernel/setup.c @@ -402,6 +402,7 @@ void __init setup_arch(char **cmdline_p) request_standard_resources(); efi_idmap_init(); + early_ioremap_reset(); unflatten_device_tree();