diff mbox

unix: show socket peer if no addr is given in /proc/net/unix

Message ID 1389158288-2855-1-git-send-email-yamato@redhat.com
State Rejected, archived
Delegated to: David Miller
Headers show

Commit Message

Masatake YAMATO Jan. 8, 2014, 5:18 a.m. UTC
Path field of /proc/net/unix is empty if an address is not given
to a socket. Typical way to create such socket is calling
socketpair. The empty fields make it difficult to understand the
communication between processes. e.g. lsof cannot resolve the role of
file descriptors well.

This patch fills the empty fields with unix_peer.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
---
 net/unix/af_unix.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

David Miller Jan. 8, 2014, 6 a.m. UTC | #1
From: Masatake YAMATO <yamato@redhat.com>
Date: Wed,  8 Jan 2014 14:18:08 +0900

> Path field of /proc/net/unix is empty if an address is not given
> to a socket. Typical way to create such socket is calling
> socketpair. The empty fields make it difficult to understand the
> communication between processes. e.g. lsof cannot resolve the role of
> file descriptors well.
> 
> This patch fills the empty fields with unix_peer.
> 
> Signed-off-by: Masatake YAMATO <yamato@redhat.com>

You cannot change the format of a procfs file without potentially
breaking some application which might interpret the output.

In this case an application might be looking for an empty field
as meaning the sockhad has no given address.

I cannot apply this patch.  People have repeatedly tried making
changes to these networking socket procfs files, and I really wish
people would stop trying to do so.

If you want specific pieces of new information, extend the socket
dumping facility that is actually extensible in a way which will not
break existing applications, and that's netlink.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Masatake YAMATO Jan. 8, 2014, 6:50 a.m. UTC | #2
Thank you for reviwing.
I'll use netlink diag facility.

Masatake YAMATO

On Wed, 08 Jan 2014 01:00:43 -0500 (EST), David Miller <davem@davemloft.net> wrote:
> From: Masatake YAMATO <yamato@redhat.com>
> Date: Wed,  8 Jan 2014 14:18:08 +0900
> 
>> Path field of /proc/net/unix is empty if an address is not given
>> to a socket. Typical way to create such socket is calling
>> socketpair. The empty fields make it difficult to understand the
>> communication between processes. e.g. lsof cannot resolve the role of
>> file descriptors well.
>> 
>> This patch fills the empty fields with unix_peer.
>> 
>> Signed-off-by: Masatake YAMATO <yamato@redhat.com>
> 
> You cannot change the format of a procfs file without potentially
> breaking some application which might interpret the output.
> 
> In this case an application might be looking for an empty field
> as meaning the sockhad has no given address.
> 
> I cannot apply this patch.  People have repeatedly tried making
> changes to these networking socket procfs files, and I really wish
> people would stop trying to do so.
> 
> If you want specific pieces of new information, extend the socket
> dumping facility that is actually extensible in a way which will not
> break existing applications, and that's netlink.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sergei Shtylyov Jan. 8, 2014, 10:19 p.m. UTC | #3
Hello.

On 01/08/2014 08:18 AM, Masatake YAMATO wrote:

> Path field of /proc/net/unix is empty if an address is not given
> to a socket. Typical way to create such socket is calling
> socketpair. The empty fields make it difficult to understand the
> communication between processes. e.g. lsof cannot resolve the role of
> file descriptors well.

> This patch fills the empty fields with unix_peer.

> Signed-off-by: Masatake YAMATO <yamato@redhat.com>
> ---
>   net/unix/af_unix.c | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)

> diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
> index 800ca61..1700133 100644
> --- a/net/unix/af_unix.c
> +++ b/net/unix/af_unix.c
> @@ -2340,7 +2340,9 @@ static int unix_seq_show(struct seq_file *seq, void *v)
>   	else {
>   		struct sock *s = v;
>   		struct unix_sock *u = unix_sk(s);
> +		struct sock *s_peer;
>   		unix_state_lock(s);
> +		s_peer = unix_peer(s);
>
>   		seq_printf(seq, "%pK: %08X %08X %08X %04X %02X %5lu",
>   			s,
> @@ -2367,7 +2369,8 @@ static int unix_seq_show(struct seq_file *seq, void *v)
>   			}
>   			for ( ; i < len; i++)
>   				seq_putc(seq, u->addr->name->sun_path[i]);
> -		}
> +		} else if (s_peer)
> +			seq_printf(seq, " #%pK", s_peer);

    According to Documentation/CodingStyle, both arms of the *if* statement 
should have {} if one has it.

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index 800ca61..1700133 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -2340,7 +2340,9 @@  static int unix_seq_show(struct seq_file *seq, void *v)
 	else {
 		struct sock *s = v;
 		struct unix_sock *u = unix_sk(s);
+		struct sock *s_peer;
 		unix_state_lock(s);
+		s_peer = unix_peer(s);
 
 		seq_printf(seq, "%pK: %08X %08X %08X %04X %02X %5lu",
 			s,
@@ -2367,7 +2369,8 @@  static int unix_seq_show(struct seq_file *seq, void *v)
 			}
 			for ( ; i < len; i++)
 				seq_putc(seq, u->addr->name->sun_path[i]);
-		}
+		} else if (s_peer)
+			seq_printf(seq, " #%pK", s_peer);
 		unix_state_unlock(s);
 		seq_putc(seq, '\n');
 	}