* [Qemu-devel] [PATCH 1/2] vhost-user-test: use tmpfs by default
@ 2015-10-01 12:54 Michael S. Tsirkin
2015-10-01 12:54 ` [Qemu-devel] [PATCH 2/2] vhost-user-test: fix predictable filename on tmpfs Michael S. Tsirkin
2015-10-01 17:09 ` [Qemu-devel] [PATCH 1/2] vhost-user-test: use tmpfs by default Marc-André Lureau
0 siblings, 2 replies; 4+ messages in thread
From: Michael S. Tsirkin @ 2015-10-01 12:54 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, Yuanhan Liu, Igor Mammedov, Stefan Hajnoczi,
Marcel Apfelbaum
Most people don't run make check by default, so they skip vhost-user
unit tests. Solve this by using tmpfs instead, unless hugetlbfs is
specified (using an environment variable).
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
tests/vhost-user-test.c | 37 +++++++++++++++++++++++++------------
1 file changed, 25 insertions(+), 12 deletions(-)
diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
index 87281b9..5e63cbc 100644
--- a/tests/vhost-user-test.c
+++ b/tests/vhost-user-test.c
@@ -272,17 +272,11 @@ static void chr_read(void *opaque, const uint8_t *buf, int size)
g_mutex_unlock(&data_mutex);
}
-static const char *init_hugepagefs(void)
+static const char *init_hugepagefs(const char *path)
{
- const char *path;
struct statfs fs;
int ret;
- path = getenv("QTEST_HUGETLBFS_PATH");
- if (!path) {
- path = "/hugetlbfs";
- }
-
if (access(path, R_OK | W_OK | X_OK)) {
g_test_message("access on path (%s): %s\n", path, strerror(errno));
return NULL;
@@ -309,19 +303,31 @@ int main(int argc, char **argv)
{
QTestState *s = NULL;
CharDriverState *chr = NULL;
- const char *hugefs = 0;
+ const char *hugefs;
char *socket_path = 0;
char *qemu_cmd = 0;
char *chr_path = 0;
int ret;
+ char template[] = "/tmp/vhost-test-XXXXXX";
+ const char *tmpfs;
+ const char *root;
g_test_init(&argc, &argv, NULL);
module_call_init(MODULE_INIT_QOM);
- hugefs = init_hugepagefs();
- if (!hugefs) {
- return 0;
+ tmpfs = mkdtemp(template);
+ if (!tmpfs) {
+ g_test_message("mkdtemp on path (%s): %s\n", template, strerror(errno));
+ }
+ g_assert(tmpfs);
+
+ hugefs = getenv("QTEST_HUGETLBFS_PATH");
+ if (hugefs) {
+ root = init_hugepagefs(hugefs);
+ g_assert(root);
+ } else {
+ root = tmpfs;
}
socket_path = g_strdup_printf("/tmp/vhost-%d.sock", getpid());
@@ -338,7 +344,7 @@ int main(int argc, char **argv)
g_cond_init(&data_cond);
g_thread_new(NULL, thread_function, NULL);
- qemu_cmd = g_strdup_printf(QEMU_CMD, hugefs, socket_path);
+ qemu_cmd = g_strdup_printf(QEMU_CMD, root, socket_path);
s = qtest_start(qemu_cmd);
g_free(qemu_cmd);
@@ -354,5 +360,12 @@ int main(int argc, char **argv)
unlink(socket_path);
g_free(socket_path);
+ ret = rmdir(tmpfs);
+ if (ret != 0) {
+ g_test_message("unable to rmdir: path (%s): %s\n",
+ tmpfs, strerror(errno));
+ }
+ g_assert_cmpint(ret, ==, 0);
+
return ret;
}
--
MST
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Qemu-devel] [PATCH 2/2] vhost-user-test: fix predictable filename on tmpfs
2015-10-01 12:54 [Qemu-devel] [PATCH 1/2] vhost-user-test: use tmpfs by default Michael S. Tsirkin
@ 2015-10-01 12:54 ` Michael S. Tsirkin
2015-10-01 17:09 ` Marc-André Lureau
2015-10-01 17:09 ` [Qemu-devel] [PATCH 1/2] vhost-user-test: use tmpfs by default Marc-André Lureau
1 sibling, 1 reply; 4+ messages in thread
From: Michael S. Tsirkin @ 2015-10-01 12:54 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, Yuanhan Liu, Marcel Apfelbaum,
=?UTF-8?q?Marc-Andr=C3=A9=20Lureau?=, Stefan Hajnoczi,
Igor Mammedov, Paolo Bonzini
vhost-user-test uses getpid to create a unique filename. This name is
predictable, and a security problem. Instead, use a tmp directory
created by mkdtemp, which is a suggested best practice.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
tests/vhost-user-test.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
index 5e63cbc..56df5cc 100644
--- a/tests/vhost-user-test.c
+++ b/tests/vhost-user-test.c
@@ -330,7 +330,7 @@ int main(int argc, char **argv)
root = tmpfs;
}
- socket_path = g_strdup_printf("/tmp/vhost-%d.sock", getpid());
+ socket_path = g_strdup_printf("%s/vhost.sock", tmpfs);
/* create char dev and add read handlers */
qemu_add_opts(&qemu_chardev_opts);
--
MST
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] vhost-user-test: fix predictable filename on tmpfs
2015-10-01 12:54 ` [Qemu-devel] [PATCH 2/2] vhost-user-test: fix predictable filename on tmpfs Michael S. Tsirkin
@ 2015-10-01 17:09 ` Marc-André Lureau
0 siblings, 0 replies; 4+ messages in thread
From: Marc-André Lureau @ 2015-10-01 17:09 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Peter Maydell, Yuanhan Liu, Marcel Apfelbaum, QEMU,
Stefan Hajnoczi, Paolo Bonzini, Igor Mammedov
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
On Thu, Oct 1, 2015 at 2:54 PM, Michael S. Tsirkin <mst@redhat.com> wrote:
> vhost-user-test uses getpid to create a unique filename. This name is
> predictable, and a security problem. Instead, use a tmp directory
> created by mkdtemp, which is a suggested best practice.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> tests/vhost-user-test.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
> index 5e63cbc..56df5cc 100644
> --- a/tests/vhost-user-test.c
> +++ b/tests/vhost-user-test.c
> @@ -330,7 +330,7 @@ int main(int argc, char **argv)
> root = tmpfs;
> }
>
> - socket_path = g_strdup_printf("/tmp/vhost-%d.sock", getpid());
> + socket_path = g_strdup_printf("%s/vhost.sock", tmpfs);
>
> /* create char dev and add read handlers */
> qemu_add_opts(&qemu_chardev_opts);
> --
> MST
>
>
--
Marc-André Lureau
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] vhost-user-test: use tmpfs by default
2015-10-01 12:54 [Qemu-devel] [PATCH 1/2] vhost-user-test: use tmpfs by default Michael S. Tsirkin
2015-10-01 12:54 ` [Qemu-devel] [PATCH 2/2] vhost-user-test: fix predictable filename on tmpfs Michael S. Tsirkin
@ 2015-10-01 17:09 ` Marc-André Lureau
1 sibling, 0 replies; 4+ messages in thread
From: Marc-André Lureau @ 2015-10-01 17:09 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Peter Maydell, Yuanhan Liu, Marcel Apfelbaum, QEMU,
Stefan Hajnoczi, Igor Mammedov
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
On Thu, Oct 1, 2015 at 2:54 PM, Michael S. Tsirkin <mst@redhat.com> wrote:
> Most people don't run make check by default, so they skip vhost-user
> unit tests. Solve this by using tmpfs instead, unless hugetlbfs is
> specified (using an environment variable).
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> tests/vhost-user-test.c | 37 +++++++++++++++++++++++++------------
> 1 file changed, 25 insertions(+), 12 deletions(-)
>
> diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
> index 87281b9..5e63cbc 100644
> --- a/tests/vhost-user-test.c
> +++ b/tests/vhost-user-test.c
> @@ -272,17 +272,11 @@ static void chr_read(void *opaque, const uint8_t *buf, int size)
> g_mutex_unlock(&data_mutex);
> }
>
> -static const char *init_hugepagefs(void)
> +static const char *init_hugepagefs(const char *path)
> {
> - const char *path;
> struct statfs fs;
> int ret;
>
> - path = getenv("QTEST_HUGETLBFS_PATH");
> - if (!path) {
> - path = "/hugetlbfs";
> - }
> -
> if (access(path, R_OK | W_OK | X_OK)) {
> g_test_message("access on path (%s): %s\n", path, strerror(errno));
> return NULL;
> @@ -309,19 +303,31 @@ int main(int argc, char **argv)
> {
> QTestState *s = NULL;
> CharDriverState *chr = NULL;
> - const char *hugefs = 0;
> + const char *hugefs;
> char *socket_path = 0;
> char *qemu_cmd = 0;
> char *chr_path = 0;
> int ret;
> + char template[] = "/tmp/vhost-test-XXXXXX";
> + const char *tmpfs;
> + const char *root;
>
> g_test_init(&argc, &argv, NULL);
>
> module_call_init(MODULE_INIT_QOM);
>
> - hugefs = init_hugepagefs();
> - if (!hugefs) {
> - return 0;
> + tmpfs = mkdtemp(template);
> + if (!tmpfs) {
> + g_test_message("mkdtemp on path (%s): %s\n", template, strerror(errno));
> + }
> + g_assert(tmpfs);
> +
> + hugefs = getenv("QTEST_HUGETLBFS_PATH");
> + if (hugefs) {
> + root = init_hugepagefs(hugefs);
> + g_assert(root);
> + } else {
> + root = tmpfs;
> }
>
> socket_path = g_strdup_printf("/tmp/vhost-%d.sock", getpid());
> @@ -338,7 +344,7 @@ int main(int argc, char **argv)
> g_cond_init(&data_cond);
> g_thread_new(NULL, thread_function, NULL);
>
> - qemu_cmd = g_strdup_printf(QEMU_CMD, hugefs, socket_path);
> + qemu_cmd = g_strdup_printf(QEMU_CMD, root, socket_path);
> s = qtest_start(qemu_cmd);
> g_free(qemu_cmd);
>
> @@ -354,5 +360,12 @@ int main(int argc, char **argv)
> unlink(socket_path);
> g_free(socket_path);
>
> + ret = rmdir(tmpfs);
> + if (ret != 0) {
> + g_test_message("unable to rmdir: path (%s): %s\n",
> + tmpfs, strerror(errno));
> + }
> + g_assert_cmpint(ret, ==, 0);
> +
> return ret;
> }
> --
> MST
>
>
--
Marc-André Lureau
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-10-01 17:10 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-01 12:54 [Qemu-devel] [PATCH 1/2] vhost-user-test: use tmpfs by default Michael S. Tsirkin
2015-10-01 12:54 ` [Qemu-devel] [PATCH 2/2] vhost-user-test: fix predictable filename on tmpfs Michael S. Tsirkin
2015-10-01 17:09 ` Marc-André Lureau
2015-10-01 17:09 ` [Qemu-devel] [PATCH 1/2] vhost-user-test: use tmpfs by default Marc-André Lureau
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).