From: Ben Pfaff Date: Fri, 8 Apr 2011 23:37:22 +0000 (-0700) Subject: dpif-linux: Avoid segfault on netdev_get_stats() without kernel module. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=42bb6c72b58ba99e59e740f8cca4e201d7efaa02;p=openvswitch dpif-linux: Avoid segfault on netdev_get_stats() without kernel module. netdev_linux_get_stats() calls into netdev_vport_get_stats(), which in turn attempts a transaction on genl_sock. If the kernel module isn't loaded, then genl_sock won't be there, and in any case there's nothing that guarantees that it's been initialized yet. This fixes the problem by ensuring that dpif_linux was initialized properly before attempting a transaction on genl_sock. Reported-by: Aaron Rosen --- diff --git a/lib/dpif-linux.c b/lib/dpif-linux.c index 10ddd511..a7823b88 100644 --- a/lib/dpif-linux.c +++ b/lib/dpif-linux.c @@ -1282,6 +1282,15 @@ dpif_linux_vport_transact(const struct dpif_linux_vport *request, assert((reply != NULL) == (bufp != NULL)); + error = dpif_linux_init(); + if (error) { + if (reply) { + *bufp = NULL; + dpif_linux_vport_init(reply); + } + return error; + } + request_buf = ofpbuf_new(1024); dpif_linux_vport_to_ofpbuf(request, request_buf); error = nl_sock_transact(genl_sock, request_buf, bufp);