mirror of https://github.com/xemu-project/xemu.git
hw/ufs: fix coverity issue
-----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEUBfYMVl8eKPZB+73EuIgTA5dtgIFAmaA1MQACgkQEuIgTA5d tgIYSBAAul4qW0P6q0h3Dj/MLcGMPo4Y4kcWKe2AAkE/mBRvKbE7bLsA0y47WU5S MJJApw4lwCsM12ZcD0W3YNbNwGUclQAVhLU5TOMowwaEWjNwmcsBR+AVwya4M2jQ zSw6udIo5dfdy6KSe2EbRAuoDqBFJrcIH6EbXn/pBIhotlFzyUYYcpPBAq3rwh+V haEtt3DapAektx+QkswBNEWu002OHyNDQXqfHnFvNMAYN9T25Nr+REai3VhZj379 F/p5bFxou9FnwuGXRrpS1Em1jT+gRJnYoxp6iML8Zb4eZLhFs7T3WWkXHhbq7Nbt oeg1CFdQeIt1iowk/dhtnSEQqnLe9dfPHj7pxU98dkYXHcN52Q5CRb+c0JnEyBLc lGIjLVWvqYitOwGmvIdSmStd5TCLtuYmQGaI3slZCvsJTSo4Tkx3eI504NTVQ4K2 lNY0jb+0PIsEUlyssimlsDA0SCkbpe5yE1G2NDCP74MjG0mlUm/h/OU0etk7uhwv DNr1Lljr04FhcgVbMGX5sbMeK2QiCDuOlCF1T4zkzDFdWKIl414vH1wvjv1cBKlj RdAfAi8zIV5lOeSqX13E9B0tjwUALlWFApW8J7pefijSBOGxEfFQJ39Gd4eIEFgD Bj9Nc1ddDs30YaCZSMYsqcHU09srlobWmPqadba6hyJW4L1B9bU= =d0WA -----END PGP SIGNATURE----- Merge tag 'pull-ufs-20240630' of https://gitlab.com/jeuk20.kim/qemu into staging hw/ufs: fix coverity issue # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCgAdFiEEUBfYMVl8eKPZB+73EuIgTA5dtgIFAmaA1MQACgkQEuIgTA5d # tgIYSBAAul4qW0P6q0h3Dj/MLcGMPo4Y4kcWKe2AAkE/mBRvKbE7bLsA0y47WU5S # MJJApw4lwCsM12ZcD0W3YNbNwGUclQAVhLU5TOMowwaEWjNwmcsBR+AVwya4M2jQ # zSw6udIo5dfdy6KSe2EbRAuoDqBFJrcIH6EbXn/pBIhotlFzyUYYcpPBAq3rwh+V # haEtt3DapAektx+QkswBNEWu002OHyNDQXqfHnFvNMAYN9T25Nr+REai3VhZj379 # F/p5bFxou9FnwuGXRrpS1Em1jT+gRJnYoxp6iML8Zb4eZLhFs7T3WWkXHhbq7Nbt # oeg1CFdQeIt1iowk/dhtnSEQqnLe9dfPHj7pxU98dkYXHcN52Q5CRb+c0JnEyBLc # lGIjLVWvqYitOwGmvIdSmStd5TCLtuYmQGaI3slZCvsJTSo4Tkx3eI504NTVQ4K2 # lNY0jb+0PIsEUlyssimlsDA0SCkbpe5yE1G2NDCP74MjG0mlUm/h/OU0etk7uhwv # DNr1Lljr04FhcgVbMGX5sbMeK2QiCDuOlCF1T4zkzDFdWKIl414vH1wvjv1cBKlj # RdAfAi8zIV5lOeSqX13E9B0tjwUALlWFApW8J7pefijSBOGxEfFQJ39Gd4eIEFgD # Bj9Nc1ddDs30YaCZSMYsqcHU09srlobWmPqadba6hyJW4L1B9bU= # =d0WA # -----END PGP SIGNATURE----- # gpg: Signature made Sat 29 Jun 2024 08:45:08 PM PDT # gpg: using RSA key 5017D831597C78A3D907EEF712E2204C0E5DB602 # gpg: Good signature from "Jeuk Kim <jeuk20.kim@samsung.com>" [unknown] # gpg: aka "Jeuk Kim <jeuk20.kim@gmail.com>" [unknown] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 5017 D831 597C 78A3 D907 EEF7 12E2 204C 0E5D B602 * tag 'pull-ufs-20240630' of https://gitlab.com/jeuk20.kim/qemu: hw/ufs: Fix potential bugs in MMIO read|write Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
5dbb1f09b9
31
hw/ufs/ufs.c
31
hw/ufs/ufs.c
|
@ -55,17 +55,18 @@ static inline uint64_t ufs_reg_size(UfsHc *u)
|
|||
return ufs_mcq_op_reg_addr(u, 0) + sizeof(u->mcq_op_reg);
|
||||
}
|
||||
|
||||
static inline bool ufs_is_mcq_reg(UfsHc *u, uint64_t addr)
|
||||
static inline bool ufs_is_mcq_reg(UfsHc *u, uint64_t addr, unsigned size)
|
||||
{
|
||||
uint64_t mcq_reg_addr = ufs_mcq_reg_addr(u, 0);
|
||||
return addr >= mcq_reg_addr && addr < mcq_reg_addr + sizeof(u->mcq_reg);
|
||||
return (addr >= mcq_reg_addr &&
|
||||
addr + size <= mcq_reg_addr + sizeof(u->mcq_reg));
|
||||
}
|
||||
|
||||
static inline bool ufs_is_mcq_op_reg(UfsHc *u, uint64_t addr)
|
||||
static inline bool ufs_is_mcq_op_reg(UfsHc *u, uint64_t addr, unsigned size)
|
||||
{
|
||||
uint64_t mcq_op_reg_addr = ufs_mcq_op_reg_addr(u, 0);
|
||||
return (addr >= mcq_op_reg_addr &&
|
||||
addr < mcq_op_reg_addr + sizeof(u->mcq_op_reg));
|
||||
addr + size <= mcq_op_reg_addr + sizeof(u->mcq_op_reg));
|
||||
}
|
||||
|
||||
static MemTxResult ufs_addr_read(UfsHc *u, hwaddr addr, void *buf, int size)
|
||||
|
@ -774,25 +775,25 @@ static void ufs_write_mcq_op_reg(UfsHc *u, hwaddr offset, uint32_t data,
|
|||
static uint64_t ufs_mmio_read(void *opaque, hwaddr addr, unsigned size)
|
||||
{
|
||||
UfsHc *u = (UfsHc *)opaque;
|
||||
uint8_t *ptr;
|
||||
uint32_t *ptr;
|
||||
uint64_t value;
|
||||
uint64_t offset;
|
||||
|
||||
if (addr < sizeof(u->reg)) {
|
||||
if (addr + size <= sizeof(u->reg)) {
|
||||
offset = addr;
|
||||
ptr = (uint8_t *)&u->reg;
|
||||
} else if (ufs_is_mcq_reg(u, addr)) {
|
||||
ptr = (uint32_t *)&u->reg;
|
||||
} else if (ufs_is_mcq_reg(u, addr, size)) {
|
||||
offset = addr - ufs_mcq_reg_addr(u, 0);
|
||||
ptr = (uint8_t *)&u->mcq_reg;
|
||||
} else if (ufs_is_mcq_op_reg(u, addr)) {
|
||||
ptr = (uint32_t *)&u->mcq_reg;
|
||||
} else if (ufs_is_mcq_op_reg(u, addr, size)) {
|
||||
offset = addr - ufs_mcq_op_reg_addr(u, 0);
|
||||
ptr = (uint8_t *)&u->mcq_op_reg;
|
||||
ptr = (uint32_t *)&u->mcq_op_reg;
|
||||
} else {
|
||||
trace_ufs_err_invalid_register_offset(addr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
value = *(uint32_t *)(ptr + offset);
|
||||
value = ptr[offset >> 2];
|
||||
trace_ufs_mmio_read(addr, value, size);
|
||||
return value;
|
||||
}
|
||||
|
@ -804,11 +805,11 @@ static void ufs_mmio_write(void *opaque, hwaddr addr, uint64_t data,
|
|||
|
||||
trace_ufs_mmio_write(addr, data, size);
|
||||
|
||||
if (addr < sizeof(u->reg)) {
|
||||
if (addr + size <= sizeof(u->reg)) {
|
||||
ufs_write_reg(u, addr, data, size);
|
||||
} else if (ufs_is_mcq_reg(u, addr)) {
|
||||
} else if (ufs_is_mcq_reg(u, addr, size)) {
|
||||
ufs_write_mcq_reg(u, addr - ufs_mcq_reg_addr(u, 0), data, size);
|
||||
} else if (ufs_is_mcq_op_reg(u, addr)) {
|
||||
} else if (ufs_is_mcq_op_reg(u, addr, size)) {
|
||||
ufs_write_mcq_op_reg(u, addr - ufs_mcq_op_reg_addr(u, 0), data, size);
|
||||
} else {
|
||||
trace_ufs_err_invalid_register_offset(addr);
|
||||
|
|
Loading…
Reference in New Issue