Message ID | 20210619093151.1492174-3-linmiaohe@huawei.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Cleanup and fixup for z3fold | expand |
diff --git a/mm/z3fold.c b/mm/z3fold.c index 04d0e493bd2e..e261e14b7753 100644 --- a/mm/z3fold.c +++ b/mm/z3fold.c @@ -1805,8 +1805,11 @@ static int __init init_z3fold(void) { int ret; - /* Make sure the z3fold header is not larger than the page size */ - BUILD_BUG_ON(ZHDR_SIZE_ALIGNED > PAGE_SIZE); + /* + * Make sure the z3fold header is not larger than the page size and + * there has remaining spaces for its buddy. + */ + BUILD_BUG_ON(ZHDR_SIZE_ALIGNED > PAGE_SIZE - CHUNK_SIZE); ret = z3fold_mount(); if (ret) return ret;
It is not enough to just make sure the z3fold header is not larger than the page size. When z3fold header is equal to PAGE_SIZE, we would underflow when check alloc size against PAGE_SIZE - ZHDR_SIZE_ALIGNED - CHUNK_SIZE in z3fold_alloc(). Make sure there has remaining spaces for its buddy to fix this theoretical issue. Signed-off-by: Miaohe Lin <linmiaohe@huawei.com> --- This causes the below checkpatch warning: WARNING: Comparisons should place the constant on the right side of the test #31: FILE: mm/z3fold.c:1812: + BUILD_BUG_ON(ZHDR_SIZE_ALIGNED > PAGE_SIZE - CHUNK_SIZE); But I think the error is false positives as all members are constant. --- mm/z3fold.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)