From: Paul Burton <paul.burton@imgtec.com> To: <linux-mips@linux-mips.org> Cc: Ralf Baechle <ralf@linux-mips.org>, Nicholas Piggin <npiggin@gmail.com>, Paul Burton <paul.burton@imgtec.com> Subject: [PATCH 5/6] MIPS: Ensure bss section ends on a long-aligned address Date: Thu, 20 Oct 2016 21:27:04 +0100 [thread overview] Message-ID: <20161020202705.3783-6-paul.burton@imgtec.com> (raw) In-Reply-To: <20161020202705.3783-1-paul.burton@imgtec.com> When clearing the .bss section in kernel_entry we do so using LONG_S instructions, and branch whilst the current write address doesn't equal the end of the .bss section minus the size of a long integer. The .bss section always begins at a long-aligned address and we always increment the write pointer by the size of a long integer - we therefore rely upon the .bss section ending at a long-aligned address. If this is not the case then the long-aligned write address can never be equal to the non-long-aligned end address & we will continue to increment past the end of the .bss section, attempting to zero the rest of memory. Despite this requirement that .bss end at a long-aligned address we pass 0 as the end alignment requirement to the BSS_SECTION macro and thus don't guarantee any particular alignment, allowing us to hit the error condition described above. Fix this by instead passing LONGSIZE as the end alignment argument to the BSS_SECTION macro. Signed-off-by: Paul Burton <paul.burton@imgtec.com> Cc: linux-mips@linux-mips.org Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Nicholas Piggin <npiggin@gmail.com> --- arch/mips/kernel/vmlinux.lds.S | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S index d5de675..d1f5401 100644 --- a/arch/mips/kernel/vmlinux.lds.S +++ b/arch/mips/kernel/vmlinux.lds.S @@ -1,3 +1,4 @@ +#include <asm/asm.h> #include <asm/asm-offsets.h> #include <asm/thread_info.h> @@ -182,7 +183,7 @@ SECTIONS * Force .bss to 64K alignment so that .bss..swapper_pg_dir * gets that alignment. .sbss should be empty, so there will be * no holes after __init_end. */ - BSS_SECTION(0, 0x10000, 0) + BSS_SECTION(0, 0x10000, LONGSIZE) _end = . ; -- 2.10.0
WARNING: multiple messages have this Message-ID (diff)
From: Paul Burton <paul.burton@imgtec.com> To: linux-mips@linux-mips.org Cc: Ralf Baechle <ralf@linux-mips.org>, Nicholas Piggin <npiggin@gmail.com>, Paul Burton <paul.burton@imgtec.com> Subject: [PATCH 5/6] MIPS: Ensure bss section ends on a long-aligned address Date: Thu, 20 Oct 2016 21:27:04 +0100 [thread overview] Message-ID: <20161020202705.3783-6-paul.burton@imgtec.com> (raw) Message-ID: <20161020202704.f2GGX_o-2i7LUXUAwQ9wcH4crC7_idmWimsaArLBxHs@z> (raw) In-Reply-To: <20161020202705.3783-1-paul.burton@imgtec.com> When clearing the .bss section in kernel_entry we do so using LONG_S instructions, and branch whilst the current write address doesn't equal the end of the .bss section minus the size of a long integer. The .bss section always begins at a long-aligned address and we always increment the write pointer by the size of a long integer - we therefore rely upon the .bss section ending at a long-aligned address. If this is not the case then the long-aligned write address can never be equal to the non-long-aligned end address & we will continue to increment past the end of the .bss section, attempting to zero the rest of memory. Despite this requirement that .bss end at a long-aligned address we pass 0 as the end alignment requirement to the BSS_SECTION macro and thus don't guarantee any particular alignment, allowing us to hit the error condition described above. Fix this by instead passing LONGSIZE as the end alignment argument to the BSS_SECTION macro. Signed-off-by: Paul Burton <paul.burton@imgtec.com> Cc: linux-mips@linux-mips.org Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Nicholas Piggin <npiggin@gmail.com> --- arch/mips/kernel/vmlinux.lds.S | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S index d5de675..d1f5401 100644 --- a/arch/mips/kernel/vmlinux.lds.S +++ b/arch/mips/kernel/vmlinux.lds.S @@ -1,3 +1,4 @@ +#include <asm/asm.h> #include <asm/asm-offsets.h> #include <asm/thread_info.h> @@ -182,7 +183,7 @@ SECTIONS * Force .bss to 64K alignment so that .bss..swapper_pg_dir * gets that alignment. .sbss should be empty, so there will be * no holes after __init_end. */ - BSS_SECTION(0, 0x10000, 0) + BSS_SECTION(0, 0x10000, LONGSIZE) _end = . ; -- 2.10.0
next prev parent reply other threads:[~2016-10-20 20:29 UTC|newest] Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-10-20 20:26 [PATCH 0/6] MIPS: Use thin archives & dead code elimination Paul Burton 2016-10-20 20:26 ` Paul Burton 2016-10-20 20:27 ` [PATCH 1/6] kbuild: Keep device tree tables though " Paul Burton 2016-10-20 20:27 ` Paul Burton 2016-10-21 9:33 ` Sergei Shtylyov 2016-10-20 20:27 ` [PATCH 2/6] kbuild: Keep .init.setup section through " Paul Burton 2016-10-20 20:27 ` Paul Burton 2016-10-20 20:27 ` [PATCH 3/6] kbuild: Keep PCI fixups " Paul Burton 2016-10-20 20:27 ` Paul Burton 2016-10-20 20:27 ` [PATCH 4/6] kbuild: Keep earlycon table " Paul Burton 2016-10-20 20:27 ` Paul Burton 2016-10-20 20:27 ` Paul Burton [this message] 2016-10-20 20:27 ` [PATCH 5/6] MIPS: Ensure bss section ends on a long-aligned address Paul Burton 2016-11-04 8:46 ` Marcin Nowakowski 2016-11-04 8:46 ` Marcin Nowakowski 2016-10-20 20:27 ` [PATCH 6/6] MIPS: Use thin archives & dead code elimination Paul Burton 2016-10-20 20:27 ` Paul Burton 2016-10-21 0:51 ` [PATCH 0/6] " Nicholas Piggin 2016-10-21 0:51 ` Nicholas Piggin 2016-10-21 7:45 ` Paul Burton 2016-10-21 7:45 ` Paul Burton 2016-10-21 8:47 ` Nicholas Piggin 2016-10-21 8:47 ` Nicholas Piggin
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=20161020202705.3783-6-paul.burton@imgtec.com \ --to=paul.burton@imgtec.com \ --cc=linux-mips@linux-mips.org \ --cc=npiggin@gmail.com \ --cc=ralf@linux-mips.org \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).