[ovs-dev] [PATCH] rconn: Avoid memory leak in rconn_send_with_limit() on queue overflow.

Ben Pfaff blp at nicira.com
Fri Jan 4 21:48:54 UTC 2013


Bug #14357.
Reported-by: Luca Giraudo <lgiraudo at nicira.com>
Signed-off-by: Ben Pfaff <blp at nicira.com>
---
This leak has been around forever.  I expect to backport it all the
way to 1.4.

 lib/rconn.c |   11 +++++------
 1 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/lib/rconn.c b/lib/rconn.c
index 1ea022b..2049a90 100644
--- a/lib/rconn.c
+++ b/lib/rconn.c
@@ -649,14 +649,13 @@ int
 rconn_send_with_limit(struct rconn *rc, struct ofpbuf *b,
                       struct rconn_packet_counter *counter, int queue_limit)
 {
-    int retval;
-    retval = (counter->n_packets >= queue_limit
-              ? EAGAIN
-              : rconn_send(rc, b, counter));
-    if (retval) {
+    if (counter->n_packets < queue_limit) {
+        return rconn_send(rc, b, counter);
+    } else {
         COVERAGE_INC(rconn_overflow);
+        ofpbuf_delete(b);
+        return EAGAIN;
     }
-    return retval;
 }
 
 /* Returns the total number of packets successfully sent on the underlying
-- 
1.7.2.5




More information about the dev mailing list