aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnisse Astier <aastier@freebox.fr>2019-02-04 10:59:44 +0100
committerWill Deacon <will.deacon@arm.com>2019-02-08 16:04:19 +0000
commit04d604b65f1f7061c252d41b65b474aae418d025 (patch)
tree3048124bdcb5ff75345f8f34abffcee7ab87592b
parent16509081faf92c710c15bbc3ba5c60dc3c442f7b (diff)
downloadkvmtool-04d604b65f1f7061c252d41b65b474aae418d025.tar.gz
kvmtool: 9p: fix overapping snprintf
GCC 8.2 gives this warning: virtio/9p.c: In function ‘virtio_p9_create’: virtio/9p.c:335:21: error: passing argument 1 to restrict-qualified parameter aliases with argument 4 [-Werror=restrict] ret = snprintf(dfid->path, size, "%s/%s", dfid->path, name); ~~~~^~~~~~ ~~~~~~~~~~ Fix it by allocating a temporary string with dfid->path content instead of overwriting it in-place, which is limited in glibc snprintf with the __restrict qualifier. Reviewed-by: Andre Przywara <andre.przywara@arm.com> Signed-off-by: Anisse Astier <aastier@freebox.fr> Signed-off-by: Will Deacon <will.deacon@arm.com>
-rw-r--r--virtio/9p.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/virtio/9p.c b/virtio/9p.c
index 6bae4030..ac70dbc3 100644
--- a/virtio/9p.c
+++ b/virtio/9p.c
@@ -322,6 +322,7 @@ static void virtio_p9_create(struct p9_dev *p9dev,
struct p9_qid qid;
struct p9_fid *dfid;
char full_path[PATH_MAX];
+ char *tmp_path;
u32 dfid_val, flags, mode, gid;
virtio_p9_pdu_readf(pdu, "dsddd", &dfid_val,
@@ -332,7 +333,13 @@ static void virtio_p9_create(struct p9_dev *p9dev,
goto err_out;
size = sizeof(dfid->abs_path) - (dfid->path - dfid->abs_path);
- ret = snprintf(dfid->path, size, "%s/%s", dfid->path, name);
+
+ tmp_path = strdup(dfid->path);
+ if (!tmp_path)
+ goto err_out;
+
+ ret = snprintf(dfid->path, size, "%s/%s", tmp_path, name);
+ free(tmp_path);
if (ret >= (int)size) {
errno = ENAMETOOLONG;
if (size > 0)