dm: refine the check of return value of snprintf

int snprintf(char *str, size_t size, const char *format, ...)
The functions snprintf() write at most size bytes (including the
terminating null byte('\0')) to str.
only when returned value of snprintf is non-negative and less than size,
the string has been completely written.

Tracked-On: #3789
Signed-off-by: Junhao Gao <junhao.gao@intel.com>
Reviewed-by: Yonghua Huang <yonghua.huang@intel.com>
Acked-by: Yu Wang <yu1.wang@intel.com>
This commit is contained in:
Gao Junhao
2019-10-12 03:18:52 +00:00
committed by wenlingz
parent 44c11ce6c4
commit e6e0e27788
3 changed files with 8 additions and 9 deletions

View File

@@ -524,12 +524,11 @@ virtio_blk_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
MD5_Init(&mdctx);
MD5_Update(&mdctx, opts, strnlen(opts, VIRTIO_BLK_MAX_OPTS_LEN));
MD5_Final(digest, &mdctx);
if (snprintf(blk->ident, sizeof(blk->ident),
rc = snprintf(blk->ident, sizeof(blk->ident),
"ACRN--%02X%02X-%02X%02X-%02X%02X", digest[0],
digest[1], digest[2], digest[3], digest[4],
digest[5]) >= sizeof(blk->ident)) {
WPRINTF(("virtio_blk: block ident too long\n"));
}
digest[1], digest[2], digest[3], digest[4], digest[5]);
if (rc >= sizeof(blk->ident) || rc < 0)
WPRINTF(("virtio_blk: device name is invalid!\n"));
/* Setup virtio block config space only for valid backend file*/
if (!blk->dummy_bctxt)