@@ -1833,10 +1833,11 @@ static __always_inline int handle_unix_event(void *ctx, const struct SOCK_EVENT_
18331833 struct msghdr * msg ;
18341834 struct sock * sock ;
18351835 struct unix_sock * unix_sock ;
1836+ struct sockaddr_un * sunaddr ;
18361837 struct SOCK_INFO * sinfo ;
18371838 struct SOCK_QUEUE sq = {0 };
18381839 struct STATS * s ;
1839- char comm [ TASK_COMM_LEN ] = {0 };
1840+ char path [ UNIX_PATH_MAX ] = {0 };
18401841 char * data ;
18411842 __u32 data_len ;
18421843 __u16 family ;
@@ -1871,16 +1872,20 @@ static __always_inline int handle_unix_event(void *ctx, const struct SOCK_EVENT_
18711872 isrx = event -> isrx ;
18721873 func = event -> func ;
18731874
1874- /* get unix socket and check syslog sockets */
1875+ /* get unix socket and path */
18751876 if (isrx )
18761877 unix_sock = (struct unix_sock * )sock ;
18771878 else
18781879 unix_sock = (struct unix_sock * )BPF_CORE_READ ((struct unix_sock * )sock , peer );
1879- bpf_probe_read_kernel_str (comm , sizeof (comm ), BPF_CORE_READ (task , mm , exe_file , f_path .dentry , d_name .name ));
1880- if (__builtin_memcmp (BPF_CORE_READ (unix_sock , addr , name [0 ].sun_path ), SYSLOG_DEVLOG_SOCKET ,
1881- sizeof (SYSLOG_DEVLOG_SOCKET )) &&
1882- __builtin_memcmp (BPF_CORE_READ (unix_sock , addr , name [0 ].sun_path ), SYSLOG_JOURNAL_SOCKET ,
1883- sizeof (SYSLOG_JOURNAL_SOCKET )))
1880+ bpf_probe_read_kernel_str (& path , sizeof (path ), BPF_CORE_READ (unix_sock , addr , name [0 ].sun_path ));
1881+ if (!path [0 ]) {
1882+ sunaddr = (struct sockaddr_un * )BPF_CORE_READ (msg , msg_name );
1883+ bpf_probe_read_kernel_str (& path , sizeof (path ), BPF_CORE_READ (sunaddr , sun_path ));
1884+ }
1885+
1886+ /* check for syslog sockets */
1887+ if (__builtin_memcmp (path , SYSLOG_DEVLOG_SOCKET , sizeof (SYSLOG_DEVLOG_SOCKET )) &&
1888+ __builtin_memcmp (path , SYSLOG_JOURNAL_SOCKET , sizeof (SYSLOG_JOURNAL_SOCKET )))
18841889 return 0 ;
18851890
18861891 /* clean expired records */
@@ -1984,7 +1989,7 @@ static __always_inline int handle_unix_event(void *ctx, const struct SOCK_EVENT_
19841989 BPF_CORE_READ (task , mm , exe_file , f_path .dentry , d_name .name ));
19851990 bpf_probe_read_kernel_str (& sinfo -> comm_parent , sizeof (sinfo -> comm_parent ),
19861991 BPF_CORE_READ (task , real_parent , mm , exe_file , f_path .dentry , d_name .name ));
1987- bpf_probe_read_kernel_str (& sinfo -> addr , sizeof (sinfo -> addr ), BPF_CORE_READ ( unix_sock , addr , name [ 0 ]. sun_path ) );
1992+ bpf_probe_read_kernel_str (& sinfo -> addr , sizeof (sinfo -> addr ), path );
19881993 sinfo -> ts_proc = BPF_CORE_READ (task , start_time );
19891994 sinfo -> family = family ;
19901995 sinfo -> proto = 0 ;
@@ -2047,7 +2052,7 @@ static __always_inline int handle_unix_event(void *ctx, const struct SOCK_EVENT_
20472052 bpf_printk ("HANDLE_UNIX_EVENT: %s" , func );
20482053 bpf_printk (" PID: %u KEY: %lx STATE: %u" , pid , key , sinfo -> state );
20492054 bpf_printk (" TX: %u RX: %u" , isrx ? 0 : data_len , isrx ? data_len : 0 );
2050- bpf_printk (" ADDRESS: %s" , BPF_CORE_READ ( unix_sock , addr , name [ 0 ]. sun_path ) );
2055+ bpf_printk (" ADDRESS: %s" , sinfo -> addr );
20512056 bpf_printk (" MESSAGE[%u]: '%s' LEN: %u" , num , sinfo -> app_msg .data [num ], sinfo -> app_msg .len [num ]);
20522057 bpf_printk (" TOTAL: TX %lu RX %lu\n" , sinfo -> tx_bytes , sinfo -> rx_bytes );
20532058
0 commit comments