From cf8fbeaa1c876ac0af7acd59551bfd9b92b0bc3b Mon Sep 17 00:00:00 2001 From: William Tu Date: Thu, 24 Dec 2015 10:28:40 -0800 Subject: [PATCH] ofp-print: Fix memory leak at ofp_print_bundle_add(). Call ds_put_and_free_cstr instead of ds_put_cstr to free msg. Reported by test cases: 325, 326 ofp_print_bundle_add (ofp-print.c:3027) ofp_to_string__ (ofp-print.c:3410) ofp_to_string (ofp-print.c:3465) ofp_print (ofp-print.c:3497) ofctl_ofp_print (ovs-ofctl.c:3818) ovs_cmdl_run_command (command-line.c:121) main (ovs-ofctl.c:135) Signed-off-by: William Tu Signed-off-by: Daniele Di Proietto Co-authored-by: Daniele Di Proietto [blp@ovn.org simplified the code slightly] Signed-off-by: Ben Pfaff Signed-off-by: Ben Pfaff --- lib/ofp-print.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/ofp-print.c b/lib/ofp-print.c index 930b01a6e..02bcd7ae5 100644 --- a/lib/ofp-print.c +++ b/lib/ofp-print.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc. + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -3010,7 +3010,6 @@ ofp_print_bundle_add(struct ds *s, const struct ofp_header *oh, int verbosity) { int error; struct ofputil_bundle_add_msg badd; - char *msg; error = ofputil_decode_bundle_add(oh, &badd, NULL); if (error) { @@ -3024,10 +3023,8 @@ ofp_print_bundle_add(struct ds *s, const struct ofp_header *oh, int verbosity) ofp_print_bit_names(s, badd.flags, bundle_flags_to_name, ' '); ds_put_char(s, '\n'); - msg = ofp_to_string(badd.msg, ntohs(badd.msg->length), verbosity); - if (msg) { - ds_put_cstr(s, msg); - } + char *msg = ofp_to_string(badd.msg, ntohs(badd.msg->length), verbosity); + ds_put_and_free_cstr(s, msg); } static void