Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp4299650rdb; Mon, 11 Dec 2023 15:17:42 -0800 (PST) X-Google-Smtp-Source: AGHT+IGSZ2IlFgh4W0rvM/JvX5dTMB8YM/X2Mvw5LTz8Bf38ZZ/gTt0l8WUIQENmLJ4u4MPQ170I X-Received: by 2002:a05:6a20:4caa:b0:190:20d:5b9a with SMTP id fq42-20020a056a204caa00b00190020d5b9amr2024830pzb.7.1702336661792; Mon, 11 Dec 2023 15:17:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702336661; cv=none; d=google.com; s=arc-20160816; b=evT0Lailh28KyHIAMQ4QTcufCmi6atrKM9R5rQwzlLn9yEKkWC3w7OSIjPzz8Vg8KU Ov2bak4hpzkshv5HHVjx0mlHQlT04kFWwwjM6X6YnKLEDxRYLyk81voWKaQKz5R3BNAm dHOIWCnhUHqJniVtcF3PHQy7faOZtB/VfE9evSAeYkzWvTlUf3wxNZ6fwIbuOKbe9hm+ 8wUA1V2gQOdwsLIulXX12uCpf8J0GY1xFcxhG6gunA3xKfDsu5LsAK46PynNxgGguTKl 7ntDOhKZejAm5QthuAabi1Y8My9+wakSsuxsPUxrO9b8+M6f1zX0lUkFac/7huGo1Plf IPuA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=sENf5GeNDIHjhZ1BQ2OnD+iO/Ion3X+uI8SZ4aXQv8w=; fh=3ES6XCGjHLSIXXGHe9/cRJ07H60eZUckKNK+3dLPQOI=; b=aReeRASgYNafMdU0+oTs+zi9pXYL/146oFFxAYXSX3jg5vb7Rh77feWbBEMW1R71+8 7eumn5Ybl0f1X3NI8LsW5LJhO1ttP0dvTBDSf+q43v4qBEbeJw4QNoyisRSxIh1l8SRd e3mCeCuRzPScA42qF+cRvGG0E0exWH56SQKlbkGoyMRkkaTX+AhbLK8K14/y+wt0bFv0 9jFgisMvHFuuZYZmUl9Uynd3rRAGcTnDkQfm4qjH1RJL6HU/snfCRLCvmPA6o83w+w3N CRmIayYu7iDLZFjy46YyLPaXVnfCNvXXEl/3Yv2shG0S1NyoBpDlGLqSt/K+2Pn8WRkG HDoQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=UHLNimI1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from howler.vger.email (howler.vger.email. [2620:137:e000::3:4]) by mx.google.com with ESMTPS id v13-20020a17090a898d00b0028a7a8b3b24si3508843pjn.8.2023.12.11.15.17.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Dec 2023 15:17:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) client-ip=2620:137:e000::3:4; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=UHLNimI1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id F08A88073682; Mon, 11 Dec 2023 15:17:37 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345323AbjLKXRJ (ORCPT + 99 others); Mon, 11 Dec 2023 18:17:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51458 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345264AbjLKXRI (ORCPT ); Mon, 11 Dec 2023 18:17:08 -0500 Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 60A9A9A; Mon, 11 Dec 2023 15:17:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1702336634; x=1733872634; h=date:from:to:cc:subject:message-id:references: mime-version:in-reply-to; bh=Ck35hHnCHFtH+d2GzNW7cjDeYHKAdUN4ZsaO0xxGAYs=; b=UHLNimI1LelydaQiGSTQ3hybOJ+yJ2Sxafvaf3/x7gPJKQpFoFM4zIib f3z87HL5sGbArumVRSOSE4YF/InKQjJdpx1p277IkIj7BUZzvzNStJkgv EW/rK1j0OHdNfZcCTBIdgL/n/8N7H17vr75v0Rp/24CbCMzgbeW7SsgMS guFB7Tt5NHWKcsaAVvsiCrWRtGj0nSiH5GGEbm3BYN6hdk3KsHhoo3RhC rL/PoXJAAZPYusL8ofbgDEtX7CDxboggrJKISKZdMf4l9PWxEIxZrkppJ 9HJa1ahqJTcsmvrcEkjAOG8oGj1x1eVs+BJdSuH0sNDZ+cHwO7iIBlUui g==; X-IronPort-AV: E=McAfee;i="6600,9927,10921"; a="374230372" X-IronPort-AV: E=Sophos;i="6.04,268,1695711600"; d="scan'208";a="374230372" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Dec 2023 15:17:13 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10921"; a="722996351" X-IronPort-AV: E=Sophos;i="6.04,268,1695711600"; d="scan'208";a="722996351" Received: from lkp-server02.sh.intel.com (HELO b07ab15da5fe) ([10.239.97.151]) by orsmga003.jf.intel.com with ESMTP; 11 Dec 2023 15:17:10 -0800 Received: from kbuild by b07ab15da5fe with local (Exim 4.96) (envelope-from ) id 1rCpWM-000IYd-2i; Mon, 11 Dec 2023 23:17:07 +0000 Date: Tue, 12 Dec 2023 07:16:50 +0800 From: kernel test robot To: Lizhi Xu , syzbot+006987d1be3586e13555@syzkaller.appspotmail.com Cc: oe-kbuild-all@lists.linux.dev, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, mani@kernel.org, netdev@vger.kernel.org, pabeni@redhat.com, syzkaller-bugs@googlegroups.com Subject: Re: [PATCH] radix-tree: fix memory leak in radix_tree_insert Message-ID: <202312120651.92GGXeX4-lkp@intel.com> References: <20231211094840.642118-1-lizhi.xu@windriver.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20231211094840.642118-1-lizhi.xu@windriver.com> X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Mon, 11 Dec 2023 15:17:38 -0800 (PST) Hi Lizhi, kernel test robot noticed the following build warnings: [auto build test WARNING on akpm-mm/mm-nonmm-unstable] [also build test WARNING on linus/master v6.7-rc5 next-20231211] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Lizhi-Xu/radix-tree-fix-memory-leak-in-radix_tree_insert/20231211-174951 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-nonmm-unstable patch link: https://lore.kernel.org/r/20231211094840.642118-1-lizhi.xu%40windriver.com patch subject: [PATCH] radix-tree: fix memory leak in radix_tree_insert config: i386-randconfig-061-20231212 (https://download.01.org/0day-ci/archive/20231212/202312120651.92GGXeX4-lkp@intel.com/config) compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231212/202312120651.92GGXeX4-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot | Closes: https://lore.kernel.org/oe-kbuild-all/202312120651.92GGXeX4-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) lib/radix-tree.c:266:36: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xa_node *nodes @@ got struct xa_node [noderef] __rcu *parent @@ lib/radix-tree.c:266:36: sparse: expected struct xa_node *nodes lib/radix-tree.c:266:36: sparse: got struct xa_node [noderef] __rcu *parent lib/radix-tree.c:284:29: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xa_node [noderef] __rcu *parent @@ got struct xa_node *parent @@ lib/radix-tree.c:284:29: sparse: expected struct xa_node [noderef] __rcu *parent lib/radix-tree.c:284:29: sparse: got struct xa_node *parent lib/radix-tree.c:344:38: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xa_node [noderef] __rcu *parent @@ got struct xa_node *nodes @@ lib/radix-tree.c:344:38: sparse: expected struct xa_node [noderef] __rcu *parent lib/radix-tree.c:344:38: sparse: got struct xa_node *nodes lib/radix-tree.c:446:54: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xa_node [noderef] __rcu *parent @@ got struct xa_node *node @@ lib/radix-tree.c:446:54: sparse: expected struct xa_node [noderef] __rcu *parent lib/radix-tree.c:446:54: sparse: got struct xa_node *node lib/radix-tree.c:558:24: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xa_node *parent @@ got struct xa_node [noderef] __rcu *parent @@ lib/radix-tree.c:558:24: sparse: expected struct xa_node *parent lib/radix-tree.c:558:24: sparse: got struct xa_node [noderef] __rcu *parent >> lib/radix-tree.c:653:28: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xa_node *pn @@ got struct xa_node [noderef] __rcu *parent @@ lib/radix-tree.c:653:28: sparse: expected struct xa_node *pn lib/radix-tree.c:653:28: sparse: got struct xa_node [noderef] __rcu *parent lib/radix-tree.c:687:31: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xa_node *[assigned] child @@ got struct xa_node [noderef] __rcu *parent @@ lib/radix-tree.c:687:31: sparse: expected struct xa_node *[assigned] child lib/radix-tree.c:687:31: sparse: got struct xa_node [noderef] __rcu *parent lib/radix-tree.c:962:22: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xa_node *node @@ got struct xa_node [noderef] __rcu *parent @@ lib/radix-tree.c:962:22: sparse: expected struct xa_node *node lib/radix-tree.c:962:22: sparse: got struct xa_node [noderef] __rcu *parent lib/radix-tree.c:1022:22: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xa_node *node @@ got struct xa_node [noderef] __rcu *parent @@ lib/radix-tree.c:1022:22: sparse: expected struct xa_node *node lib/radix-tree.c:1022:22: sparse: got struct xa_node [noderef] __rcu *parent lib/radix-tree.c:1542:38: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xa_node *[assigned] node @@ got struct xa_node [noderef] __rcu *parent @@ lib/radix-tree.c:1542:38: sparse: expected struct xa_node *[assigned] node lib/radix-tree.c:1542:38: sparse: got struct xa_node [noderef] __rcu *parent lib/radix-tree.c:1602:28: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xa_node *nodes @@ got struct xa_node [noderef] __rcu *parent @@ lib/radix-tree.c:1602:28: sparse: expected struct xa_node *nodes lib/radix-tree.c:1602:28: sparse: got struct xa_node [noderef] __rcu *parent vim +653 lib/radix-tree.c 581 582 /** 583 * __radix_tree_create - create a slot in a radix tree 584 * @root: radix tree root 585 * @index: index key 586 * @nodep: returns node 587 * @slotp: returns slot 588 * 589 * Create, if necessary, and return the node and slot for an item 590 * at position @index in the radix tree @root. 591 * 592 * Until there is more than one item in the tree, no nodes are 593 * allocated and @root->xa_head is used as a direct slot instead of 594 * pointing to a node, in which case *@nodep will be NULL. 595 * 596 * Returns -ENOMEM, or 0 for success. 597 */ 598 static int __radix_tree_create(struct radix_tree_root *root, 599 unsigned long index, struct radix_tree_node **nodep, 600 void __rcu ***slotp) 601 { 602 struct radix_tree_node *node = NULL, *child; 603 void __rcu **slot = (void __rcu **)&root->xa_head; 604 unsigned long maxindex; 605 unsigned int shift, offset = 0, mmshift = 0; 606 unsigned long max = index; 607 gfp_t gfp = root_gfp_mask(root); 608 int ret; 609 610 shift = radix_tree_load_root(root, &child, &maxindex); 611 612 /* Make sure the tree is high enough. */ 613 if (max > maxindex) { 614 int error = radix_tree_extend(root, gfp, max, shift); 615 if (error < 0) 616 return error; 617 shift = error; 618 mmshift = error; 619 child = rcu_dereference_raw(root->xa_head); 620 } 621 622 while (shift > 0) { 623 shift -= RADIX_TREE_MAP_SHIFT; 624 if (child == NULL) { 625 /* Have to add a child node. */ 626 child = radix_tree_node_alloc(gfp, node, root, shift, 627 offset, 0, 0); 628 if (!child) { 629 ret = -ENOMEM; 630 goto freec; 631 } 632 rcu_assign_pointer(*slot, node_to_entry(child)); 633 if (node) 634 node->count++; 635 } else if (!radix_tree_is_internal_node(child)) 636 break; 637 638 /* Go a level down */ 639 node = entry_to_node(child); 640 offset = radix_tree_descend(node, &child, index); 641 slot = &node->slots[offset]; 642 } 643 644 if (nodep) 645 *nodep = node; 646 if (slotp) 647 *slotp = slot; 648 return 0; 649 freec: 650 if (mmshift > 0) { 651 struct radix_tree_node *pn; 652 while (shift < mmshift && node) { > 653 pn = node->parent; 654 radix_tree_node_rcu_free(&node->rcu_head); 655 shift += RADIX_TREE_MAP_SHIFT; 656 node = pn; 657 } 658 } 659 return ret; 660 } 661 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki