All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>
Subject: [openeuler:OLK-6.6 1344/16464] block/bdev.c:829 bdev_open_by_dev() warn: possible memory leak of 'handle'
Date: Thu, 7 Nov 2024 08:18:53 +0800	[thread overview]
Message-ID: <202411070817.MsBLoDva-lkp@intel.com> (raw)

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: kernel@openeuler.org
TO: Li Lingfeng <lilingfeng3@huawei.com>

tree:   https://gitee.com/openeuler/kernel.git OLK-6.6
head:   8edd62f80cd8e00a4ecb15f57010d8fdbff12e16
commit: 498bc4954a0850611dc7b0193bc5c5a31479aecf [1344/16464] block: Add config option to not allow writing to mounted devices
:::::: branch date: 11 hours ago
:::::: commit date: 11 months ago
config: x86_64-randconfig-161-20241106 (https://download.01.org/0day-ci/archive/20241107/202411070817.MsBLoDva-lkp@intel.com/config)
compiler: clang version 19.1.3 (https://github.com/llvm/llvm-project ab51eccf88f5321e7c60591c5546b254b6afab99)

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 <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202411070817.MsBLoDva-lkp@intel.com/

smatch warnings:
block/bdev.c:829 bdev_open_by_dev() warn: possible memory leak of 'handle'

vim +/handle +829 block/bdev.c

498bc4954a0850 block/bdev.c   Jan Kara          2023-12-08  784  
d4d77629953eab fs/block_dev.c Tejun Heo         2010-11-13  785  /**
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  786   * bdev_open_by_dev - open a block device by device number
4e7b5671c6a883 fs/block_dev.c Christoph Hellwig 2020-11-23  787   * @dev: device number of block device to open
05bdb9965305bb block/bdev.c   Christoph Hellwig 2023-06-08  788   * @mode: open mode (BLK_OPEN_*)
d4d77629953eab fs/block_dev.c Tejun Heo         2010-11-13  789   * @holder: exclusive holder identifier
0718afd47f70cf block/bdev.c   Christoph Hellwig 2023-06-01  790   * @hops: holder operations
d4d77629953eab fs/block_dev.c Tejun Heo         2010-11-13  791   *
2736e8eeb0ccdc block/bdev.c   Christoph Hellwig 2023-06-08  792   * Open the block device described by device number @dev. If @holder is not
2736e8eeb0ccdc block/bdev.c   Christoph Hellwig 2023-06-08  793   * %NULL, the block device is opened with exclusive access.  Exclusive opens may
2736e8eeb0ccdc block/bdev.c   Christoph Hellwig 2023-06-08  794   * nest for the same @holder.
d4d77629953eab fs/block_dev.c Tejun Heo         2010-11-13  795   *
4e7b5671c6a883 fs/block_dev.c Christoph Hellwig 2020-11-23  796   * Use this interface ONLY if you really do not have anything better - i.e. when
4e7b5671c6a883 fs/block_dev.c Christoph Hellwig 2020-11-23  797   * you are behind a truly sucky interface and all you are given is a device
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  798   * number.  Everything else should use bdev_open_by_path().
d4d77629953eab fs/block_dev.c Tejun Heo         2010-11-13  799   *
d4d77629953eab fs/block_dev.c Tejun Heo         2010-11-13  800   * CONTEXT:
d4d77629953eab fs/block_dev.c Tejun Heo         2010-11-13  801   * Might sleep.
d4d77629953eab fs/block_dev.c Tejun Heo         2010-11-13  802   *
d4d77629953eab fs/block_dev.c Tejun Heo         2010-11-13  803   * RETURNS:
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  804   * Handle with a reference to the block_device on success, ERR_PTR(-errno) on
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  805   * failure.
d4d77629953eab fs/block_dev.c Tejun Heo         2010-11-13  806   */
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  807  struct bdev_handle *bdev_open_by_dev(dev_t dev, blk_mode_t mode, void *holder,
0718afd47f70cf block/bdev.c   Christoph Hellwig 2023-06-01  808  				     const struct blk_holder_ops *hops)
^1da177e4c3f41 fs/block_dev.c Linus Torvalds    2005-04-16  809  {
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  810  	struct bdev_handle *handle = kmalloc(sizeof(struct bdev_handle),
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  811  					     GFP_KERNEL);
4e7b5671c6a883 fs/block_dev.c Christoph Hellwig 2020-11-23  812  	struct block_device *bdev;
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  813  	bool unblock_events = true;
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  814  	struct gendisk *disk;
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  815  	int ret;
e5c7fb400227df fs/block_dev.c Christoph Hellwig 2020-08-31  816  
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  817  	if (!handle)
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  818  		return ERR_PTR(-ENOMEM);
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  819  
7918f0f6fdafa1 fs/block_dev.c Christoph Hellwig 2020-11-23  820  	ret = devcgroup_check_permission(DEVCG_DEV_BLOCK,
4e7b5671c6a883 fs/block_dev.c Christoph Hellwig 2020-11-23  821  			MAJOR(dev), MINOR(dev),
05bdb9965305bb block/bdev.c   Christoph Hellwig 2023-06-08  822  			((mode & BLK_OPEN_READ) ? DEVCG_ACC_READ : 0) |
05bdb9965305bb block/bdev.c   Christoph Hellwig 2023-06-08  823  			((mode & BLK_OPEN_WRITE) ? DEVCG_ACC_WRITE : 0));
e5c7fb400227df fs/block_dev.c Christoph Hellwig 2020-08-31  824  	if (ret)
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  825  		goto free_handle;
4e7b5671c6a883 fs/block_dev.c Christoph Hellwig 2020-11-23  826  
498bc4954a0850 block/bdev.c   Jan Kara          2023-12-08  827  	/* Blocking writes requires exclusive opener */
498bc4954a0850 block/bdev.c   Jan Kara          2023-12-08  828  	if (mode & BLK_OPEN_RESTRICT_WRITES && !holder)
498bc4954a0850 block/bdev.c   Jan Kara          2023-12-08 @829  		return ERR_PTR(-EINVAL);
498bc4954a0850 block/bdev.c   Jan Kara          2023-12-08  830  
22ae8ce8b89241 fs/block_dev.c Christoph Hellwig 2020-11-26  831  	bdev = blkdev_get_no_open(dev);
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  832  	if (!bdev) {
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  833  		ret = -ENXIO;
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  834  		goto free_handle;
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  835  	}
22ae8ce8b89241 fs/block_dev.c Christoph Hellwig 2020-11-26  836  	disk = bdev->bd_disk;
e5c7fb400227df fs/block_dev.c Christoph Hellwig 2020-08-31  837  
2736e8eeb0ccdc block/bdev.c   Christoph Hellwig 2023-06-08  838  	if (holder) {
05bdb9965305bb block/bdev.c   Christoph Hellwig 2023-06-08  839  		mode |= BLK_OPEN_EXCL;
0718afd47f70cf block/bdev.c   Christoph Hellwig 2023-06-01  840  		ret = bd_prepare_to_claim(bdev, holder, hops);
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  841  		if (ret)
37c3fc9abb25cd fs/block_dev.c Christoph Hellwig 2020-11-25  842  			goto put_blkdev;
2736e8eeb0ccdc block/bdev.c   Christoph Hellwig 2023-06-08  843  	} else {
05bdb9965305bb block/bdev.c   Christoph Hellwig 2023-06-08  844  		if (WARN_ON_ONCE(mode & BLK_OPEN_EXCL)) {
2736e8eeb0ccdc block/bdev.c   Christoph Hellwig 2023-06-08  845  			ret = -EIO;
2736e8eeb0ccdc block/bdev.c   Christoph Hellwig 2023-06-08  846  			goto put_blkdev;
2736e8eeb0ccdc block/bdev.c   Christoph Hellwig 2023-06-08  847  		}
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  848  	}
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  849  
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  850  	disk_block_events(disk);
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  851  
a8698707a1835b fs/block_dev.c Christoph Hellwig 2021-05-25  852  	mutex_lock(&disk->open_mutex);
362529d9280af4 fs/block_dev.c Christoph Hellwig 2021-05-25  853  	ret = -ENXIO;
50b4aecfbbb098 fs/block_dev.c Christoph Hellwig 2021-08-09  854  	if (!disk_live(disk))
362529d9280af4 fs/block_dev.c Christoph Hellwig 2021-05-25  855  		goto abort_claiming;
efcf5932230b94 block/bdev.c   Ming Lei          2021-11-11  856  	if (!try_module_get(disk->fops->owner))
efcf5932230b94 block/bdev.c   Ming Lei          2021-11-11  857  		goto abort_claiming;
498bc4954a0850 block/bdev.c   Jan Kara          2023-12-08  858  	ret = -EBUSY;
498bc4954a0850 block/bdev.c   Jan Kara          2023-12-08  859  	if (!bdev_may_open(bdev, mode))
498bc4954a0850 block/bdev.c   Jan Kara          2023-12-08  860  		goto abort_claiming;
362529d9280af4 fs/block_dev.c Christoph Hellwig 2021-05-25  861  	if (bdev_is_partition(bdev))
362529d9280af4 fs/block_dev.c Christoph Hellwig 2021-05-25  862  		ret = blkdev_get_part(bdev, mode);
362529d9280af4 fs/block_dev.c Christoph Hellwig 2021-05-25  863  	else
362529d9280af4 fs/block_dev.c Christoph Hellwig 2021-05-25  864  		ret = blkdev_get_whole(bdev, mode);
22ae8ce8b89241 fs/block_dev.c Christoph Hellwig 2020-11-26  865  	if (ret)
efcf5932230b94 block/bdev.c   Ming Lei          2021-11-11  866  		goto put_module;
498bc4954a0850 block/bdev.c   Jan Kara          2023-12-08  867  	bdev_claim_write_access(bdev, mode);
2736e8eeb0ccdc block/bdev.c   Christoph Hellwig 2023-06-08  868  	if (holder) {
0718afd47f70cf block/bdev.c   Christoph Hellwig 2023-06-01  869  		bd_finish_claiming(bdev, holder, hops);
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  870  
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  871  		/*
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  872  		 * Block event polling for write claims if requested.  Any write
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  873  		 * holder makes the write_holder state stick until all are
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  874  		 * released.  This is good enough and tracking individual
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  875  		 * writeable reference is too fragile given the way @mode is
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  876  		 * used in blkdev_get/put().
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  877  		 */
05bdb9965305bb block/bdev.c   Christoph Hellwig 2023-06-08  878  		if ((mode & BLK_OPEN_WRITE) && !bdev->bd_write_holder &&
1545e0b419ba1d block/bdev.c   Christoph Hellwig 2021-11-22  879  		    (disk->event_flags & DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE)) {
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  880  			bdev->bd_write_holder = true;
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  881  			unblock_events = false;
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  882  		}
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  883  	}
a8698707a1835b fs/block_dev.c Christoph Hellwig 2021-05-25  884  	mutex_unlock(&disk->open_mutex);
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  885  
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  886  	if (unblock_events)
5b56b6ed574b58 fs/block_dev.c Christoph Hellwig 2020-11-23  887  		disk_unblock_events(disk);
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  888  	handle->bdev = bdev;
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  889  	handle->holder = holder;
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  890  	handle->mode = mode;
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  891  	return handle;
efcf5932230b94 block/bdev.c   Ming Lei          2021-11-11  892  put_module:
efcf5932230b94 block/bdev.c   Ming Lei          2021-11-11  893  	module_put(disk->fops->owner);
22ae8ce8b89241 fs/block_dev.c Christoph Hellwig 2020-11-26  894  abort_claiming:
2736e8eeb0ccdc block/bdev.c   Christoph Hellwig 2023-06-08  895  	if (holder)
37c3fc9abb25cd fs/block_dev.c Christoph Hellwig 2020-11-25  896  		bd_abort_claiming(bdev, holder);
a8698707a1835b fs/block_dev.c Christoph Hellwig 2021-05-25  897  	mutex_unlock(&disk->open_mutex);
22ae8ce8b89241 fs/block_dev.c Christoph Hellwig 2020-11-26  898  	disk_unblock_events(disk);
22ae8ce8b89241 fs/block_dev.c Christoph Hellwig 2020-11-26  899  put_blkdev:
22ae8ce8b89241 fs/block_dev.c Christoph Hellwig 2020-11-26  900  	blkdev_put_no_open(bdev);
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  901  free_handle:
bd11bbc24b9009 block/bdev.c   Jan Kara          2023-11-30  902  	kfree(handle);
603106af5aea5b block/bdev.c   Jan Kara          2023-11-30  903  	return ERR_PTR(ret);
bd11bbc24b9009 block/bdev.c   Jan Kara          2023-11-30  904  }
bd11bbc24b9009 block/bdev.c   Jan Kara          2023-11-30  905  EXPORT_SYMBOL(bdev_open_by_dev);
bd11bbc24b9009 block/bdev.c   Jan Kara          2023-11-30  906  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

             reply	other threads:[~2024-11-07  0:19 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-07  0:18 kernel test robot [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-11-07  9:02 [openeuler:OLK-6.6 1344/16464] block/bdev.c:829 bdev_open_by_dev() warn: possible memory leak of 'handle' Dan Carpenter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202411070817.MsBLoDva-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=error27@gmail.com \
    --cc=oe-kbuild@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.