From 59f2a376a32f4b4f7d157bcbafabaa9e050b692b Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Tue, 22 Aug 2017 09:46:14 -0700 Subject: [PATCH] virtio: check socket path snprintf() return code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes a GCC 7 warning: rte_virtio/virtio_user/vhost_user.c: In function ‘vhost_user_setup’: rte_virtio/virtio_user/vhost_user.c:439:46: error: ‘%s’ directive output may be truncated writing up to 4095 bytes into a region of size 108 [-Werror=format-truncation=] snprintf(un.sun_path, sizeof(un.sun_path), "%s", dev->path); Change-Id: I147c9efe93cc6ce9370da6443f181f916457e3e6 Signed-off-by: Daniel Verkamp Reviewed-on: https://review.gerrithub.io/375198 Tested-by: SPDK Automated Test System Reviewed-by: Ben Walker Reviewed-by: Jim Harris --- lib/bdev/virtio/rte_virtio/virtio_user/vhost_user.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/bdev/virtio/rte_virtio/virtio_user/vhost_user.c b/lib/bdev/virtio/rte_virtio/virtio_user/vhost_user.c index b3aff1263..f9aca3151 100644 --- a/lib/bdev/virtio/rte_virtio/virtio_user/vhost_user.c +++ b/lib/bdev/virtio/rte_virtio/virtio_user/vhost_user.c @@ -423,6 +423,7 @@ vhost_user_setup(struct virtio_user_dev *dev) int fd; int flag; struct sockaddr_un un; + ssize_t rc; fd = socket(AF_UNIX, SOCK_STREAM, 0); if (fd < 0) { @@ -436,7 +437,12 @@ vhost_user_setup(struct virtio_user_dev *dev) memset(&un, 0, sizeof(un)); un.sun_family = AF_UNIX; - snprintf(un.sun_path, sizeof(un.sun_path), "%s", dev->path); + rc = snprintf(un.sun_path, sizeof(un.sun_path), "%s", dev->path); + if (rc < 0 || (size_t)rc >= sizeof(un.sun_path)) { + PMD_DRV_LOG(ERR, "socket path too long"); + close(fd); + return -1; + } if (connect(fd, (struct sockaddr *)&un, sizeof(un)) < 0) { PMD_DRV_LOG(ERR, "connect error, %s", strerror(errno)); close(fd);