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

!8470 v2 CVE-2024-35808

Merge Pull Request from: @ci-robot 
 
PR sync from: Li Nan <linan122@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/BJTZTBMJMXPLY3B6TC56YEG7FIOW6YNN/ 
Li Nan (2):
  md/dm-raid: don't call md_reap_sync_thread() directly
  md/dm-raid: don't clear MD_RECOVERY_FROZEN after setting frozen


-- 
2.39.2
 
https://gitee.com/src-openeuler/kernel/issues/I9Q98W 
 
Link:https://gitee.com/openeuler/kernel/pulls/8470

 

Reviewed-by: default avatarYu Kuai <yukuai3@huawei.com>
Reviewed-by: default avatarLiu YongQiang <liuyongqiang13@huawei.com>
Signed-off-by: default avatarZhang Changzhong <zhangchangzhong@huawei.com>
parents 0d809b2e b62936e3
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -3703,16 +3703,13 @@ static int raid_message(struct dm_target *ti, unsigned int argc, char **argv,
		return -EINVAL;

	if (!strcasecmp(argv[0], "frozen"))
		set_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
		frozen_sync_thread(mddev);
	else if (!strcasecmp(argv[0], "idle"))
		idle_sync_thread(mddev);
	else
		clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);

	if (!strcasecmp(argv[0], "idle") || !strcasecmp(argv[0], "frozen")) {
		if (mddev->sync_thread) {
			set_bit(MD_RECOVERY_INTR, &mddev->recovery);
			md_reap_sync_thread(mddev);
		}
	} else if (decipher_sync_action(mddev, mddev->recovery) != st_idle)
	if (decipher_sync_action(mddev, mddev->recovery) != st_idle)
		return -EBUSY;
	else if (!strcasecmp(argv[0], "resync"))
		; /* MD_RECOVERY_NEEDED set below */
+4 −2
Original line number Diff line number Diff line
@@ -4725,7 +4725,7 @@ static void stop_sync_thread(struct mddev *mddev)
	mddev_unlock(mddev);
}

static void idle_sync_thread(struct mddev *mddev)
void idle_sync_thread(struct mddev *mddev)
{
	int sync_seq = atomic_read(&mddev->sync_seq);

@@ -4741,8 +4741,9 @@ static void idle_sync_thread(struct mddev *mddev)

	mutex_unlock(&mddev->sync_mutex);
}
EXPORT_SYMBOL_GPL(idle_sync_thread);

static void frozen_sync_thread(struct mddev *mddev)
void frozen_sync_thread(struct mddev *mddev)
{
	if (mutex_lock_interruptible(&mddev->sync_mutex))
		return;
@@ -4755,6 +4756,7 @@ static void frozen_sync_thread(struct mddev *mddev)

	mutex_unlock(&mddev->sync_mutex);
}
EXPORT_SYMBOL_GPL(frozen_sync_thread);

static ssize_t
action_store(struct mddev *mddev, const char *page, size_t len)
+2 −0
Original line number Diff line number Diff line
@@ -752,6 +752,8 @@ extern void md_rdev_clear(struct md_rdev *rdev);
extern void md_handle_request(struct mddev *mddev, struct bio *bio);
extern void mddev_suspend(struct mddev *mddev);
extern void mddev_resume(struct mddev *mddev);
extern void idle_sync_thread(struct mddev *mddev);
extern void frozen_sync_thread(struct mddev *mddev);
extern struct bio *bio_alloc_mddev(gfp_t gfp_mask, int nr_iovecs,
				   struct mddev *mddev);