Browse Source

fix ebpf.plugin segfault when ebpf_load_program return null pointer (#11203)

wangpei 3 years ago
parent
commit
19acfc9066

+ 8 - 6
collectors/ebpf.plugin/ebpf_cachestat.c

@@ -80,13 +80,15 @@ static void ebpf_cachestat_cleanup(void *ptr)
     freez(cachestat_vector);
     freez(cachestat_hash_values);
 
-    struct bpf_program *prog;
-    size_t i = 0 ;
-    bpf_object__for_each_program(prog, objects) {
-        bpf_link__destroy(probe_links[i]);
-        i++;
+    if (probe_links) {
+        struct bpf_program *prog;
+        size_t i = 0 ;
+        bpf_object__for_each_program(prog, objects) {
+            bpf_link__destroy(probe_links[i]);
+            i++;
+        }
+        bpf_object__close(objects);
     }
-    bpf_object__close(objects);
 }
 
 /*****************************************************************

+ 8 - 6
collectors/ebpf.plugin/ebpf_dcstat.c

@@ -122,13 +122,15 @@ static void ebpf_dcstat_cleanup(void *ptr)
 
     ebpf_dcstat_clean_names();
 
-    struct bpf_program *prog;
-    size_t i = 0 ;
-    bpf_object__for_each_program(prog, objects) {
-        bpf_link__destroy(probe_links[i]);
-        i++;
+    if (probe_links) {
+        struct bpf_program *prog;
+        size_t i = 0 ;
+        bpf_object__for_each_program(prog, objects) {
+            bpf_link__destroy(probe_links[i]);
+            i++;
+        }
+        bpf_object__close(objects);
     }
-    bpf_object__close(objects);
 }
 
 /*****************************************************************

+ 8 - 6
collectors/ebpf.plugin/ebpf_process.c

@@ -934,13 +934,15 @@ static void ebpf_process_cleanup(void *ptr)
 
     freez(process_data.map_fd);
 
-    struct bpf_program *prog;
-    size_t i = 0 ;
-    bpf_object__for_each_program(prog, objects) {
-        bpf_link__destroy(probe_links[i]);
-        i++;
+    if (probe_links) {
+        struct bpf_program *prog;
+        size_t i = 0 ;
+        bpf_object__for_each_program(prog, objects) {
+            bpf_link__destroy(probe_links[i]);
+            i++;
+        }
+        bpf_object__close(objects);
     }
-    bpf_object__close(objects);
 }
 
 /*****************************************************************

+ 8 - 6
collectors/ebpf.plugin/ebpf_socket.c

@@ -1889,13 +1889,15 @@ static void ebpf_socket_cleanup(void *ptr)
 
     freez(socket_threads.thread);
 
-    struct bpf_program *prog;
-    size_t i = 0 ;
-    bpf_object__for_each_program(prog, objects) {
-        bpf_link__destroy(probe_links[i]);
-        i++;
+    if (probe_links) {
+        struct bpf_program *prog;
+        size_t i = 0 ;
+        bpf_object__for_each_program(prog, objects) {
+            bpf_link__destroy(probe_links[i]);
+            i++;
+        }
+        bpf_object__close(objects);
     }
-    bpf_object__close(objects);
     finalized_threads = 1;
 }
 

+ 8 - 6
collectors/ebpf.plugin/ebpf_swap.c

@@ -73,13 +73,15 @@ static void ebpf_swap_cleanup(void *ptr)
 
     freez(swap_vector);
 
-    struct bpf_program *prog;
-    size_t i = 0 ;
-    bpf_object__for_each_program(prog, objects) {
-        bpf_link__destroy(probe_links[i]);
-        i++;
+    if (probe_links) {
+        struct bpf_program *prog;
+        size_t i = 0 ;
+        bpf_object__for_each_program(prog, objects) {
+            bpf_link__destroy(probe_links[i]);
+            i++;
+        }
+        bpf_object__close(objects);
     }
-    bpf_object__close(objects);
 }
 
 /*****************************************************************