Messages in this thread Patch in this message | | | From | Hyeonggon Yoo <> | Subject | [PATCH v4 17/17] mm/sl[au]b: check if large object is valid in __ksize() | Date | Wed, 17 Aug 2022 19:18:26 +0900 |
| |
If address of large object is not beginning of folio or size of the folio is too small, it must be invalid. BUG() in such cases.
Cc: Marco Elver <elver@google.com> Suggested-by: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> Reviewed-by: Vlastimil Babka <vbabka@suse.cz> --- mm/slab_common.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/mm/slab_common.c b/mm/slab_common.c index 9c273a5fb0d7..98d029212682 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -984,8 +984,11 @@ size_t __ksize(const void *object) folio = virt_to_folio(object); - if (unlikely(!folio_test_slab(folio))) + if (unlikely(!folio_test_slab(folio))) { + BUG_ON(folio_size(folio) <= KMALLOC_MAX_CACHE_SIZE); + BUG_ON(object != folio_address(folio)); return folio_size(folio); + } return slab_ksize(folio_slab(folio)->slab_cache); } -- 2.32.0
| |