From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5B453C4332F for ; Fri, 18 Nov 2022 12:20:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8ECA26B0071; Fri, 18 Nov 2022 07:20:49 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 89D8E8E0002; Fri, 18 Nov 2022 07:20:49 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 764968E0001; Fri, 18 Nov 2022 07:20:49 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 65DAE6B0071 for ; Fri, 18 Nov 2022 07:20:49 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 3A497120CC9 for ; Fri, 18 Nov 2022 12:20:49 +0000 (UTC) X-FDA: 80146471818.24.A8FB538 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) by imf26.hostedemail.com (Postfix) with ESMTP id CEF8914000B for ; Fri, 18 Nov 2022 12:20:48 +0000 (UTC) Received: by mail-wr1-f45.google.com with SMTP id bs21so8990736wrb.4 for ; Fri, 18 Nov 2022 04:20:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :from:to:cc:subject:date:message-id:reply-to; bh=2wFYd3SKqmaD0oo+ZwnqTiEtyF8Vcf1E9b5pi2BuRio=; b=OY9+9XXcrVJuYb82hWMqTmXN9+/1PtEjks3ug+UHqyXfMjGD27E0RglsOn2sjhQoX1 3NfXGC1voMpFE7xQ5hrVdwudRqsU8yAg5LQlA3QT0wmiotrj2Xupqn5iJTpGa7yMtMx3 LAwhcocNUQXeyTNaCKRSzoXVGl2DJbkdM0fQGch7jXNxmK+aM2BjXbeHNVumciAAqiuF PxzQB1Z22CV6pffFuXcr8YjDhGub5rgJc/eJrI/R2ebwU0+YlItTbXahWzuCUxSY+e9O UKRkwKyzZzmw/J7z+051QUrRTAQz10HLhFLhwAzixMjvgPVzkrjTUXkNlI1WRwb7ZQCx O09Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=2wFYd3SKqmaD0oo+ZwnqTiEtyF8Vcf1E9b5pi2BuRio=; b=Lea/kqiQbcxblCd+opUUB9gCrIoAsrxY8T+b64wingPqcJt46DEpyPmB6BexineqGq uOKpbWFBnKI7N9viY198uVGy3cxOYbpt3oz6D6fUUZWS1HcelW+U48uhusMWjMGT100a PUBljEYSdpc9N5sfDnAsqzvzdYgaKXHiIbPuCEtx4K7oB6e9fPGjwhcPrPh4Ac67gzBx dPSio6hyEvAd/ktHFfqTC4T/ivY2i07IxAeP5It3hIaO2nGodIkEKNmxBUAttzP+dEMD 4Pm645q4gaCQhFK0qivgU5EAvSw5ePXyYh4Hqu0lpOrs0QxilxeiD/bcH2vVQr5WWcnC wjzw== X-Gm-Message-State: ANoB5pknN9TNyNuoSYzMkvk9kKOiVjdF+6+WbNUzVOrMizSJ82AW8mlx fDDN4CNadfZ8BqpTMfLLOS4= X-Google-Smtp-Source: AA0mqf61Si7NDFtNIL+RrNmNL9381ir8ezjSI3Xt3XX+JG/FJYHFm1nifnnZe4weRqHiOQR860KrDQ== X-Received: by 2002:adf:dd08:0:b0:236:7aa2:6722 with SMTP id a8-20020adfdd08000000b002367aa26722mr4185401wrm.407.1668774047279; Fri, 18 Nov 2022 04:20:47 -0800 (PST) Received: from localhost ([102.36.222.112]) by smtp.gmail.com with ESMTPSA id v14-20020a5d4b0e000000b002416e383e1csm3475943wrq.25.2022.11.18.04.20.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 18 Nov 2022 04:20:46 -0800 (PST) Date: Fri, 18 Nov 2022 15:20:32 +0300 From: Dan Carpenter To: a.badmaev@clicknet.pro Cc: linux-mm@kvack.org Subject: [bug report] mm: add zblock - new allocator for use via zpool API Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1668774048; a=rsa-sha256; cv=none; b=PctslynWYEo16vuMk2o+LHPoUcR6juzYePcnfx1o8KHtX44iUzOkLGE5Xk6Xrf68ejoJ+R KG+Pg03GbXp4gNUT2mVWe5SlSt2pTIOPWmHeqlAdnSSAafSafWnkkC0R7LPcyHHkhPFW5J 2QpTmyuu2k+nwIuNFzm78oobN/aO3OE= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=OY9+9XXc; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf26.hostedemail.com: domain of error27@gmail.com designates 209.85.221.45 as permitted sender) smtp.mailfrom=error27@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1668774048; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=2wFYd3SKqmaD0oo+ZwnqTiEtyF8Vcf1E9b5pi2BuRio=; b=STHul8U9p81dB2UhwvzMWogltH3nbPGZfJt8B7P4vbqjaqI12vUb7wiWwoXPOLvPPKOPVD YYhY4Pj72V9NFEZ3XcToD/F9o2oR710SFpcvejFCrirdnHGP/Zyf2B48czRk0N2jyFAEag JX0XVHRXUjR1kvVI2cNSW8HFZ3wZqp8= Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=OY9+9XXc; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf26.hostedemail.com: domain of error27@gmail.com designates 209.85.221.45 as permitted sender) smtp.mailfrom=error27@gmail.com X-Rspam-User: X-Stat-Signature: y9xpibyuoooa9zwcaptrdyi5xnbigx8x X-Rspamd-Queue-Id: CEF8914000B X-Rspamd-Server: rspam11 X-HE-Tag: 1668774048-769510 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Hello Ananda, The patch 9097e28c25c8: "mm: add zblock - new allocator for use via zpool API" from Nov 4, 2022, leads to the following Smatch static checker warning: mm/zblock.c:341 zblock_alloc() error: buffer overflow 'block_desc' 29 <= 29 (assuming for loop doesn't break) mm/zblock.c:165 cache_insert_block() error: uninitialized symbol 'min_index'. mm/zblock.c:412 zblock_reclaim_block() warn: always true condition '(block_type >= 0) => (0-u64max >= 0)' mm/zblock.c 297 static int zblock_alloc(struct zblock_pool *pool, size_t size, gfp_t gfp, 298 unsigned long *handle) 299 { 300 unsigned int block_type, slot; 301 struct zblock_block *block; 302 struct block_list *list; 303 304 if (!size) 305 return -EINVAL; 306 307 if (size > PAGE_SIZE) 308 return -ENOSPC; 309 310 /* find basic block type with suitable slot size */ 311 for (block_type = 0; block_type < ARRAY_SIZE(block_desc); block_type++) { 312 if (size <= block_desc[block_type].slot_size) 313 break; 314 } "size" is always <= PAGE_SIZE. Is PAGE_SIZE always 4k? If so then this code is fine. Smatch is bad at handling arrays. If we don't hit the break then this code has an issue. 315 list = &(pool->block_lists[block_type]); 316 317 check: [ Snip ] Similar thing, with breaking from loops: 150 static void cache_insert_block(struct zblock_block *block, struct block_list *list) 151 { 152 unsigned int i, min_free_slots, min_index; 153 154 min_free_slots = MAX_SLOTS; 155 for (i = 0; i < BLOCK_CACHE_SIZE; i++) { 156 if (!list->block_cache[i] || !(list->block_cache[i])->free_slots) { 157 list->block_cache[i] = block; 158 return; 159 } 160 if ((list->block_cache[i])->free_slots < min_free_slots) { 161 min_free_slots = (list->block_cache[i])->free_slots; 162 min_index = i; Smatch cannot figure out if this condition *must* be true. 163 } 164 } 165 list->block_cache[min_index] = block; ^^^^^^^^^ Smatch says this can be uninitialized. 166 } [ snip ] 405 static int zblock_reclaim_block(struct zblock_pool *pool) 406 { 407 struct zblock_block *block; 408 struct block_list *list; 409 unsigned long handle, block_type, slot; ^^^^^^^^^^^^^ ^^^^^^^^^^ 410 int ret, i, reclaimed; 411 412 /* start with list storing blocks with the worst compression and try 413 * to evict the first added (oldest) block in this list 414 */ 415 for (block_type = ARRAY_SIZE(block_desc) - 1; block_type >= 0; --block_type) { ^^^^^^^^^^^^^^^ The condition is always true. Just declare "block_type" as an int. 416 list = &(pool->block_lists[block_type]); 417 spin_lock(&list->lock); 418 419 /* find the oldest block in list */ 420 block = list_last_entry(&list->head, struct zblock_block, block_node); 421 422 if (!block) { regards, dan carpenter