]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: fix zapi fuzzing infra
authorQuentin Young <qlyoung@cumulusnetworks.com>
Wed, 18 Jul 2018 16:32:07 +0000 (16:32 +0000)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Wed, 18 Jul 2018 16:32:07 +0000 (16:32 +0000)
Some of this stuff got broken with the introduction of pthreads.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
zebra/main.c
zebra/zserv.c

index c5246999fa47ebe5dcd457f44b724716259e7459..4c58db2736242f0dd47df3c10fc6f3fc3c3e8d99 100644 (file)
@@ -349,13 +349,6 @@ int main(int argc, char **argv)
 /* For debug purpose. */
 /* SET_FLAG (zebra_debug_event, ZEBRA_DEBUG_EVENT); */
 
-#if defined(HANDLE_ZAPI_FUZZING)
-       if (fuzzing) {
-               zserv_read_file(fuzzing);
-               exit(0);
-       }
-#endif
-
        /* Process the configuration file. Among other configuration
        *  directives we can meet those installing static routes. Such
        *  requests will not be executed immediately, but queued in
@@ -391,6 +384,14 @@ int main(int argc, char **argv)
        /* RNH init */
        zebra_rnh_init();
 
+#if defined(HANDLE_ZAPI_FUZZING)
+       if (fuzzing) {
+               zserv_read_file(fuzzing);
+               exit(0);
+       }
+#endif
+
+
        frr_run(zebrad.master);
 
        /* Not reached... */
index b08da9cebd087102e5b618b48c874d3d3aed47d4..4c90757d70489e02ac6c42d0cb60fc8685c8b5f1 100644 (file)
@@ -640,7 +640,7 @@ static int zserv_handle_client_close(struct thread *thread)
  * sock
  *    client's socket file descriptor
  */
-static void zserv_client_create(int sock)
+static struct zserv *zserv_client_create(int sock)
 {
        struct zserv *client;
        int i;
@@ -696,6 +696,8 @@ static void zserv_client_create(int sock)
 
        /* start pthread */
        frr_pthread_run(client->pthread, NULL);
+
+       return client;
 }
 
 /*
@@ -1025,20 +1027,10 @@ void zserv_read_file(char *input)
        struct zserv *client = NULL;
        struct thread t;
 
-       zserv_client_create(-1);
-
-       frr_pthread_stop(client->pthread, NULL);
-       frr_pthread_destroy(client->pthread);
-       client->pthread = NULL;
-
-       t.arg = client;
-
        fd = open(input, O_RDONLY | O_NONBLOCK);
        t.u.fd = fd;
 
-       zserv_read(&t);
-
-       close(fd);
+       zserv_client_create(fd);
 }
 #endif