linux-mips.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

  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: link
Be 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).