Browse Source

- comment changed to be more precise
- adapted test to be more readable

Signed-off-by: Quentin JEROME <[email protected]>

Quentin JEROME 1 year ago
parent
commit
1464bdc1d4
1 changed files with 32 additions and 29 deletions
  1. 32 29
      aya-obj/src/btf/btf.rs

+ 32 - 29
aya-obj/src/btf/btf.rs

@@ -550,7 +550,11 @@ impl Btf {
                         || name == "memmove"
                         || name == "memcmp"
                     {
-                        // Sanitize BTF_FUNC_GLOBAL and memset, memcpy
+                        // Sanitize BTF_FUNC_GLOBAL when not supported and ensure that
+                        // memory builtins are marked as static. Globals are type checked
+                        // and verified separately from their callers, while instead we
+                        // want tracking info (eg bound checks) to be propagated to the
+                        // memory builtins.
                         let mut fixed_ty = ty.clone();
                         if ty.linkage() == FuncLinkage::Global {
                             if !features.btf_func_global {
@@ -1387,35 +1391,34 @@ mod tests {
         let func_proto_type_id =
             btf.add_type(BtfType::FuncProto(FuncProto::new(params, int_type_id)));
 
-        ["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")
-                }
+        let builtins = ["memset", "memcpy", "memcmp", "memmove"];
+        for fname in builtins {
+            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()
+            };
 
-                // Ensure we can convert to bytes and back again
-                let raw = btf.to_bytes();
-                Btf::parse(&raw, Endianness::default()).unwrap();
-            });
+            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();
+        }
     }
 
     #[test]