From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Alexander Gordeev <agordeev@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Sasha Levin <sashal@kernel.org>,
hca@linux.ibm.com, linux-s390@vger.kernel.org
Subject: [PATCH AUTOSEL 6.4 08/16] s390/kasan: avoid short by one page shadow memory
Date: Sun, 2 Jul 2023 15:38:07 -0400 [thread overview]
Message-ID: <20230702193815.1775684-8-sashal@kernel.org> (raw)
In-Reply-To: <20230702193815.1775684-1-sashal@kernel.org>
From: Alexander Gordeev <agordeev@linux.ibm.com>
[ Upstream commit 3e8261003bd28208986d3c42004510083c086e24 ]
Kernel Address Sanitizer uses 3 bits per byte to
encode memory. That is the number of bits the start
and end address of a memory range is shifted right
when the corresponding shadow memory is created for
that memory range.
The used memory mapping routine expects page-aligned
addresses, while the above described 3-bit shift might
turn the shadow memory range start and end boundaries
into non-page-aligned in case the size of the original
memory range is less than (PAGE_SIZE << 3). As result,
the resulting shadow memory range could be short on one
page.
Align on page boundary the start and end addresses when
mapping a shadow memory range and avoid the described
issue in the future.
Note, that does not fix a real problem, since currently
no virtual regions of size less than (PAGE_SIZE << 3)
exist.
Reviewed-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
arch/s390/boot/vmem.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/arch/s390/boot/vmem.c b/arch/s390/boot/vmem.c
index acb1f8b53105b..c67f59db7a512 100644
--- a/arch/s390/boot/vmem.c
+++ b/arch/s390/boot/vmem.c
@@ -45,6 +45,13 @@ static void pgtable_populate(unsigned long addr, unsigned long end, enum populat
static pte_t pte_z;
+static inline void kasan_populate(unsigned long start, unsigned long end, enum populate_mode mode)
+{
+ start = PAGE_ALIGN_DOWN(__sha(start));
+ end = PAGE_ALIGN(__sha(end));
+ pgtable_populate(start, end, mode);
+}
+
static void kasan_populate_shadow(void)
{
pmd_t pmd_z = __pmd(__pa(kasan_early_shadow_pte) | _SEGMENT_ENTRY);
@@ -95,17 +102,17 @@ static void kasan_populate_shadow(void)
*/
for_each_physmem_usable_range(i, &start, &end)
- pgtable_populate(__sha(start), __sha(end), POPULATE_KASAN_MAP_SHADOW);
+ kasan_populate(start, end, POPULATE_KASAN_MAP_SHADOW);
if (IS_ENABLED(CONFIG_KASAN_VMALLOC)) {
untracked_end = VMALLOC_START;
/* shallowly populate kasan shadow for vmalloc and modules */
- pgtable_populate(__sha(VMALLOC_START), __sha(MODULES_END), POPULATE_KASAN_SHALLOW);
+ kasan_populate(VMALLOC_START, MODULES_END, POPULATE_KASAN_SHALLOW);
} else {
untracked_end = MODULES_VADDR;
}
/* populate kasan shadow for untracked memory */
- pgtable_populate(__sha(ident_map_size), __sha(untracked_end), POPULATE_KASAN_ZERO_SHADOW);
- pgtable_populate(__sha(MODULES_END), __sha(_REGION1_SIZE), POPULATE_KASAN_ZERO_SHADOW);
+ kasan_populate(ident_map_size, untracked_end, POPULATE_KASAN_ZERO_SHADOW);
+ kasan_populate(MODULES_END, _REGION1_SIZE, POPULATE_KASAN_ZERO_SHADOW);
}
static bool kasan_pgd_populate_zero_shadow(pgd_t *pgd, unsigned long addr,
--
2.39.2
next prev parent reply other threads:[~2023-07-02 19:39 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-02 19:38 [PATCH AUTOSEL 6.4 01/16] vfs: Replace all non-returning strlcpy with strscpy Sasha Levin
2023-07-02 19:38 ` [PATCH AUTOSEL 6.4 02/16] coredump: require O_WRONLY instead of O_RDWR Sasha Levin
2023-07-02 19:38 ` [PATCH AUTOSEL 6.4 03/16] fs: use UB-safe check for signed addition overflow in remap_verify_area Sasha Levin
2023-07-02 19:38 ` [PATCH AUTOSEL 6.4 04/16] ntfs: do not dereference a null ctx on error Sasha Levin
2023-07-02 19:38 ` [PATCH AUTOSEL 6.4 05/16] fs/sysv: Null check to prevent null-ptr-deref bug Sasha Levin
2023-07-02 19:38 ` [PATCH AUTOSEL 6.4 06/16] jfs: Use unsigned variable for length calculations Sasha Levin
2023-07-02 19:38 ` [PATCH AUTOSEL 6.4 07/16] fs: Protect reconfiguration of sb read-write from racing writes Sasha Levin
2023-07-02 19:38 ` Sasha Levin [this message]
2023-07-02 19:38 ` [PATCH AUTOSEL 6.4 09/16] s390/crash: use the correct type for memory allocation Sasha Levin
2023-07-02 19:38 ` [PATCH AUTOSEL 6.4 10/16] s390/boot: fix physmem_info virtual vs physical address confusion Sasha Levin
2023-07-02 19:38 ` [PATCH AUTOSEL 6.4 11/16] fs: use correct __poll_t type Sasha Levin
2023-07-02 19:38 ` [PATCH AUTOSEL 6.4 12/16] fs.h: Optimize file struct to prevent false sharing Sasha Levin
2023-07-02 19:38 ` [PATCH AUTOSEL 6.4 13/16] fs: unexport buffer_check_dirty_writeback Sasha Levin
2023-07-02 19:38 ` [PATCH AUTOSEL 6.4 14/16] eventfd: show the EFD_SEMAPHORE flag in fdinfo Sasha Levin
2023-07-02 19:38 ` [PATCH AUTOSEL 6.4 15/16] autofs: set ctime as well when mtime changes on a dir Sasha Levin
2023-07-02 19:38 ` [PATCH AUTOSEL 6.4 16/16] fs: Provide helpers for manipulating sb->s_readonly_remount Sasha Levin
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=20230702193815.1775684-8-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=agordeev@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=stable@vger.kernel.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