@@ -19,6 +19,7 @@ use std::fs;
1919use std:: hint;
2020use std:: io;
2121use std:: io:: Read ;
22+ use std:: iter:: zip;
2223use std:: mem:: size_of;
2324use std:: mem:: size_of_val;
2425use std:: os:: unix:: io:: AsFd ;
@@ -37,6 +38,7 @@ use std::sync::mpsc::channel;
3738use std:: time:: Duration ;
3839
3940use libbpf_rs:: num_possible_cpus;
41+ use libbpf_rs:: query:: KprobeMultiLinkInfo ;
4042use libbpf_rs:: query:: LinkTypeInfo ;
4143use libbpf_rs:: query:: PerfEventType ;
4244use libbpf_rs:: query:: ProgInfoIter ;
@@ -1854,16 +1856,47 @@ fn test_object_kprobe_multi_with_opts() {
18541856 let mut obj = open_obj. load ( ) . expect ( "failed to load object" ) ;
18551857 let prog = get_prog_mut ( & mut obj, "handle__kprobe" ) ;
18561858
1859+ let syms_opt = vec ! [
1860+ "bpf_fentry_test1" . to_string( ) ,
1861+ "bpf_fentry_test2" . to_string( ) ,
1862+ ] ;
1863+ let cookies_opt = vec ! [ 6 , 7 ] ;
18571864 let opts = KprobeMultiOpts {
1858- symbols : vec ! [
1859- "bpf_fentry_test1" . to_string( ) ,
1860- "bpf_fentry_test2" . to_string( ) ,
1861- ] ,
1865+ symbols : syms_opt. clone ( ) ,
1866+ cookies : cookies_opt. clone ( ) ,
18621867 ..Default :: default ( )
18631868 } ;
1864- let _link = prog
1869+
1870+ let link = prog
18651871 . attach_kprobe_multi_with_opts ( opts)
18661872 . expect ( "failed to attach prog" ) ;
1873+
1874+ let link_info = link. info ( ) . expect ( "failed to get kprobe_multi link info" ) ;
1875+ let LinkTypeInfo :: KprobeMulti ( kprobe_multi) = link_info. info else {
1876+ panic ! (
1877+ "Expected LinkTypeInfo::KprobeMulti for kprobe_multi, got: {:?}" ,
1878+ link_info. info
1879+ ) ;
1880+ } ;
1881+
1882+ let KprobeMultiLinkInfo {
1883+ count,
1884+ addrs,
1885+ cookies,
1886+ ..
1887+ } = kprobe_multi;
1888+ assert_eq ! ( count, syms_opt. len( ) as u32 ) ;
1889+ for ( actual, sym) in zip ( addrs, syms_opt) {
1890+ let Some ( expected) = common:: resolve_ksym_addr ( & sym) else {
1891+ // requires reading `/proc/kallsyms`
1892+ break ;
1893+ } ;
1894+
1895+ assert_eq ! ( actual, expected) ;
1896+ }
1897+ for ( actual, expected) in zip ( cookies, cookies_opt) {
1898+ assert_eq ! ( actual, expected) ;
1899+ }
18671900}
18681901
18691902/// Check that we can attach a BPF program to a kernel tracepoint.
0 commit comments