From: Miaohe Lin Date: Thu, 1 Jul 2021 01:50:27 +0000 (-0700) Subject: mm/z3fold: avoid possible underflow in z3fold_alloc() X-Git-Tag: v5.14-rc1~107^2~129 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=014284a0815f6b9a6e10c8d575d37a5357ce033d;p=linux-block.git mm/z3fold: avoid possible underflow in z3fold_alloc() 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. Link: https://lkml.kernel.org/r/20210619093151.1492174-3-linmiaohe@huawei.com Signed-off-by: Miaohe Lin Reviewed-by: Vitaly Wool Cc: Hillf Danton Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/mm/z3fold.c b/mm/z3fold.c index 0d0b81637f84..64ddf864d5ee 100644 --- a/mm/z3fold.c +++ b/mm/z3fold.c @@ -1803,8 +1803,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;