99 * Copyright (C) 2021, VMware Inc, Tzvetomir Stoyanov tz.stoyanov@gmail.com>
1010 *
1111 */
12+ #include <linux/cleanup.h>
1213#include <linux/ftrace.h>
1314#include <linux/module.h>
1415#include <linux/mutex.h>
@@ -871,10 +872,10 @@ static int __trace_eprobe_create(int argc, const char *argv[])
871872 const char * event = NULL , * group = EPROBE_EVENT_SYSTEM ;
872873 const char * sys_event = NULL , * sys_name = NULL ;
873874 struct trace_event_call * event_call ;
875+ char * buf1 __free (kfree ) = NULL ;
876+ char * buf2 __free (kfree ) = NULL ;
877+ char * gbuf __free (kfree ) = NULL ;
874878 struct trace_eprobe * ep = NULL ;
875- char buf1 [MAX_EVENT_NAME_LEN ];
876- char buf2 [MAX_EVENT_NAME_LEN ];
877- char gbuf [MAX_EVENT_NAME_LEN ];
878879 int ret = 0 , filter_idx = 0 ;
879880 int i , filter_cnt ;
880881
@@ -885,6 +886,9 @@ static int __trace_eprobe_create(int argc, const char *argv[])
885886
886887 event = strchr (& argv [0 ][1 ], ':' );
887888 if (event ) {
889+ gbuf = kmalloc (MAX_EVENT_NAME_LEN , GFP_KERNEL );
890+ if (!gbuf )
891+ goto mem_error ;
888892 event ++ ;
889893 ret = traceprobe_parse_event_name (& event , & group , gbuf ,
890894 event - argv [0 ]);
@@ -894,14 +898,21 @@ static int __trace_eprobe_create(int argc, const char *argv[])
894898
895899 trace_probe_log_set_index (1 );
896900 sys_event = argv [1 ];
901+
902+ buf2 = kmalloc (MAX_EVENT_NAME_LEN , GFP_KERNEL );
903+ if (!buf2 )
904+ goto mem_error ;
905+
897906 ret = traceprobe_parse_event_name (& sys_event , & sys_name , buf2 , 0 );
898907 if (ret || !sys_event || !sys_name ) {
899908 trace_probe_log_err (0 , NO_EVENT_INFO );
900909 goto parse_error ;
901910 }
902911
903912 if (!event ) {
904- strscpy (buf1 , sys_event , MAX_EVENT_NAME_LEN );
913+ buf1 = kstrdup (sys_event , GFP_KERNEL );
914+ if (!buf1 )
915+ goto mem_error ;
905916 event = buf1 ;
906917 }
907918
@@ -974,6 +985,9 @@ static int __trace_eprobe_create(int argc, const char *argv[])
974985 trace_probe_log_clear ();
975986 return ret ;
976987
988+ mem_error :
989+ ret = - ENOMEM ;
990+ goto error ;
977991parse_error :
978992 ret = - EINVAL ;
979993error :
0 commit comments