Unverified Commit 57dd04c7 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!9806 CVE-2024-36478

Merge Pull Request from: @ci-robot 
 
PR sync from: Li Nan <linan122@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/5NHLQOSEERV5ZWGUXHRDYUMLJGDMND5P/ 
Damien Le Moal (1):
  null_blk: Move driver into its own directory

Yu Kuai (1):
  null_blk: fix null-ptr-dereference while configuring 'power' and
    'submit_queues'

 rename drivers/block/{ => null_blk}/null_blk.h (100%)
 rename drivers/block/{null_blk_trace.h => null_blk/trace.h} (97%)
 rename drivers/block/{null_blk_main.c => null_blk/main.c} (99%)
 rename drivers/block/{null_blk_trace.c => null_blk/trace.c} (93%)
 rename drivers/block/{null_blk_zoned.c => null_blk/zoned.c} (99%)

-- 
2.39.2
 
https://gitee.com/src-openeuler/kernel/issues/IA7D6H 
 
Link:https://gitee.com/openeuler/kernel/pulls/9806

 

Reviewed-by: default avatarYu Kuai <yukuai3@huawei.com>
Reviewed-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
Signed-off-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
parents 7c33f142 2523693a
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -16,13 +16,7 @@ menuconfig BLK_DEV

if BLK_DEV

config BLK_DEV_NULL_BLK
	tristate "Null test block driver"
	select CONFIGFS_FS

config BLK_DEV_NULL_BLK_FAULT_INJECTION
	bool "Support fault injection for Null test block driver"
	depends on BLK_DEV_NULL_BLK && FAULT_INJECTION
source "drivers/block/null_blk/Kconfig"

config BLK_DEV_FD
	tristate "Normal floppy disk support"
+1 −6
Original line number Diff line number Diff line
@@ -41,12 +41,7 @@ obj-$(CONFIG_BLK_DEV_RSXX) += rsxx/
obj-$(CONFIG_ZRAM) += zram/
obj-$(CONFIG_BLK_DEV_RNBD)	+= rnbd/

obj-$(CONFIG_BLK_DEV_NULL_BLK)	+= null_blk.o
null_blk-objs	:= null_blk_main.o
ifeq ($(CONFIG_BLK_DEV_ZONED), y)
null_blk-$(CONFIG_TRACING) += null_blk_trace.o
endif
null_blk-$(CONFIG_BLK_DEV_ZONED) += null_blk_zoned.o
obj-$(CONFIG_BLK_DEV_NULL_BLK)	+= null_blk/

skd-y		:= skd_main.o
swim_mod-y	:= swim.o swim_asm.o
+12 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
#
# Null block device driver configuration
#

config BLK_DEV_NULL_BLK
	tristate "Null test block driver"
	select CONFIGFS_FS

config BLK_DEV_NULL_BLK_FAULT_INJECTION
	bool "Support fault injection for Null test block driver"
	depends on BLK_DEV_NULL_BLK && FAULT_INJECTION
+11 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0

# needed for trace events
ccflags-y			+= -I$(src)

obj-$(CONFIG_BLK_DEV_NULL_BLK)	+= null_blk.o
null_blk-objs			:= main.o
ifeq ($(CONFIG_BLK_DEV_ZONED), y)
null_blk-$(CONFIG_TRACING) 	+= trace.o
endif
null_blk-$(CONFIG_BLK_DEV_ZONED) += zoned.o
+26 −17
Original line number Diff line number Diff line
@@ -323,11 +323,9 @@ CONFIGFS_ATTR(nullb_device_, NAME);
static int nullb_apply_submit_queues(struct nullb_device *dev,
				     unsigned int submit_queues)
{
	struct nullb *nullb = dev->nullb;
	struct nullb *nullb;
	struct blk_mq_tag_set *set;

	if (!nullb)
		return 0;
	int ret = 0;

	/*
	 * Make sure that null_init_hctx() does not access nullb->queues[] past
@@ -335,9 +333,20 @@ static int nullb_apply_submit_queues(struct nullb_device *dev,
	 */
	if (submit_queues > nr_cpu_ids)
		return -EINVAL;

	mutex_lock(&lock);

	nullb = dev->nullb;
	if (!nullb)
		goto out;

	set = nullb->tag_set;
	blk_mq_update_nr_hw_queues(set, submit_queues);
	return set->nr_hw_queues == submit_queues ? 0 : -ENOMEM;
	ret = set->nr_hw_queues == submit_queues ? 0 : -ENOMEM;

out:
	mutex_unlock(&lock);
	return ret;
}

NULLB_DEVICE_ATTR(size, ulong, NULL);
@@ -378,27 +387,31 @@ static ssize_t nullb_device_power_store(struct config_item *item,
	if (ret < 0)
		return ret;

	ret = count;
	mutex_lock(&lock);
	if (!dev->power && newp) {
		if (test_and_set_bit(NULLB_DEV_FL_UP, &dev->flags))
			return count;
			goto out;

		if (null_add_dev(dev)) {
			clear_bit(NULLB_DEV_FL_UP, &dev->flags);
			return -ENOMEM;
			ret = -ENOMEM;
			goto out;
		}

		set_bit(NULLB_DEV_FL_CONFIGURED, &dev->flags);
		dev->power = newp;
	} else if (dev->power && !newp) {
		if (test_and_clear_bit(NULLB_DEV_FL_UP, &dev->flags)) {
			mutex_lock(&lock);
			dev->power = newp;
			null_del_dev(dev->nullb);
			mutex_unlock(&lock);
		}
		clear_bit(NULLB_DEV_FL_CONFIGURED, &dev->flags);
	}

	return count;
out:
	mutex_unlock(&lock);
	return ret;
}

CONFIGFS_ATTR(nullb_device_, power);
@@ -1875,15 +1888,11 @@ static int null_add_dev(struct nullb_device *dev)
	blk_queue_flag_set(QUEUE_FLAG_NONROT, nullb->q);
	blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, nullb->q);

	mutex_lock(&lock);
	rv = ida_simple_get(&nullb_indexes, 0, 0, GFP_KERNEL);
	if (rv < 0) {
		mutex_unlock(&lock);
	if (rv < 0)
		goto out_cleanup_zone;
	}
	nullb->index = rv;
	dev->index = rv;
	mutex_unlock(&lock);

	blk_queue_logical_block_size(nullb->q, dev->blocksize);
	blk_queue_physical_block_size(nullb->q, dev->blocksize);
@@ -1896,9 +1905,7 @@ static int null_add_dev(struct nullb_device *dev)
	if (rv)
		goto out_ida_free;

	mutex_lock(&lock);
	list_add_tail(&nullb->list, &nullb_list);
	mutex_unlock(&lock);

	return 0;

@@ -1980,7 +1987,9 @@ static int __init null_init(void)
			ret = -ENOMEM;
			goto err_dev;
		}
		mutex_lock(&lock);
		ret = null_add_dev(dev);
		mutex_unlock(&lock);
		if (ret) {
			null_free_dev(dev);
			goto err_dev;
Loading