Message ID | 20201119211028.1834161-1-cascardo@canonical.com |
---|---|
State | New |
Headers | show |
Series | [SRU,Groovy] riscv: Fixup bootup failure with HARDENED_USERCOPY | expand |
LGTM Acked-by: Ian May <ian.may@canonical.com> On 2020-11-19 18:10:28 , Thadeu Lima de Souza Cascardo wrote: > From: Guo Ren <guoren@linux.alibaba.com> > > BugLink: https://bugs.launchpad.net/bugs/1904912 > > 6184358da000 ("riscv: Fixup static_obj() fail") attempted to elide a lockdep > failure by rearranging our kernel image to place all initdata within [_stext, > _end], thus triggering lockdep to treat these as static objects. These objects > are released and eventually reallocated, causing check_kernel_text_object() to > trigger a BUG(). > > This backs out the change to make [_stext, _end] all-encompassing, instead just > moving initdata. This results in initdata being outside of [__init_begin, > __init_end], which means initdata can't be freed. > > Link: https://lore.kernel.org/linux-riscv/1593266228-61125-1-git-send-email-guoren@kernel.org/T/#t > Signed-off-by: Guo Ren <guoren@linux.alibaba.com> > Reported-by: Aurelien Jarno <aurelien@aurel32.net> > Tested-by: Aurelien Jarno <aurelien@aurel32.net> > [Palmer: Clean up commit text] > Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com> > (cherry picked from commit 84814460eef9af0fb56a4698341c9cb7996a6312) > Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com> > --- > arch/riscv/kernel/vmlinux.lds.S | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/arch/riscv/kernel/vmlinux.lds.S b/arch/riscv/kernel/vmlinux.lds.S > index f3586e31ed1e..34d00d9e6eac 100644 > --- a/arch/riscv/kernel/vmlinux.lds.S > +++ b/arch/riscv/kernel/vmlinux.lds.S > @@ -22,13 +22,11 @@ SECTIONS > /* Beginning of code and text segment */ > . = LOAD_OFFSET; > _start = .; > - _stext = .; > HEAD_TEXT_SECTION > . = ALIGN(PAGE_SIZE); > > __init_begin = .; > INIT_TEXT_SECTION(PAGE_SIZE) > - INIT_DATA_SECTION(16) > . = ALIGN(8); > __soc_early_init_table : { > __soc_early_init_table_start = .; > @@ -55,6 +53,7 @@ SECTIONS > . = ALIGN(SECTION_ALIGN); > .text : { > _text = .; > + _stext = .; > TEXT_TEXT > SCHED_TEXT > CPUIDLE_TEXT > @@ -67,6 +66,8 @@ SECTIONS > _etext = .; > } > > + INIT_DATA_SECTION(16) > + > /* Start of data section */ > _sdata = .; > RO_DATA(SECTION_ALIGN) > -- > 2.27.0 > > > -- > kernel-team mailing list > kernel-team@lists.ubuntu.com > https://lists.ubuntu.com/mailman/listinfo/kernel-team
On 19/11/2020 21:10, Thadeu Lima de Souza Cascardo wrote: > From: Guo Ren <guoren@linux.alibaba.com> > > BugLink: https://bugs.launchpad.net/bugs/1904912 > > 6184358da000 ("riscv: Fixup static_obj() fail") attempted to elide a lockdep > failure by rearranging our kernel image to place all initdata within [_stext, > _end], thus triggering lockdep to treat these as static objects. These objects > are released and eventually reallocated, causing check_kernel_text_object() to > trigger a BUG(). > > This backs out the change to make [_stext, _end] all-encompassing, instead just > moving initdata. This results in initdata being outside of [__init_begin, > __init_end], which means initdata can't be freed. > > Link: https://lore.kernel.org/linux-riscv/1593266228-61125-1-git-send-email-guoren@kernel.org/T/#t > Signed-off-by: Guo Ren <guoren@linux.alibaba.com> > Reported-by: Aurelien Jarno <aurelien@aurel32.net> > Tested-by: Aurelien Jarno <aurelien@aurel32.net> > [Palmer: Clean up commit text] > Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com> > (cherry picked from commit 84814460eef9af0fb56a4698341c9cb7996a6312) > Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com> > --- > arch/riscv/kernel/vmlinux.lds.S | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/arch/riscv/kernel/vmlinux.lds.S b/arch/riscv/kernel/vmlinux.lds.S > index f3586e31ed1e..34d00d9e6eac 100644 > --- a/arch/riscv/kernel/vmlinux.lds.S > +++ b/arch/riscv/kernel/vmlinux.lds.S > @@ -22,13 +22,11 @@ SECTIONS > /* Beginning of code and text segment */ > . = LOAD_OFFSET; > _start = .; > - _stext = .; > HEAD_TEXT_SECTION > . = ALIGN(PAGE_SIZE); > > __init_begin = .; > INIT_TEXT_SECTION(PAGE_SIZE) > - INIT_DATA_SECTION(16) > . = ALIGN(8); > __soc_early_init_table : { > __soc_early_init_table_start = .; > @@ -55,6 +53,7 @@ SECTIONS > . = ALIGN(SECTION_ALIGN); > .text : { > _text = .; > + _stext = .; > TEXT_TEXT > SCHED_TEXT > CPUIDLE_TEXT > @@ -67,6 +66,8 @@ SECTIONS > _etext = .; > } > > + INIT_DATA_SECTION(16) > + > /* Start of data section */ > _sdata = .; > RO_DATA(SECTION_ALIGN) > Looks sane to me. Thanks Thadeu Acked-by: Colin Ian King <colin.king@canonical.com>
LGTM Acked-by: Kamal Mostafa <kamal@canonical.com> -Kamal On Thu, Nov 19, 2020 at 06:10:28PM -0300, Thadeu Lima de Souza Cascardo wrote: > From: Guo Ren <guoren@linux.alibaba.com> > > BugLink: https://bugs.launchpad.net/bugs/1904912 > > 6184358da000 ("riscv: Fixup static_obj() fail") attempted to elide a lockdep > failure by rearranging our kernel image to place all initdata within [_stext, > _end], thus triggering lockdep to treat these as static objects. These objects > are released and eventually reallocated, causing check_kernel_text_object() to > trigger a BUG(). > > This backs out the change to make [_stext, _end] all-encompassing, instead just > moving initdata. This results in initdata being outside of [__init_begin, > __init_end], which means initdata can't be freed. > > Link: https://lore.kernel.org/linux-riscv/1593266228-61125-1-git-send-email-guoren@kernel.org/T/#t > Signed-off-by: Guo Ren <guoren@linux.alibaba.com> > Reported-by: Aurelien Jarno <aurelien@aurel32.net> > Tested-by: Aurelien Jarno <aurelien@aurel32.net> > [Palmer: Clean up commit text] > Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com> > (cherry picked from commit 84814460eef9af0fb56a4698341c9cb7996a6312) > Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com> > --- > arch/riscv/kernel/vmlinux.lds.S | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/arch/riscv/kernel/vmlinux.lds.S b/arch/riscv/kernel/vmlinux.lds.S > index f3586e31ed1e..34d00d9e6eac 100644 > --- a/arch/riscv/kernel/vmlinux.lds.S > +++ b/arch/riscv/kernel/vmlinux.lds.S > @@ -22,13 +22,11 @@ SECTIONS > /* Beginning of code and text segment */ > . = LOAD_OFFSET; > _start = .; > - _stext = .; > HEAD_TEXT_SECTION > . = ALIGN(PAGE_SIZE); > > __init_begin = .; > INIT_TEXT_SECTION(PAGE_SIZE) > - INIT_DATA_SECTION(16) > . = ALIGN(8); > __soc_early_init_table : { > __soc_early_init_table_start = .; > @@ -55,6 +53,7 @@ SECTIONS > . = ALIGN(SECTION_ALIGN); > .text : { > _text = .; > + _stext = .; > TEXT_TEXT > SCHED_TEXT > CPUIDLE_TEXT > @@ -67,6 +66,8 @@ SECTIONS > _etext = .; > } > > + INIT_DATA_SECTION(16) > + > /* Start of data section */ > _sdata = .; > RO_DATA(SECTION_ALIGN) > -- > 2.27.0 > > > -- > kernel-team mailing list > kernel-team@lists.ubuntu.com > https://lists.ubuntu.com/mailman/listinfo/kernel-team
Applied to groovy master-next branch. Also applied locally to groovy:linux-riscv master branch. Thanks. Cascardo.
diff --git a/arch/riscv/kernel/vmlinux.lds.S b/arch/riscv/kernel/vmlinux.lds.S index f3586e31ed1e..34d00d9e6eac 100644 --- a/arch/riscv/kernel/vmlinux.lds.S +++ b/arch/riscv/kernel/vmlinux.lds.S @@ -22,13 +22,11 @@ SECTIONS /* Beginning of code and text segment */ . = LOAD_OFFSET; _start = .; - _stext = .; HEAD_TEXT_SECTION . = ALIGN(PAGE_SIZE); __init_begin = .; INIT_TEXT_SECTION(PAGE_SIZE) - INIT_DATA_SECTION(16) . = ALIGN(8); __soc_early_init_table : { __soc_early_init_table_start = .; @@ -55,6 +53,7 @@ SECTIONS . = ALIGN(SECTION_ALIGN); .text : { _text = .; + _stext = .; TEXT_TEXT SCHED_TEXT CPUIDLE_TEXT @@ -67,6 +66,8 @@ SECTIONS _etext = .; } + INIT_DATA_SECTION(16) + /* Start of data section */ _sdata = .; RO_DATA(SECTION_ALIGN)