@@ -945,15 +945,42 @@ func createKprobeSensorFromEntry(polInfo *policyInfo, kprobeEntry *genericKprobe
945
945
pinProg = fmt .Sprintf ("%s:%d" , kprobeEntry .funcName , kprobeEntry .instance )
946
946
}
947
947
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 )
956
982
load .Override = kprobeEntry .hasOverride
983
+
957
984
if load .Override {
958
985
load .OverrideFmodRet = isSecurityFunc && bpf .HasModifyReturn ()
959
986
}
@@ -968,9 +995,6 @@ func createKprobeSensorFromEntry(polInfo *policyInfo, kprobeEntry *genericKprobe
968
995
configMap := program .MapBuilderProgram ("config_map" , load )
969
996
maps = append (maps , configMap )
970
997
971
- tailCalls := program .MapBuilderProgram ("kprobe_calls" , load )
972
- maps = append (maps , tailCalls )
973
-
974
998
filterMap := program .MapBuilderProgram ("filter_map" , load )
975
999
maps = append (maps , filterMap )
976
1000
@@ -1041,15 +1065,42 @@ func createKprobeSensorFromEntry(polInfo *policyInfo, kprobeEntry *genericKprobe
1041
1065
if kprobeEntry .instance != 0 {
1042
1066
pinRetProg = sensors .PathJoin (fmt .Sprintf ("%s_return:%d" , kprobeEntry .funcName , kprobeEntry .instance ))
1043
1067
}
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
+
1053
1104
progs = append (progs , loadret )
1054
1105
1055
1106
retProbe := program .MapBuilderSensor ("retprobe_map" , loadret )
@@ -1058,9 +1109,6 @@ func createKprobeSensorFromEntry(polInfo *policyInfo, kprobeEntry *genericKprobe
1058
1109
retConfigMap := program .MapBuilderProgram ("config_map" , loadret )
1059
1110
maps = append (maps , retConfigMap )
1060
1111
1061
- tailCalls := program .MapBuilderProgram ("retkprobe_calls" , loadret )
1062
- maps = append (maps , tailCalls )
1063
-
1064
1112
filterMap := program .MapBuilderProgram ("filter_map" , loadret )
1065
1113
maps = append (maps , filterMap )
1066
1114
@@ -1134,10 +1182,14 @@ func loadSingleKprobeSensor(id idtable.EntryID, bpfDir string, load *program.Pro
1134
1182
}
1135
1183
load .MapLoad = append (load .MapLoad , config )
1136
1184
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
+ }
1139
1189
} 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
+ }
1141
1193
}
1142
1194
1143
1195
return err
0 commit comments