Browse Source

added memmove, memcmp to the list of function changed to BTF_FUNC_STATIC

Signed-off-by: Quentin JEROME <[email protected]>
Quentin JEROME 1 year ago
parent
commit
72c1572
1 changed files with 35 additions and 28 deletions
  1. 35 28
      aya-obj/src/btf/btf.rs

+ 35 - 28
aya-obj/src/btf/btf.rs

@@ -544,7 +544,12 @@ impl Btf {
                         let typedef_type =
                             BtfType::Typedef(Typedef::new(ty.name_offset, ty.btf_type));
                         types.types[i] = typedef_type;
-                    } else if !features.btf_func_global || name == "memset" || name == "memcpy" {
+                    } else if !features.btf_func_global
+                        || name == "memset"
+                        || name == "memcpy"
+                        || name == "memmove"
+                        || name == "memcmp"
+                    {
                         // Sanitize BTF_FUNC_GLOBAL and memset, memcpy
                         let mut fixed_ty = ty.clone();
                         if ty.linkage() == FuncLinkage::Global {
@@ -1359,7 +1364,7 @@ mod tests {
     }
 
     #[test]
-    fn test_sanitize_memset_memcpy() {
+    fn test_sanitize_mem_builtins() {
         let mut btf = Btf::new();
         let name_offset = btf.add_string("int".to_string());
         let int_type_id = btf.add_type(BtfType::Int(Int::new(
@@ -1382,33 +1387,35 @@ mod tests {
         let func_proto_type_id =
             btf.add_type(BtfType::FuncProto(FuncProto::new(params, int_type_id)));
 
-        ["memset", "memcpy"].iter().for_each(|fname| {
-            let func_name_offset = btf.add_string(fname.to_string());
-            let func_type_id = btf.add_type(BtfType::Func(Func::new(
-                func_name_offset,
-                func_proto_type_id,
-                FuncLinkage::Global,
-            )));
-
-            let features = BtfFeatures {
-                btf_func: true,
-                btf_func_global: true, // to force function name check
-                ..Default::default()
-            };
-
-            btf.fixup_and_sanitize(&HashMap::new(), &HashMap::new(), &features)
-                .unwrap();
-
-            if let BtfType::Func(fixed) = btf.type_by_id(func_type_id).unwrap() {
-                assert!(fixed.linkage() == FuncLinkage::Static);
-            } else {
-                panic!("not a func")
-            }
+        ["memset", "memcpy", "memcmp", "memmove"]
+            .iter()
+            .for_each(|fname| {
+                let func_name_offset = btf.add_string(fname.to_string());
+                let func_type_id = btf.add_type(BtfType::Func(Func::new(
+                    func_name_offset,
+                    func_proto_type_id,
+                    FuncLinkage::Global,
+                )));
+
+                let features = BtfFeatures {
+                    btf_func: true,
+                    btf_func_global: true, // to force function name check
+                    ..Default::default()
+                };
+
+                btf.fixup_and_sanitize(&HashMap::new(), &HashMap::new(), &features)
+                    .unwrap();
+
+                if let BtfType::Func(fixed) = btf.type_by_id(func_type_id).unwrap() {
+                    assert!(fixed.linkage() == FuncLinkage::Static);
+                } else {
+                    panic!("not a func")
+                }
 
-            // Ensure we can convert to bytes and back again
-            let raw = btf.to_bytes();
-            Btf::parse(&raw, Endianness::default()).unwrap();
-        });
+                // Ensure we can convert to bytes and back again
+                let raw = btf.to_bytes();
+                Btf::parse(&raw, Endianness::default()).unwrap();
+            });
     }
 
     #[test]