|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] xen/xmalloc: XMEM_POOL_POISON improvements
commit b74c735f88275f8ae09521c452e8819832b51a97
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Fri Oct 20 20:34:29 2023 +0100
Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Thu Dec 21 12:19:40 2023 +0000
xen/xmalloc: XMEM_POOL_POISON improvements
When in use, the spew:
(XEN) Assertion '!memchr_inv(b->ptr.buffer + MIN_BLOCK_SIZE, POISON_BYTE,
(b->size & BLOCK_SIZE_MASK) - MIN_BLOCK_SIZE)' failed at
common/xmalloc_tlsf.c:246
is unweidly and likely meaningless to non-Xen developers. Therefore:
* Switch to IS_ENABLED(). There's no need for full #ifdef-ary.
* Pull memchr_inv() out into the if(), and provide an error message which
clearly states that corruption has been found.
* XMEM_POOL_POISON can be enabled in release builds. Use printk()+BUG() so
it doesn't silently stop working when assertions are compiled out.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Julien Grall <jgrall@xxxxxxxxxx>
---
xen/common/xmalloc_tlsf.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/xen/common/xmalloc_tlsf.c b/xen/common/xmalloc_tlsf.c
index 349b31cb4c..5e55fc463e 100644
--- a/xen/common/xmalloc_tlsf.c
+++ b/xen/common/xmalloc_tlsf.c
@@ -249,11 +249,14 @@ static inline void EXTRACT_BLOCK(struct bhdr *b, struct
xmem_pool *p, int fl,
}
b->ptr.free_ptr = (struct free_ptr) {NULL, NULL};
-#ifdef CONFIG_XMEM_POOL_POISON
- if ( (b->size & BLOCK_SIZE_MASK) > MIN_BLOCK_SIZE )
- ASSERT(!memchr_inv(b->ptr.buffer + MIN_BLOCK_SIZE, POISON_BYTE,
- (b->size & BLOCK_SIZE_MASK) - MIN_BLOCK_SIZE));
-#endif /* CONFIG_XMEM_POOL_POISON */
+ if ( IS_ENABLED(CONFIG_XMEM_POOL_POISON) &&
+ (b->size & BLOCK_SIZE_MASK) > MIN_BLOCK_SIZE &&
+ memchr_inv(b->ptr.buffer + MIN_BLOCK_SIZE, POISON_BYTE,
+ (b->size & BLOCK_SIZE_MASK) - MIN_BLOCK_SIZE) )
+ {
+ printk(XENLOG_ERR "XMEM Pool corruption found");
+ BUG();
+ }
}
/**
@@ -261,11 +264,10 @@ static inline void EXTRACT_BLOCK(struct bhdr *b, struct
xmem_pool *p, int fl,
*/
static inline void INSERT_BLOCK(struct bhdr *b, struct xmem_pool *p, int fl,
int sl)
{
-#ifdef CONFIG_XMEM_POOL_POISON
- if ( (b->size & BLOCK_SIZE_MASK) > MIN_BLOCK_SIZE )
+ if ( IS_ENABLED(CONFIG_XMEM_POOL_POISON) &&
+ (b->size & BLOCK_SIZE_MASK) > MIN_BLOCK_SIZE )
memset(b->ptr.buffer + MIN_BLOCK_SIZE, POISON_BYTE,
(b->size & BLOCK_SIZE_MASK) - MIN_BLOCK_SIZE);
-#endif /* CONFIG_XMEM_POOL_POISON */
b->ptr.free_ptr = (struct free_ptr) {NULL, p->matrix[fl][sl]};
if ( p->matrix[fl][sl] )
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |