@@ -945,15 +945,42 @@ func createKprobeSensorFromEntry(polInfo *policyInfo, kprobeEntry *genericKprobe
945945 pinProg = fmt .Sprintf ("%s:%d" , kprobeEntry .funcName , kprobeEntry .instance )
946946 }
947947
948- load := program .Builder (
949- path .Join (option .Config .HubbleLib , loadProgName ),
950- kprobeEntry .funcName ,
951- "kprobe/generic_kprobe" ,
952- pinProg ,
953- "generic_kprobe" ).
954- SetLoaderData (kprobeEntry .tableId ).
955- SetPolicy (kprobeEntry .policyName )
948+ var load * program.Program
949+
950+ if kprobeEntry .hasOverride {
951+ load = program .Builder (
952+ path .Join (option .Config .HubbleLib , loadProgName ),
953+ kprobeEntry .funcName ,
954+ "kprobe/generic_kprobe" ,
955+ pinProg ,
956+ "generic_kprobe" )
957+
958+ tailCalls := program .MapBuilderProgram ("kprobe_calls" , load )
959+ maps = append (maps , tailCalls )
960+
961+ } else {
962+ data := & program.TracingAttachData {
963+ AttachTo : kprobeEntry .funcName ,
964+ }
965+
966+ loadProgName , loadProgRetName = config .GenericTracingObjs ()
967+
968+ load = program .Builder (
969+ path .Join (option .Config .HubbleLib , loadProgName ),
970+ kprobeEntry .funcName ,
971+ "fentry/generic_fentry" ,
972+ pinProg ,
973+ "generic_kprobe" ).
974+ SetAttachData (data )
975+
976+ tailCalls := program .MapBuilderProgram ("fentry_calls" , load )
977+ maps = append (maps , tailCalls )
978+ }
979+
980+ load .SetPolicy (kprobeEntry .policyName )
981+ load .SetLoaderData (kprobeEntry .tableId )
956982 load .Override = kprobeEntry .hasOverride
983+
957984 if load .Override {
958985 load .OverrideFmodRet = isSecurityFunc && bpf .HasModifyReturn ()
959986 }
@@ -968,9 +995,6 @@ func createKprobeSensorFromEntry(polInfo *policyInfo, kprobeEntry *genericKprobe
968995 configMap := program .MapBuilderProgram ("config_map" , load )
969996 maps = append (maps , configMap )
970997
971- tailCalls := program .MapBuilderProgram ("kprobe_calls" , load )
972- maps = append (maps , tailCalls )
973-
974998 filterMap := program .MapBuilderProgram ("filter_map" , load )
975999 maps = append (maps , filterMap )
9761000
@@ -1041,15 +1065,42 @@ func createKprobeSensorFromEntry(polInfo *policyInfo, kprobeEntry *genericKprobe
10411065 if kprobeEntry .instance != 0 {
10421066 pinRetProg = sensors .PathJoin (fmt .Sprintf ("%s_return:%d" , kprobeEntry .funcName , kprobeEntry .instance ))
10431067 }
1044- loadret := program .Builder (
1045- path .Join (option .Config .HubbleLib , loadProgRetName ),
1046- kprobeEntry .funcName ,
1047- "kprobe/generic_retkprobe" ,
1048- pinRetProg ,
1049- "generic_kprobe" ).
1050- SetRetProbe (true ).
1051- SetLoaderData (kprobeEntry .tableId ).
1052- SetPolicy (kprobeEntry .policyName )
1068+
1069+ var loadret * program.Program
1070+
1071+ if kprobeEntry .hasOverride {
1072+ loadret = program .Builder (
1073+ path .Join (option .Config .HubbleLib , loadProgRetName ),
1074+ kprobeEntry .funcName ,
1075+ "kprobe/generic_retkprobe" ,
1076+ pinRetProg ,
1077+ "generic_kprobe" )
1078+
1079+ tailCalls := program .MapBuilderProgram ("retkprobe_calls" , loadret )
1080+ maps = append (maps , tailCalls )
1081+ } else {
1082+ data := & program.TracingAttachData {
1083+ AttachTo : kprobeEntry .funcName ,
1084+ }
1085+
1086+ loadProgName , loadProgRetName = config .GenericTracingObjs ()
1087+
1088+ loadret = program .Builder (
1089+ path .Join (option .Config .HubbleLib , loadProgRetName ),
1090+ kprobeEntry .funcName ,
1091+ "fexit/generic_fexit" ,
1092+ pinRetProg ,
1093+ "generic_kprobe" ).
1094+ SetAttachData (data )
1095+
1096+ tailCalls := program .MapBuilderProgram ("fexit_calls" , loadret )
1097+ maps = append (maps , tailCalls )
1098+ }
1099+
1100+ loadret .SetRetProbe (true )
1101+ loadret .SetLoaderData (kprobeEntry .tableId )
1102+ loadret .SetPolicy (kprobeEntry .policyName )
1103+
10531104 progs = append (progs , loadret )
10541105
10551106 retProbe := program .MapBuilderSensor ("retprobe_map" , loadret )
@@ -1058,9 +1109,6 @@ func createKprobeSensorFromEntry(polInfo *policyInfo, kprobeEntry *genericKprobe
10581109 retConfigMap := program .MapBuilderProgram ("config_map" , loadret )
10591110 maps = append (maps , retConfigMap )
10601111
1061- tailCalls := program .MapBuilderProgram ("retkprobe_calls" , loadret )
1062- maps = append (maps , tailCalls )
1063-
10641112 filterMap := program .MapBuilderProgram ("filter_map" , loadret )
10651113 maps = append (maps , filterMap )
10661114
@@ -1134,10 +1182,14 @@ func loadSingleKprobeSensor(id idtable.EntryID, bpfDir string, load *program.Pro
11341182 }
11351183 load .MapLoad = append (load .MapLoad , config )
11361184
1137- if err := program .LoadKprobeProgram (bpfDir , load , maps , verbose ); err == nil {
1138- logger .GetLogger ().Info (fmt .Sprintf ("Loaded generic kprobe program: %s -> %s" , load .Name , load .Attach ))
1185+ if load .Label == "fentry/generic_fentry" || load .Label == "fexit/generic_fexit" {
1186+ if err = program .LoadTracingProgram (bpfDir , load , maps , verbose ); err == nil {
1187+ logger .GetLogger ().Info (fmt .Sprintf ("Loaded generic fentry program: %s -> %s" , load .Name , load .Attach ))
1188+ }
11391189 } else {
1140- return err
1190+ if err = program .LoadKprobeProgram (bpfDir , load , maps , verbose ); err == nil {
1191+ logger .GetLogger ().Info (fmt .Sprintf ("Loaded generic kprobe program: %s -> %s" , load .Name , load .Attach ))
1192+ }
11411193 }
11421194
11431195 return err
0 commit comments