]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
tools headers: Sync linux/socket.h with kernel sources
authorNamhyung Kim <namhyung@kernel.org>
Mon, 22 Dec 2025 22:57:15 +0000 (14:57 -0800)
committerNamhyung Kim <namhyung@kernel.org>
Wed, 24 Dec 2025 19:43:29 +0000 (11:43 -0800)
To pick up changes from:

  d73c167708739137 ("socket: Split out a getsockname helper for io_uring")
  4677e78800bbde62 ("socket: Unify getsockname and getpeername implementation")
  bf33247a90d3e85d ("net: Add struct sockaddr_unsized for sockaddr of unknown length")

This should be used to beautify socket syscall arguments and it addresses
these tools/perf build warnings:

  Warning: Kernel ABI header differences:
    diff -u tools/perf/trace/beauty/include/linux/socket.h include/linux/socket.h

Please see tools/include/uapi/README.

Cc: netdev@vger.kernel.org
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/trace/beauty/include/linux/socket.h

index 77d7c59f5d8b1cb2466ac7890147ca81ac7289df..ec715ad4bf25f5f759d2cab3c6b796fed84df932 100644 (file)
@@ -32,11 +32,29 @@ typedef __kernel_sa_family_t        sa_family_t;
  *     1003.1g requires sa_family_t and that sa_data is char.
  */
 
+/* Deprecated for in-kernel use. Use struct sockaddr_unsized instead. */
 struct sockaddr {
        sa_family_t     sa_family;      /* address family, AF_xxx       */
        char            sa_data[14];    /* 14 bytes of protocol address */
 };
 
+/**
+ * struct sockaddr_unsized - Unspecified size sockaddr for callbacks
+ * @sa_family: Address family (AF_UNIX, AF_INET, AF_INET6, etc.)
+ * @sa_data: Flexible array for address data
+ *
+ * This structure is designed for callback interfaces where the
+ * total size is known via the sockaddr_len parameter. Unlike struct
+ * sockaddr which has a fixed 14-byte sa_data limit or struct
+ * sockaddr_storage which has a fixed 128-byte sa_data limit, this
+ * structure can accommodate addresses of any size, but must be used
+ * carefully.
+ */
+struct sockaddr_unsized {
+       __kernel_sa_family_t    sa_family;      /* address family, AF_xxx */
+       char                    sa_data[];      /* flexible address data */
+};
+
 struct linger {
        int             l_onoff;        /* Linger active                */
        int             l_linger;       /* How long to linger for       */
@@ -450,10 +468,10 @@ extern int __sys_connect(int fd, struct sockaddr __user *uservaddr,
                         int addrlen);
 extern int __sys_listen(int fd, int backlog);
 extern int __sys_listen_socket(struct socket *sock, int backlog);
+extern int do_getsockname(struct socket *sock, int peer,
+                         struct sockaddr __user *usockaddr, int __user *usockaddr_len);
 extern int __sys_getsockname(int fd, struct sockaddr __user *usockaddr,
-                            int __user *usockaddr_len);
-extern int __sys_getpeername(int fd, struct sockaddr __user *usockaddr,
-                            int __user *usockaddr_len);
+                            int __user *usockaddr_len, int peer);
 extern int __sys_socketpair(int family, int type, int protocol,
                            int __user *usockvec);
 extern int __sys_shutdown_sock(struct socket *sock, int how);