suboptstrs was never freed on error paths. Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx> --- common/mlog.c | 19 +++++++++++-------- 1 files changed, 11 insertions(+), 8 deletions(-) diff --git a/common/mlog.c b/common/mlog.c index b0135b9..f1fa12f 100644 --- a/common/mlog.c +++ b/common/mlog.c @@ -149,6 +149,7 @@ mlog_init1( intgen_t argc, char *argv[ ] ) ix_t soix; size_t vsymcnt; intgen_t c; + bool_t retval = BOOL_FALSE; /* Until proven otherwise */ /* prepare an array of suboption token strings. this will be the * concatenation of the subsystem names with the verbosity symbols. @@ -192,7 +193,7 @@ mlog_init1( intgen_t argc, char *argv[ ] ) progname, c ); usage( ); - return BOOL_FALSE; + goto out_free; } options = optarg; while ( *options ) { @@ -208,7 +209,7 @@ mlog_init1( intgen_t argc, char *argv[ ] ) progname, c ); usage( ); - return BOOL_FALSE; + goto out_free; } ASSERT( ( ix_t )suboptix < @@ -224,7 +225,7 @@ mlog_init1( intgen_t argc, char *argv[ ] ) c, mlog_ss_names[ suboptix ] ); usage( ); - return BOOL_FALSE; + goto out_free; } ssix = ( ix_t )suboptix; mlog_level_ss[ ssix ] = @@ -238,7 +239,7 @@ mlog_init1( intgen_t argc, char *argv[ ] ) progname, c ); usage( ); - return BOOL_FALSE; + goto out_free; } ssix = MLOG_SS_GEN; mlog_level_ss[ ssix ] = @@ -251,7 +252,7 @@ mlog_init1( intgen_t argc, char *argv[ ] ) progname, c ); usage( ); - return BOOL_FALSE; + goto out_free; } } break; @@ -267,8 +268,6 @@ mlog_init1( intgen_t argc, char *argv[ ] ) } } - free( ( void * )suboptstrs ); - /* give subsystems not explicitly called out the "general" verbosity */ for ( ssix = 0 ; ssix < MLOG_SS_CNT ; ssix++ ) { @@ -301,7 +300,11 @@ mlog_init1( intgen_t argc, char *argv[ ] ) mlog_qlockh = QLOCKH_NULL; - return BOOL_TRUE; + retval = BOOL_TRUE; + +out_free: + free( ( void * )suboptstrs ); + return retval; } bool_t -- 1.7.1 _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs