From 8cf92af900bebd0d11a205b0c82092adf1344010 Mon Sep 17 00:00:00 2001 From: Alex Young Date: Mon, 24 Feb 2014 12:20:50 +0000 Subject: [PATCH] Call srand() to make sure request handles are properly randomised --- src/common/mirror.c | 5 +++-- src/common/readwrite.c | 7 +++++-- src/main.c | 4 ++++ src/proxy-main.c | 4 ++++ 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/common/mirror.c b/src/common/mirror.c index a53b83c..bcea652 100644 --- a/src/common/mirror.c +++ b/src/common/mirror.c @@ -694,7 +694,7 @@ void mirror_limit_cb( struct ev_loop *loop, ev_timer *w, int revents ) * if it has, start migrating. If it's not finished, then enabling the bitset * stream does not go well for us. */ -void mirror_begin_cb( struct ev_loop *loop, ev_timer *w, int revents ) +static void mirror_begin_cb( struct ev_loop *loop, ev_timer *w, int revents ) { struct mirror_ctrl* ctrl = (struct mirror_ctrl*) w->data; NULLCHECK( ctrl ); @@ -750,7 +750,8 @@ void mirror_run( struct server *serve ) ctrl.ev_loop = EV_DEFAULT; - /* gcc warns on -O2. clang is fine. Seems to be the fault of ev.h */ + /* gcc warns with -Wstrict-aliasing on -O2. clang doesn't + * implement this warning. Seems to be the fault of ev.h */ ev_init( &ctrl.begin_watcher, mirror_begin_cb ); ctrl.begin_watcher.repeat = 1.0; // We check bps every second. seems sane. ctrl.begin_watcher.data = (void*) &ctrl; diff --git a/src/common/readwrite.c b/src/common/readwrite.c index 731e5ca..eb0d680 100644 --- a/src/common/readwrite.c +++ b/src/common/readwrite.c @@ -103,10 +103,13 @@ int socket_nbd_write_hello(int fd, off64_t out_size) void fill_request(struct nbd_request *request, int type, off64_t from, int len) { + int32_t handle_i[2]; + handle_i[0] = rand(); + handle_i[1] = rand(); + request->magic = htobe32(REQUEST_MAGIC); request->type = htobe32(type); - ((int*) request->handle)[0] = rand(); - ((int*) request->handle)[1] = rand(); + memcpy( request->handle, handle_i, sizeof(request->handle) ); request->from = htobe64(from); request->len = htobe32(len); } diff --git a/src/main.c b/src/main.c index daf99b4..aaf37dd 100644 --- a/src/main.c +++ b/src/main.c @@ -2,12 +2,16 @@ #include "mode.h" #include +#include +#include int main(int argc, char** argv) { signal(SIGPIPE, SIG_IGN); /* calls to splice() unhelpfully throw this */ error_init(); + srand(time(NULL)); + if (argc < 2) { exit_err( help_help_text ); } diff --git a/src/proxy-main.c b/src/proxy-main.c index 8c8ea4c..fad873a 100644 --- a/src/proxy-main.c +++ b/src/proxy-main.c @@ -1,4 +1,6 @@ #include +#include +#include #include "mode.h" #include "util.h" @@ -102,6 +104,8 @@ int main( int argc, char *argv[] ) exit_action.sa_mask = mask; exit_action.sa_flags = 0; + srand(time(NULL)); + while (1) { c = getopt_long( argc, argv, proxy_short_options, proxy_options, NULL ); if ( -1 == c ) { break; }