Commit fe7c9958 authored by Mikulas Patocka's avatar Mikulas Patocka Committed by Wen Zhiwei
Browse files

Revert: "dm-verity: restart or panic on an I/O error"

stable inclusion
from stable-v6.6.54
commit cada2646b7483cce370eb3b046659df31d9d34d1
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IAZ3K2

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=cada2646b7483cce370eb3b046659df31d9d34d1



--------------------------------

commit 462763212dd71c41f092b48eaa352bc1f5ed5d66 upstream.

This reverts commit e6a3531dd542cb127c8de32ab1e54a48ae19962b.

The problem that the commit e6a3531dd542cb127c8de32ab1e54a48ae19962b
fixes was reported as a security bug, but Google engineers working on
Android and ChromeOS didn't want to change the default behavior, they
want to get -EIO rather than restarting the system, so I am reverting
that commit.

Note also that calling machine_restart from the I/O handling code is
potentially unsafe (the reboot notifiers may wait for the bio that
triggered the restart), but Android uses the reboot notifiers to store
the reboot reason into the PMU microcontroller, so machine_restart must
be used.

Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
Cc: stable@vger.kernel.org
Fixes: e6a3531dd542 ("dm-verity: restart or panic on an I/O error")
Suggested-by: default avatarSami Tolvanen <samitolvanen@google.com>
Suggested-by: default avatarWill Drewry <wad@chromium.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarWen Zhiwei <wenzhiwei@kylinos.cn>
parent f63501b3
Loading
Loading
Loading
Loading
+2 −21
Original line number Diff line number Diff line
@@ -264,10 +264,8 @@ static int verity_handle_err(struct dm_verity *v, enum verity_block_type type,
	if (v->mode == DM_VERITY_MODE_LOGGING)
		return 0;

	if (v->mode == DM_VERITY_MODE_RESTART) {
		pr_emerg("dm-verity device corrupted\n");
		emergency_restart();
	}
	if (v->mode == DM_VERITY_MODE_RESTART)
		kernel_restart("dm-verity device corrupted");

	if (v->mode == DM_VERITY_MODE_PANIC)
		panic("dm-verity device corrupted");
@@ -691,23 +689,6 @@ static void verity_finish_io(struct dm_verity_io *io, blk_status_t status)
	if (!static_branch_unlikely(&use_tasklet_enabled) || !io->in_tasklet)
		verity_fec_finish_io(io);

	if (unlikely(status != BLK_STS_OK) &&
	    unlikely(!(bio->bi_opf & REQ_RAHEAD)) &&
	    !verity_is_system_shutting_down()) {
		if (v->mode == DM_VERITY_MODE_RESTART ||
		    v->mode == DM_VERITY_MODE_PANIC)
			DMERR_LIMIT("%s has error: %s", v->data_dev->name,
					blk_status_to_str(status));

		if (v->mode == DM_VERITY_MODE_RESTART) {
			pr_emerg("dm-verity device corrupted\n");
			emergency_restart();
		}

		if (v->mode == DM_VERITY_MODE_PANIC)
			panic("dm-verity device corrupted");
	}

	bio_endio(bio);
}