mirror of
				https://gitlab.com/qemu-project/qemu.git
				synced 2025-10-30 07:57:14 +08:00 
			
		
		
		
	tcg: Fix error reporting on mprotect() failure in tcg_region_init()
tcg_region_init() calls one of qemu_mprotect_rwx(), qemu_mprotect_rw(), and mprotect(), then reports failure with error_setg_errno(&error_fatal, errno, ...). The use of &error_fatal is undesirable. qapi/error.h advises: * Please don't error_setg(&error_fatal, ...), use error_report() and * exit(), because that's more obvious. The use of errno is wrong. qemu_mprotect_rwx() and qemu_mprotect_rw() wrap around qemu_mprotect__osdep(). qemu_mprotect__osdep() calls mprotect() on POSIX, VirtualProtect() on Windows, and reports failure with error_report(). VirtualProtect() doesn't set errno. mprotect() does, but error_report() may clobber it. Fix tcg_region_init() to report errors only when it calls mprotect(), and rely on qemu_mprotect_rwx()'s and qemu_mprotect_rw()'s error reporting otherwise. Use error_report(), not error_setg(). Fixes:22c6a9938f(tcg: Merge buffer protection and guard page protection) Fixes:6bc144237a(tcg: Use Error with alloc_code_gen_buffer) Cc: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-ID: <20250923091000.3180122-3-armbru@redhat.com> Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
This commit is contained in:
		| @ -832,13 +832,16 @@ void tcg_region_init(size_t tb_size, int splitwx, unsigned max_threads) | ||||
|             } else { | ||||
| #ifdef CONFIG_POSIX | ||||
|                 rc = mprotect(start, end - start, need_prot); | ||||
|                 if (rc) { | ||||
|                     error_report("mprotect of jit buffer: %s", | ||||
|                                  strerror(errno)); | ||||
|                 } | ||||
| #else | ||||
|                 g_assert_not_reached(); | ||||
| #endif | ||||
|             } | ||||
|             if (rc) { | ||||
|                 error_setg_errno(&error_fatal, errno, | ||||
|                                  "mprotect of jit buffer"); | ||||
|                 exit(1); | ||||
|             } | ||||
|         } | ||||
|         if (have_prot != 0) { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Markus Armbruster
					Markus Armbruster