From: Alexander Potapenko <glider@google.com>
To: akpm@linux-foundation.org
Cc: dvyukov@google.com, elver@google.com,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
stable@vger.kernel.org, gregkh@linuxfoundation.org,
Alexander Potapenko <glider@google.com>
Subject: [PATCH v2] kfence: skip DMA allocations
Date: Tue, 29 Jun 2021 18:17:38 +0200 [thread overview]
Message-ID: <20210629161738.936790-1-glider@google.com> (raw)
Allocation requests with __GFP_DMA/__GFP_DMA32 or
SLAB_CACHE_DMA/SLAB_CACHE_DMA32 cannot be fulfilled by KFENCE, because
they must reside in low memory, whereas KFENCE memory pool is located in
high memory.
Skip such allocations to avoid crashes where DMAable memory is expected.
Fixes: 0ce20dd84089 ("mm: add Kernel Electric-Fence infrastructure")
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Marco Elver <elver@google.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: stable@vger.kernel.org # 5.12+
Signed-off-by: Alexander Potapenko <glider@google.com>
---
v2:
- added parentheses around the GFP clause, as requested by Marco
---
mm/kfence/core.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/mm/kfence/core.c b/mm/kfence/core.c
index 4d21ac44d5d35..f7ce3d876bc9e 100644
--- a/mm/kfence/core.c
+++ b/mm/kfence/core.c
@@ -760,6 +760,14 @@ void *__kfence_alloc(struct kmem_cache *s, size_t size, gfp_t flags)
if (size > PAGE_SIZE)
return NULL;
+ /*
+ * Skip DMA allocations. These must reside in the low memory, which we
+ * cannot guarantee.
+ */
+ if ((flags & (__GFP_DMA | __GFP_DMA32)) ||
+ (s->flags & (SLAB_CACHE_DMA | SLAB_CACHE_DMA32)))
+ return NULL;
+
return kfence_guarded_alloc(s, size, flags);
}
--
2.32.0.93.g670b81a890-goog
next reply other threads:[~2021-06-29 16:18 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-29 16:17 Alexander Potapenko [this message]
2021-06-29 16:40 ` [PATCH v2] kfence: skip DMA allocations Marco Elver
2021-06-30 7:02 ` Souptick Joarder
2021-06-30 9:35 ` Alexander Potapenko
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=20210629161738.936790-1-glider@google.com \
--to=glider@google.com \
--cc=akpm@linux-foundation.org \
--cc=dvyukov@google.com \
--cc=elver@google.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.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;
as well as URLs for NNTP newsgroup(s).