Loading include/linux/unix_diag.h +8 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,8 @@ struct unix_diag_req { __u32 udiag_cookie[2]; }; #define UDIAG_SHOW_NAME 0x00000001 /* show name (not path) */ struct unix_diag_msg { __u8 udiag_family; __u8 udiag_type; Loading @@ -21,4 +23,10 @@ struct unix_diag_msg { __u32 udiag_cookie[2]; }; enum { UNIX_DIAG_NAME, UNIX_DIAG_MAX, }; #endif net/unix/diag.c +20 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,22 @@ #define UNIX_DIAG_PUT(skb, attrtype, attrlen) \ RTA_DATA(__RTA_PUT(skb, attrtype, attrlen)) static int sk_diag_dump_name(struct sock *sk, struct sk_buff *nlskb) { struct unix_address *addr = unix_sk(sk)->addr; char *s; if (addr) { s = UNIX_DIAG_PUT(nlskb, UNIX_DIAG_NAME, addr->len - sizeof(short)); memcpy(s, addr->name->sun_path, addr->len - sizeof(short)); } return 0; rtattr_failure: return -EMSGSIZE; } static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_req *req, u32 pid, u32 seq, u32 flags, int sk_ino) { Loading @@ -28,6 +44,10 @@ static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_r rep->udiag_ino = sk_ino; sock_diag_save_cookie(sk, rep->udiag_cookie); if ((req->udiag_show & UDIAG_SHOW_NAME) && sk_diag_dump_name(sk, skb)) goto nlmsg_failure; nlh->nlmsg_len = skb_tail_pointer(skb) - b; return skb->len; Loading Loading
include/linux/unix_diag.h +8 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,8 @@ struct unix_diag_req { __u32 udiag_cookie[2]; }; #define UDIAG_SHOW_NAME 0x00000001 /* show name (not path) */ struct unix_diag_msg { __u8 udiag_family; __u8 udiag_type; Loading @@ -21,4 +23,10 @@ struct unix_diag_msg { __u32 udiag_cookie[2]; }; enum { UNIX_DIAG_NAME, UNIX_DIAG_MAX, }; #endif
net/unix/diag.c +20 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,22 @@ #define UNIX_DIAG_PUT(skb, attrtype, attrlen) \ RTA_DATA(__RTA_PUT(skb, attrtype, attrlen)) static int sk_diag_dump_name(struct sock *sk, struct sk_buff *nlskb) { struct unix_address *addr = unix_sk(sk)->addr; char *s; if (addr) { s = UNIX_DIAG_PUT(nlskb, UNIX_DIAG_NAME, addr->len - sizeof(short)); memcpy(s, addr->name->sun_path, addr->len - sizeof(short)); } return 0; rtattr_failure: return -EMSGSIZE; } static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_req *req, u32 pid, u32 seq, u32 flags, int sk_ino) { Loading @@ -28,6 +44,10 @@ static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_r rep->udiag_ino = sk_ino; sock_diag_save_cookie(sk, rep->udiag_cookie); if ((req->udiag_show & UDIAG_SHOW_NAME) && sk_diag_dump_name(sk, skb)) goto nlmsg_failure; nlh->nlmsg_len = skb_tail_pointer(skb) - b; return skb->len; Loading