[ovs-dev] [uswitch 3/4] dpif-linux: Avoid segfault on netdev_get_stats() without kernel module.
Ben Pfaff
blp at nicira.com
Fri Apr 8 23:41:06 UTC 2011
netdev_linux_get_stats() calls into netdev_vport_get_stats(), which in
turn attempts a transactino 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 <arosen at clemson.edu>
---
lib/dpif-linux.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/lib/dpif-linux.c b/lib/dpif-linux.c
index 10ddd51..a7823b8 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);
--
1.7.1
More information about the dev
mailing list