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

!8468 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/GJTFSZTPY7YPDAMRYDCI3NUEAQARZLUN/ 
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/8468

 

Reviewed-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
Reviewed-by: default avatarYu Kuai <yukuai3@huawei.com>
Signed-off-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
parents 37d5a96f 27a09a58
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -3684,16 +3684,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
@@ -4890,7 +4890,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);

@@ -4906,8 +4906,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;
@@ -4920,6 +4921,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
@@ -773,6 +773,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);