diff options
author | Anisse Astier <aastier@freebox.fr> | 2019-02-04 10:59:44 +0100 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2019-02-08 16:04:19 +0000 |
commit | 04d604b65f1f7061c252d41b65b474aae418d025 (patch) | |
tree | 3048124bdcb5ff75345f8f34abffcee7ab87592b | |
parent | 16509081faf92c710c15bbc3ba5c60dc3c442f7b (diff) | |
download | kvmtool-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.c | 9 |
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) |