hw/misc/sifive_u_otp: handling the fails of blk_pread and blk_pwrite
Fix code coverage issues by checking return value and handling fail case of blk_pread() and blk_pwrite(). Return default value 0xff if read fails. Fixes: Coverity CID 1435959 Fixes: Coverity CID 1435960 Fixes: Coverity CID 1435961 Signed-off-by: Green Wan <green.wan@sifive.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-id: 20201104092900.21214-1-green.wan@sifive.com Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
1eaada8ae1
commit
29b5fe0dcd
@ -63,8 +63,13 @@ static uint64_t sifive_u_otp_read(void *opaque, hwaddr addr, unsigned int size)
|
||||
if (s->blk) {
|
||||
int32_t buf;
|
||||
|
||||
blk_pread(s->blk, s->pa * SIFIVE_U_OTP_FUSE_WORD, &buf,
|
||||
SIFIVE_U_OTP_FUSE_WORD);
|
||||
if (blk_pread(s->blk, s->pa * SIFIVE_U_OTP_FUSE_WORD, &buf,
|
||||
SIFIVE_U_OTP_FUSE_WORD) < 0) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR,
|
||||
"read error index<%d>\n", s->pa);
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
@ -161,8 +166,12 @@ static void sifive_u_otp_write(void *opaque, hwaddr addr,
|
||||
|
||||
/* write to backend */
|
||||
if (s->blk) {
|
||||
blk_pwrite(s->blk, s->pa * SIFIVE_U_OTP_FUSE_WORD,
|
||||
&s->fuse[s->pa], SIFIVE_U_OTP_FUSE_WORD, 0);
|
||||
if (blk_pwrite(s->blk, s->pa * SIFIVE_U_OTP_FUSE_WORD,
|
||||
&s->fuse[s->pa], SIFIVE_U_OTP_FUSE_WORD,
|
||||
0) < 0) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR,
|
||||
"write error index<%d>\n", s->pa);
|
||||
}
|
||||
}
|
||||
|
||||
/* update written bit */
|
||||
@ -249,12 +258,18 @@ static void sifive_u_otp_reset(DeviceState *dev)
|
||||
int index = SIFIVE_U_OTP_SERIAL_ADDR;
|
||||
|
||||
serial_data = s->serial;
|
||||
blk_pwrite(s->blk, index * SIFIVE_U_OTP_FUSE_WORD,
|
||||
&serial_data, SIFIVE_U_OTP_FUSE_WORD, 0);
|
||||
if (blk_pwrite(s->blk, index * SIFIVE_U_OTP_FUSE_WORD,
|
||||
&serial_data, SIFIVE_U_OTP_FUSE_WORD, 0) < 0) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR,
|
||||
"write error index<%d>\n", index);
|
||||
}
|
||||
|
||||
serial_data = ~(s->serial);
|
||||
blk_pwrite(s->blk, (index + 1) * SIFIVE_U_OTP_FUSE_WORD,
|
||||
&serial_data, SIFIVE_U_OTP_FUSE_WORD, 0);
|
||||
if (blk_pwrite(s->blk, (index + 1) * SIFIVE_U_OTP_FUSE_WORD,
|
||||
&serial_data, SIFIVE_U_OTP_FUSE_WORD, 0) < 0) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR,
|
||||
"write error index<%d>\n", index + 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Initialize write-once map */
|
||||
|
Loading…
Reference in New Issue
Block a user