* [PATCH v4 0/2] fix blktrace debugfs entries leakage @ 2023-06-09 8:39 Yu Kuai 2023-06-09 8:39 ` [PATCH v4 1/2] scsi: sg: " Yu Kuai 2023-06-09 8:39 ` [PATCH v4 2/2] block: " Yu Kuai 0 siblings, 2 replies; 4+ messages in thread From: Yu Kuai @ 2023-06-09 8:39 UTC (permalink / raw) To: hch, axboe, dgilbert, jejb, martin.petersen Cc: linux-block, linux-kernel, linux-scsi, yukuai3, yukuai1, yi.zhang, yangerkun From: Yu Kuai <yukuai3@huawei.com> Changes in v4: - blk_trace_remove() will trigger build warning if blktrace config is not enabled, use blk_trace_shutdown() instead. Changes in v3: - add a new patch to handle /dev/sg Changes in v2: - cleanup bltkrace in disk_release() instead of blk_free_queue() Yu Kuai (2): scsi: sg: fix blktrace debugfs entries leakage block: fix blktrace debugfs entries leakage block/genhd.c | 7 ++++++- drivers/scsi/sg.c | 11 +++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) -- 2.39.2 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v4 1/2] scsi: sg: fix blktrace debugfs entries leakage 2023-06-09 8:39 [PATCH v4 0/2] fix blktrace debugfs entries leakage Yu Kuai @ 2023-06-09 8:39 ` Yu Kuai 2023-06-09 21:52 ` kernel test robot 2023-06-09 8:39 ` [PATCH v4 2/2] block: " Yu Kuai 1 sibling, 1 reply; 4+ messages in thread From: Yu Kuai @ 2023-06-09 8:39 UTC (permalink / raw) To: hch, axboe, dgilbert, jejb, martin.petersen Cc: linux-block, linux-kernel, linux-scsi, yukuai3, yukuai1, yi.zhang, yangerkun From: Yu Kuai <yukuai3@huawei.com> sg_ioctl() support to enable blktrace, which will create debugfs entries "/sys/kernel/debug/block/sgx/", however, there is no guarantee that user will remove these entries through ioctl, and deleting sg device doesn't cleanup these blktrace entries. This problem can be fixed by cleanup blktrace while releasing request_queue, however, it's not a good idea to do this special handling in common layer just for sg device. Fix this problem by shutdown bltkrace in sg_device_destroy(), where the device is deleted and all the users close the device, also grab a scsi_device reference from sg_add_device() to prevent scsi_device to be freed before sg_device_destroy(); Signed-off-by: Yu Kuai <yukuai3@huawei.com> --- drivers/scsi/sg.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index 037f8c98a6d3..dd62c5b0d079 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -1496,6 +1496,10 @@ sg_add_device(struct device *cl_dev) int error; unsigned long iflags; + error = scsi_device_get(scsidp); + if (error) + return error; + error = -ENOMEM; cdev = cdev_alloc(); if (!cdev) { @@ -1553,6 +1557,7 @@ sg_add_device(struct device *cl_dev) out: if (cdev) cdev_del(cdev); + scsi_device_put(scsidp); return error; } @@ -1560,6 +1565,7 @@ static void sg_device_destroy(struct kref *kref) { struct sg_device *sdp = container_of(kref, struct sg_device, d_ref); + struct request_queue *q = sdp->device->request_queue; unsigned long flags; /* CAUTION! Note that the device can still be found via idr_find() @@ -1567,6 +1573,11 @@ sg_device_destroy(struct kref *kref) * any other cleanup. */ + mutex_lock(&q->debugfs_mutex); + blk_trace_shutdown(q); + mutex_unlock(&q->debugfs_mutex); + scsi_device_put(sdp->device); + write_lock_irqsave(&sg_index_lock, flags); idr_remove(&sg_index_idr, sdp->index); write_unlock_irqrestore(&sg_index_lock, flags); -- 2.39.2 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v4 1/2] scsi: sg: fix blktrace debugfs entries leakage 2023-06-09 8:39 ` [PATCH v4 1/2] scsi: sg: " Yu Kuai @ 2023-06-09 21:52 ` kernel test robot 0 siblings, 0 replies; 4+ messages in thread From: kernel test robot @ 2023-06-09 21:52 UTC (permalink / raw) To: Yu Kuai, hch, axboe, dgilbert, jejb, martin.petersen Cc: oe-kbuild-all, linux-block, linux-kernel, linux-scsi, yukuai3, yukuai1, yi.zhang, yangerkun Hi Yu, kernel test robot noticed the following build errors: [auto build test ERROR on axboe-block/for-next] [also build test ERROR on mkp-scsi/for-next linus/master v6.4-rc5 next-20230609] [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/Yu-Kuai/scsi-sg-fix-blktrace-debugfs-entries-leakage/20230609-164641 base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next patch link: https://lore.kernel.org/r/20230609083913.2254980-2-yukuai1%40huaweicloud.com patch subject: [PATCH v4 1/2] scsi: sg: fix blktrace debugfs entries leakage config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20230610/202306100517.8BoUnWma-lkp@intel.com/config) compiler: s390-linux-gcc (GCC) 12.3.0 reproduce (this is a W=1 build): mkdir -p ~/bin wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross git remote add axboe-block https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git git fetch axboe-block for-next git checkout axboe-block/for-next b4 shazam https://lore.kernel.org/r/20230609083913.2254980-2-yukuai1@huaweicloud.com # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.3.0 ~/bin/make.cross W=1 O=build_dir ARCH=s390 olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.3.0 ~/bin/make.cross W=1 O=build_dir ARCH=s390 SHELL=/bin/bash 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> | Closes: https://lore.kernel.org/oe-kbuild-all/202306100517.8BoUnWma-lkp@intel.com/ All errors (new ones prefixed by >>, old ones prefixed by <<): ERROR: modpost: "devm_ioremap_resource" [drivers/dma/qcom/hdma.ko] undefined! ERROR: modpost: "devm_platform_ioremap_resource" [drivers/dma/fsl-edma.ko] undefined! ERROR: modpost: "devm_platform_ioremap_resource" [drivers/dma/idma64.ko] undefined! ERROR: modpost: "iounmap" [drivers/tty/ipwireless/ipwireless.ko] undefined! ERROR: modpost: "ioremap" [drivers/tty/ipwireless/ipwireless.ko] undefined! ERROR: modpost: "devm_platform_ioremap_resource" [drivers/char/xillybus/xillybus_of.ko] undefined! ERROR: modpost: "devm_memremap" [drivers/misc/open-dice.ko] undefined! ERROR: modpost: "devm_memunmap" [drivers/misc/open-dice.ko] undefined! >> ERROR: modpost: "blk_trace_shutdown" [drivers/scsi/sg.ko] undefined! ERROR: modpost: "iounmap" [drivers/net/ethernet/8390/pcnet_cs.ko] undefined! WARNING: modpost: suppressed 14 unresolved symbol warnings because there were too many) -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v4 2/2] block: fix blktrace debugfs entries leakage 2023-06-09 8:39 [PATCH v4 0/2] fix blktrace debugfs entries leakage Yu Kuai 2023-06-09 8:39 ` [PATCH v4 1/2] scsi: sg: " Yu Kuai @ 2023-06-09 8:39 ` Yu Kuai 1 sibling, 0 replies; 4+ messages in thread From: Yu Kuai @ 2023-06-09 8:39 UTC (permalink / raw) To: hch, axboe, dgilbert, jejb, martin.petersen Cc: linux-block, linux-kernel, linux-scsi, yukuai3, yukuai1, yi.zhang, yangerkun From: Yu Kuai <yukuai3@huawei.com> Commit 99d055b4fd4b ("block: remove per-disk debugfs files in blk_unregister_queue") moves blk_trace_shutdown() from blk_release_queue() to blk_unregister_queue(), this is safe if blktrace is created through sysfs, however, there is a regression in corner case. blktrace can still be enabled after del_gendisk() through ioctl if the disk is opened before del_gendisk(), and if blktrace is not shutdown through ioctl before closing the disk, debugfs entries will be leaked. Fix this problem by shutdown blktrace in disk_release(), this is safe because blk_trace_remove() is reentrant. Fixes: 99d055b4fd4b ("block: remove per-disk debugfs files in blk_unregister_queue") Signed-off-by: Yu Kuai <yukuai3@huawei.com> --- block/genhd.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/block/genhd.c b/block/genhd.c index 3537b7d7c484..fd2a6819be3c 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -25,8 +25,9 @@ #include <linux/pm_runtime.h> #include <linux/badblocks.h> #include <linux/part_stat.h> -#include "blk-throttle.h" +#include <linux/blktrace_api.h> +#include "blk-throttle.h" #include "blk.h" #include "blk-mq-sched.h" #include "blk-rq-qos.h" @@ -1171,6 +1172,10 @@ static void disk_release(struct device *dev) might_sleep(); WARN_ON_ONCE(disk_live(disk)); + mutex_lock(&disk->queue->debugfs_mutex); + blk_trace_shutdown(disk->queue); + mutex_unlock(&disk->queue->debugfs_mutex); + /* * To undo the all initialization from blk_mq_init_allocated_queue in * case of a probe failure where add_disk is never called we have to -- 2.39.2 ^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-06-09 21:52 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-06-09 8:39 [PATCH v4 0/2] fix blktrace debugfs entries leakage Yu Kuai 2023-06-09 8:39 ` [PATCH v4 1/2] scsi: sg: " Yu Kuai 2023-06-09 21:52 ` kernel test robot 2023-06-09 8:39 ` [PATCH v4 2/2] block: " Yu Kuai
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).