forked from mirrors/linux
		
	This adds the ability for Netlink to report a socket's UID along with the
other UNIX diagnostic information that is already available. This will
allow diagnostic tools greater insight into which users control which
socket.
To test this, do the following as a non-root user:
    unshare -U -r bash
    nc -l -U user.socket.$$ &
.. and verify from within that same session that Netlink UNIX socket
diagnostics report the socket's UID as 0. Also verify that Netlink UNIX
socket diagnostics report the socket's UID as the user's UID from an
unprivileged process in a different session. Verify the same from
a root process.
Signed-off-by: Felipe Gasper <felipe@felipegasper.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
		
	
			
		
			
				
	
	
		
			61 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
 | 
						|
#ifndef __UNIX_DIAG_H__
 | 
						|
#define __UNIX_DIAG_H__
 | 
						|
 | 
						|
#include <linux/types.h>
 | 
						|
 | 
						|
struct unix_diag_req {
 | 
						|
	__u8	sdiag_family;
 | 
						|
	__u8	sdiag_protocol;
 | 
						|
	__u16	pad;
 | 
						|
	__u32	udiag_states;
 | 
						|
	__u32	udiag_ino;
 | 
						|
	__u32	udiag_show;
 | 
						|
	__u32	udiag_cookie[2];
 | 
						|
};
 | 
						|
 | 
						|
#define UDIAG_SHOW_NAME		0x00000001	/* show name (not path) */
 | 
						|
#define UDIAG_SHOW_VFS		0x00000002	/* show VFS inode info */
 | 
						|
#define UDIAG_SHOW_PEER		0x00000004	/* show peer socket info */
 | 
						|
#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_UID		0x00000040	/* show socket's UID */
 | 
						|
 | 
						|
struct unix_diag_msg {
 | 
						|
	__u8	udiag_family;
 | 
						|
	__u8	udiag_type;
 | 
						|
	__u8	udiag_state;
 | 
						|
	__u8	pad;
 | 
						|
 | 
						|
	__u32	udiag_ino;
 | 
						|
	__u32	udiag_cookie[2];
 | 
						|
};
 | 
						|
 | 
						|
enum {
 | 
						|
	/* UNIX_DIAG_NONE, standard nl API requires this attribute!  */
 | 
						|
	UNIX_DIAG_NAME,
 | 
						|
	UNIX_DIAG_VFS,
 | 
						|
	UNIX_DIAG_PEER,
 | 
						|
	UNIX_DIAG_ICONS,
 | 
						|
	UNIX_DIAG_RQLEN,
 | 
						|
	UNIX_DIAG_MEMINFO,
 | 
						|
	UNIX_DIAG_SHUTDOWN,
 | 
						|
	UNIX_DIAG_UID,
 | 
						|
 | 
						|
	__UNIX_DIAG_MAX,
 | 
						|
};
 | 
						|
 | 
						|
#define UNIX_DIAG_MAX (__UNIX_DIAG_MAX - 1)
 | 
						|
 | 
						|
struct unix_diag_vfs {
 | 
						|
	__u32	udiag_vfs_ino;
 | 
						|
	__u32	udiag_vfs_dev;
 | 
						|
};
 | 
						|
 | 
						|
struct unix_diag_rqlen {
 | 
						|
	__u32	udiag_rqueue;
 | 
						|
	__u32	udiag_wqueue;
 | 
						|
};
 | 
						|
 | 
						|
#endif
 |