All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cyrill Gorcunov <gorcunov@gmail.com>
To: NETDEV <netdev@vger.kernel.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Andrey Vagin <avagin@openvz.org>,
	"David S. Miller" <davem@davemloft.net>,
	Pavel Emelyanov <xemul@virtuozzo.com>
Subject: [RFC] net/unix_diag: Provide UDIAG_SHOW_VFS2 attribute to fetch complete inode number
Date: Wed, 25 Oct 2017 00:48:14 +0300	[thread overview]
Message-ID: <20171024214814.GO5343@uranus> (raw)

Currently unix_diag_vfs structure reports unix socket inode
as u32 value which of course doesn't fit to ino_t type and
the number may be trimmed. Lets rather deprecate old UDIAG_SHOW_VFS
interface and provide UDIAG_SHOW_VFS2 (with one field "__zero" reserved
which we could extend in future).

CC: Andrey Vagin <avagin@openvz.org>
CC: David S. Miller <davem@davemloft.net>
CC: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
---

I build-tested it only thus not for inclusion yet, but rather
to discuss if there some better way to handle this potential
problem.

 include/uapi/linux/unix_diag.h |    8 ++++++++
 net/unix/diag.c                |   25 ++++++++++++++++---------
 2 files changed, 24 insertions(+), 9 deletions(-)

Index: linux-ml.git/include/uapi/linux/unix_diag.h
===================================================================
--- linux-ml.git.orig/include/uapi/linux/unix_diag.h
+++ linux-ml.git/include/uapi/linux/unix_diag.h
@@ -19,6 +19,7 @@ struct unix_diag_req {
 #define UDIAG_SHOW_ICONS	0x00000008	/* show pending connections */
 #define UDIAG_SHOW_RQLEN	0x00000010	/* show skb receive queue len */
 #define UDIAG_SHOW_MEMINFO	0x00000020	/* show memory info of a socket */
+#define UDIAG_SHOW_VFS2		0x00000040	/* show VFS inode info v2 */
 
 struct unix_diag_msg {
 	__u8	udiag_family;
@@ -39,6 +40,7 @@ enum {
 	UNIX_DIAG_RQLEN,
 	UNIX_DIAG_MEMINFO,
 	UNIX_DIAG_SHUTDOWN,
+	UNIX_DIAG_VFS2,
 
 	__UNIX_DIAG_MAX,
 };
@@ -50,6 +52,12 @@ struct unix_diag_vfs {
 	__u32	udiag_vfs_dev;
 };
 
+struct unix_diag_vfs2 {
+	__u64	udiag_vfs_ino;
+	__u32	udiag_vfs_dev;
+	__u32	__zero;		/* Reserve for future use */
+};
+
 struct unix_diag_rqlen {
 	__u32	udiag_rqueue;
 	__u32	udiag_wqueue;
Index: linux-ml.git/net/unix/diag.c
===================================================================
--- linux-ml.git.orig/net/unix/diag.c
+++ linux-ml.git/net/unix/diag.c
@@ -19,17 +19,24 @@ static int sk_diag_dump_name(struct sock
 		       addr->name->sun_path);
 }
 
-static int sk_diag_dump_vfs(struct sock *sk, struct sk_buff *nlskb)
+static int sk_diag_dump_vfs(struct sock *sk, struct sk_buff *nlskb, unsigned int flags)
 {
 	struct dentry *dentry = unix_sk(sk)->path.dentry;
 
 	if (dentry) {
-		struct unix_diag_vfs uv = {
-			.udiag_vfs_ino = d_backing_inode(dentry)->i_ino,
-			.udiag_vfs_dev = dentry->d_sb->s_dev,
-		};
-
-		return nla_put(nlskb, UNIX_DIAG_VFS, sizeof(uv), &uv);
+		if (flags & UDIAG_SHOW_VFS2) {
+			struct unix_diag_vfs uv = {
+				.udiag_vfs_ino = d_backing_inode(dentry)->i_ino,
+				.udiag_vfs_dev = dentry->d_sb->s_dev,
+			};
+			return nla_put(nlskb, UNIX_DIAG_VFS, sizeof(uv), &uv);
+		} else {
+			struct unix_diag_vfs2 uv = {
+				.udiag_vfs_ino = d_backing_inode(dentry)->i_ino,
+				.udiag_vfs_dev = dentry->d_sb->s_dev,
+			};
+			return nla_put(nlskb, UDIAG_SHOW_VFS2, sizeof(uv), &uv);
+		}
 	}
 
 	return 0;
@@ -132,8 +139,8 @@ static int sk_diag_fill(struct sock *sk,
 	    sk_diag_dump_name(sk, skb))
 		goto out_nlmsg_trim;
 
-	if ((req->udiag_show & UDIAG_SHOW_VFS) &&
-	    sk_diag_dump_vfs(sk, skb))
+	if ((req->udiag_show & (UDIAG_SHOW_VFS | UDIAG_SHOW_VFS2)) &&
+	    sk_diag_dump_vfs(sk, skb, req->udiag_show))
 		goto out_nlmsg_trim;
 
 	if ((req->udiag_show & UDIAG_SHOW_PEER) &&

             reply	other threads:[~2017-10-24 21:48 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-24 21:48 Cyrill Gorcunov [this message]
2017-10-25  0:25 ` [RFC] net/unix_diag: Provide UDIAG_SHOW_VFS2 attribute to fetch complete inode number Andrei Vagin
2017-10-25  7:27   ` Cyrill Gorcunov
2017-10-25 13:55 ` Roman Mashak
2017-10-25 14:02   ` Cyrill Gorcunov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171024214814.GO5343@uranus \
    --to=gorcunov@gmail.com \
    --cc=avagin@openvz.org \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=xemul@virtuozzo.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.