@@ -1235,18 +1235,18 @@ static int trace_fprobe_create_internal(int argc, const char *argv[],
12351235 * FETCHARG:TYPE : use TYPE instead of unsigned long.
12361236 */
12371237 struct trace_fprobe * tf __free (free_trace_fprobe ) = NULL ;
1238- struct module * mod __free (module_put ) = NULL ;
1239- int i , new_argc = 0 , ret = 0 ;
1240- bool is_return = false;
1241- char * symbol __free (kfree ) = NULL ;
12421238 const char * event = NULL , * group = FPROBE_EVENT_SYSTEM ;
1239+ struct module * mod __free (module_put ) = NULL ;
12431240 const char * * new_argv __free (kfree ) = NULL ;
1244- char buf [MAX_EVENT_NAME_LEN ];
1245- char gbuf [MAX_EVENT_NAME_LEN ];
1246- char sbuf [KSYM_NAME_LEN ];
1247- char abuf [MAX_BTF_ARGS_LEN ];
1241+ char * symbol __free (kfree ) = NULL ;
1242+ char * ebuf __free (kfree ) = NULL ;
1243+ char * gbuf __free (kfree ) = NULL ;
1244+ char * sbuf __free (kfree ) = NULL ;
1245+ char * abuf __free (kfree ) = NULL ;
12481246 char * dbuf __free (kfree ) = NULL ;
1247+ int i , new_argc = 0 , ret = 0 ;
12491248 bool is_tracepoint = false;
1249+ bool is_return = false;
12501250
12511251 if ((argv [0 ][0 ] != 'f' && argv [0 ][0 ] != 't' ) || argc < 2 )
12521252 return - ECANCELED ;
@@ -1274,22 +1274,28 @@ static int trace_fprobe_create_internal(int argc, const char *argv[],
12741274
12751275 trace_probe_log_set_index (0 );
12761276 if (event ) {
1277+ gbuf = kmalloc (MAX_EVENT_NAME_LEN , GFP_KERNEL );
1278+ if (!gbuf )
1279+ return - ENOMEM ;
12771280 ret = traceprobe_parse_event_name (& event , & group , gbuf ,
12781281 event - argv [0 ]);
12791282 if (ret )
12801283 return - EINVAL ;
12811284 }
12821285
12831286 if (!event ) {
1287+ ebuf = kmalloc (MAX_EVENT_NAME_LEN , GFP_KERNEL );
1288+ if (!ebuf )
1289+ return - ENOMEM ;
12841290 /* Make a new event name */
12851291 if (is_tracepoint )
1286- snprintf (buf , MAX_EVENT_NAME_LEN , "%s%s" ,
1292+ snprintf (ebuf , MAX_EVENT_NAME_LEN , "%s%s" ,
12871293 isdigit (* symbol ) ? "_" : "" , symbol );
12881294 else
1289- snprintf (buf , MAX_EVENT_NAME_LEN , "%s__%s" , symbol ,
1295+ snprintf (ebuf , MAX_EVENT_NAME_LEN , "%s__%s" , symbol ,
12901296 is_return ? "exit" : "entry" );
1291- sanitize_event_name (buf );
1292- event = buf ;
1297+ sanitize_event_name (ebuf );
1298+ event = ebuf ;
12931299 }
12941300
12951301 if (is_return )
@@ -1305,13 +1311,20 @@ static int trace_fprobe_create_internal(int argc, const char *argv[],
13051311 ctx -> flags |= TPARG_FL_TPOINT ;
13061312 mod = NULL ;
13071313 tpoint = find_tracepoint (symbol , & mod );
1308- if (tpoint )
1314+ if (tpoint ) {
1315+ sbuf = kmalloc (KSYM_NAME_LEN , GFP_KERNEL );
1316+ if (!sbuf )
1317+ return - ENOMEM ;
13091318 ctx -> funcname = kallsyms_lookup ((unsigned long )tpoint -> probestub ,
13101319 NULL , NULL , NULL , sbuf );
1320+ }
13111321 }
13121322 if (!ctx -> funcname )
13131323 ctx -> funcname = symbol ;
13141324
1325+ abuf = kmalloc (MAX_BTF_ARGS_LEN , GFP_KERNEL );
1326+ if (!abuf )
1327+ return - ENOMEM ;
13151328 argc -= 2 ; argv += 2 ;
13161329 new_argv = traceprobe_expand_meta_args (argc , argv , & new_argc ,
13171330 abuf , MAX_BTF_ARGS_LEN , ctx );
0 commit comments