From: Collin Walling <wall...@linux.ibm.com> Create a function to validate the address parameter of DIAGNOSE.
Refactor the function for reuse in the next patch, which allows address validation in read or write operation of DIAGNOSE. Signed-off-by: Zhuoying Cai <zy...@linux.ibm.com> --- hw/s390x/ipl.h | 6 ++++++ target/s390x/diag.c | 4 +--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h index 1bd73b4dc1..822535ad76 100644 --- a/hw/s390x/ipl.h +++ b/hw/s390x/ipl.h @@ -114,6 +114,12 @@ QEMU_BUILD_BUG_MSG(offsetof(S390IPLState, iplb) & 3, "alignment of iplb wrong"); #define S390_IPLB_MIN_FCP_LEN 384 #define S390_IPLB_MIN_QEMU_SCSI_LEN 200 +static inline bool diag_parm_addr_valid(uint64_t addr, size_t size, bool write) +{ + return address_space_access_valid(&address_space_memory, addr, + size, write, MEMTXATTRS_UNSPECIFIED); +} + static inline bool iplb_valid_len(IplParameterBlock *iplb) { return be32_to_cpu(iplb->len) <= sizeof(IplParameterBlock); diff --git a/target/s390x/diag.c b/target/s390x/diag.c index cb840e4b97..c64b935c87 100644 --- a/target/s390x/diag.c +++ b/target/s390x/diag.c @@ -64,9 +64,7 @@ static int diag308_parm_check(CPUS390XState *env, uint64_t r1, uint64_t addr, s390_program_interrupt(env, PGM_SPECIFICATION, ra); return -1; } - if (!address_space_access_valid(&address_space_memory, addr, - sizeof(IplParameterBlock), write, - MEMTXATTRS_UNSPECIFIED)) { + if (!diag_parm_addr_valid(addr, sizeof(IplParameterBlock), write)) { s390_program_interrupt(env, PGM_ADDRESSING, ra); return -1; } -- 2.49.0