From 7c0ec6288b497fc4dd190e243141a8d429488fd2 Mon Sep 17 00:00:00 2001 From: Sebastian Andrzej Siewior Date: Tue, 1 Sep 2026 18:03:45 +0200 Subject: [PATCH] net: Replace %pK output with 0 Commit 71338aa7d050c ("net: convert %p usage to %pK") which is from 2011 and changed the %p annotation for pointer to %pK. Back then the default behaviour for %p was to print the pointer. The %pK modifier was introduced to able to control the behaviour of specific pointer values without changing the behaviour of %p for everyone. It was dedicated to avoid leaking pointers via /proc. There was also the idea to remove the check from formatting the string and move to the open callback with some helpers but this did not happen. Things changed over time. The default behaviour for %p is now to print a hash pointer which does not leak the address but allows to correlate if two pointers are equal. The policy on %p is to not introduce new ones. This is somehow in between since it already exists. The pointer are usually socket pointers and I don't see any value in exposing them. Therefore I am following the recommendation of removing them. Since their usage in /proc/ can be considered ABI I replace the pointer with a 0. Replace the %pK annotation with 0 value. Correct the spacing for the cases where pointer is at the beginning. Reviewed-by: Kees Cook Signed-off-by: Sebastian Andrzej Siewior Link: https://patch.msgid.link/20260901160345.eeknHmY2@linutronix.de Signed-off-by: Jakub Kicinski --- Documentation/networking/proc_net_tcp.rst | 20 ++++++++++---------- net/atm/proc.c | 7 +++---- net/ipv4/ping.c | 5 ++--- net/ipv4/raw.c | 4 ++-- net/ipv4/tcp_ipv4.c | 13 ++++++------- net/ipv4/udp.c | 5 ++--- net/ipv6/datagram.c | 5 ++--- net/ipv6/tcp_ipv6.c | 12 ++++++------ net/key/af_key.c | 5 ++--- net/netlink/af_netlink.c | 5 ++--- net/packet/af_packet.c | 7 ++----- net/phonet/socket.c | 5 ++--- net/sctp/proc.c | 6 +++--- net/unix/af_unix.c | 3 +-- 14 files changed, 45 insertions(+), 57 deletions(-) diff --git a/Documentation/networking/proc_net_tcp.rst b/Documentation/networking/proc_net_tcp.rst index 7d9dfe36af45..4fa2e58429b9 100644 --- a/Documentation/networking/proc_net_tcp.rst +++ b/Documentation/networking/proc_net_tcp.rst @@ -30,16 +30,16 @@ up into 3 parts because of the length of the line):: | |----------------------> receive-queue |-------------------------------> transmit-queue - 1000 0 54165785 4 cd1e6040 25 4 27 3 -1 - | | | | | | | | | |--> slow start size threshold, - | | | | | | | | | or -1 if the threshold - | | | | | | | | | is >= 0xFFFF - | | | | | | | | |----> sending congestion window - | | | | | | | |-------> (ack.quick<<1)|ack.pingpong - | | | | | | |---------> Predicted tick of soft clock - | | | | | | (delayed ACK control data) - | | | | | |------------> retransmit timeout - | | | | |------------------> location of socket in memory + 1000 0 54165785 4 0 25 4 27 3 -1 + | | | | | | | | | |-------> slow start size threshold, + | | | | | | | | | or -1 if the threshold + | | | | | | | | | is >= 0xFFFF + | | | | | | | | |---------> sending congestion window + | | | | | | | |------------> (ack.quick<<1)|ack.pingpong + | | | | | | |--------------> Predicted tick of soft clock + | | | | | | (delayed ACK control data) + | | | | | |-----------------> retransmit timeout + | | | | |--------------------> always 0 (was memory location). | | | |-----------------------> socket reference count | | |-----------------------------> inode | |----------------------------------> unanswered 0-window probes diff --git a/net/atm/proc.c b/net/atm/proc.c index 8f20b49b9c02..ca0fc6b90998 100644 --- a/net/atm/proc.c +++ b/net/atm/proc.c @@ -159,7 +159,7 @@ static void vcc_info(struct seq_file *seq, struct atm_vcc *vcc) { struct sock *sk = sk_atm(vcc); - seq_printf(seq, "%pK ", vcc); + seq_puts(seq, " 0 "); if (!vcc->dev) seq_printf(seq, "Unassigned "); else @@ -228,9 +228,8 @@ static const struct seq_operations pvc_seq_ops = { static int vcc_seq_show(struct seq_file *seq, void *v) { if (v == SEQ_START_TOKEN) { - seq_printf(seq, sizeof(void *) == 4 ? "%-8s%s" : "%-16s%s", - "Address ", "Itf VPI VCI Fam Flags Reply " - "Send buffer Recv buffer [refcnt]\n"); + seq_puts(seq, "Address Itf VPI VCI Fam Flags Reply " + "Send buffer Recv buffer [refcnt]\n"); } else { struct vcc_state *state = seq->private; struct atm_vcc *vcc = atm_sk(state->sk); diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c index d36f1e273fde..223a0108b74c 100644 --- a/net/ipv4/ping.c +++ b/net/ipv4/ping.c @@ -1095,15 +1095,14 @@ static void ping_v4_format_sock(struct sock *sp, struct seq_file *f, __u16 srcp = ntohs(inet->inet_sport); seq_printf(f, "%5d: %08X:%04X %08X:%04X" - " %02X %08X:%08X %02X:%08lX %08X %5u %8d %llu %d %pK %u", + " %02X %08X:%08X %02X:%08lX %08X %5u %8d %llu %d 0 %u", bucket, src, srcp, dest, destp, sp->sk_state, sk_wmem_alloc_get(sp), sk_rmem_alloc_get(sp), 0, 0L, 0, from_kuid_munged(seq_user_ns(f), sk_uid(sp)), 0, sock_i_ino(sp), - refcount_read(&sp->sk_refcnt), sp, - sk_drops_read(sp)); + refcount_read(&sp->sk_refcnt), sk_drops_read(sp)); } static int ping_v4_seq_show(struct seq_file *seq, void *v) diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index d756e5e31b90..9d01006d8189 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c @@ -1054,14 +1054,14 @@ static void raw_sock_seq_show(struct seq_file *seq, struct sock *sp, int i) srcp = inet->inet_num; seq_printf(seq, "%4d: %08X:%04X %08X:%04X" - " %02X %08X:%08X %02X:%08lX %08X %5u %8d %llu %d %pK %u\n", + " %02X %08X:%08X %02X:%08lX %08X %5u %8d %llu %d 0 %u\n", i, src, srcp, dest, destp, sp->sk_state, sk_wmem_alloc_get(sp), sk_rmem_alloc_get(sp), 0, 0L, 0, from_kuid_munged(seq_user_ns(seq), sk_uid(sp)), 0, sock_i_ino(sp), - refcount_read(&sp->sk_refcnt), sp, sk_drops_read(sp)); + refcount_read(&sp->sk_refcnt), sk_drops_read(sp)); } static int raw_seq_show(struct seq_file *seq, void *v) diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 9f053eb8b46e..142e7b048229 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -2748,7 +2748,7 @@ static void get_openreq4(const struct request_sock *req, long delta = req->rsk_timer.expires - jiffies; seq_printf(f, "%4d: %08X:%04X %08X:%04X" - " %02X %08X:%08X %02X:%08lX %08X %5u %8d %u %d %pK", + " %02X %08X:%08X %02X:%08lX %08X %5u %8d %u %d 0", i, ireq->ir_loc_addr, ireq->ir_num, @@ -2763,8 +2763,7 @@ static void get_openreq4(const struct request_sock *req, sk_uid(req->rsk_listener)), 0, /* non standard timer */ 0, /* open_requests have no inode */ - 0, - req); + 0); } static void get_tcp4_sock(struct sock *sk, struct seq_file *f, int i) @@ -2811,7 +2810,7 @@ static void get_tcp4_sock(struct sock *sk, struct seq_file *f, int i) READ_ONCE(tp->copied_seq), 0); seq_printf(f, "%4d: %08X:%04X %08X:%04X %02X %08X:%08X %02X:%08lX " - "%08X %5u %8d %llu %d %pK %lu %lu %u %u %d", + "%08X %5u %8d %llu %d 0 %lu %lu %u %u %d", i, src, srcp, dest, destp, state, READ_ONCE(tp->write_seq) - tp->snd_una, rx_queue, @@ -2821,7 +2820,7 @@ static void get_tcp4_sock(struct sock *sk, struct seq_file *f, int i) from_kuid_munged(seq_user_ns(f), sk_uid(sk)), READ_ONCE(icsk->icsk_probes_out), sock_i_ino(sk), - refcount_read(&sk->sk_refcnt), sk, + refcount_read(&sk->sk_refcnt), jiffies_to_clock_t(icsk->icsk_rto), jiffies_to_clock_t(icsk->icsk_ack.ato), (icsk->icsk_ack.quick << 1) | inet_csk_in_pingpong_mode(sk), @@ -2844,10 +2843,10 @@ static void get_timewait4_sock(const struct inet_timewait_sock *tw, srcp = ntohs(tw->tw_sport); seq_printf(f, "%4d: %08X:%04X %08X:%04X" - " %02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %pK", + " %02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d 0", i, src, srcp, dest, destp, READ_ONCE(tw->tw_substate), 0, 0, 3, jiffies_delta_to_clock_t(delta), 0, 0, 0, 0, - refcount_read(&tw->tw_refcnt), tw); + refcount_read(&tw->tw_refcnt)); } #define TMPSZ 150 diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index af9603217444..a01db598c00b 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -3283,15 +3283,14 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f, __u16 srcp = ntohs(inet->inet_sport); seq_printf(f, "%5d: %08X:%04X %08X:%04X" - " %02X %08X:%08X %02X:%08lX %08X %5u %8d %llu %d %pK %u", + " %02X %08X:%08X %02X:%08lX %08X %5u %8d %llu %d 0 %u", bucket, src, srcp, dest, destp, sp->sk_state, sk_wmem_alloc_get(sp), udp_rqueue_get(sp), 0, 0L, 0, from_kuid_munged(seq_user_ns(f), sk_uid(sp)), 0, sock_i_ino(sp), - refcount_read(&sp->sk_refcnt), sp, - sk_drops_read(sp)); + refcount_read(&sp->sk_refcnt), sk_drops_read(sp)); } static int udp4_seq_show(struct seq_file *seq, void *v) diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c index 38d7b4845281..191c9733ff9f 100644 --- a/net/ipv6/datagram.c +++ b/net/ipv6/datagram.c @@ -1102,7 +1102,7 @@ void __ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp, src = &sp->sk_v6_rcv_saddr; seq_printf(seq, "%5d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X " - "%02X %08X:%08X %02X:%08lX %08X %5u %8d %llu %d %pK %u\n", + "%02X %08X:%08X %02X:%08lX %08X %5u %8d %llu %d 0 %u\n", bucket, src->s6_addr32[0], src->s6_addr32[1], src->s6_addr32[2], src->s6_addr32[3], srcp, @@ -1115,6 +1115,5 @@ void __ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp, from_kuid_munged(seq_user_ns(seq), sk_uid(sp)), 0, sock_i_ino(sp), - refcount_read(&sp->sk_refcnt), sp, - sk_drops_read(sp)); + refcount_read(&sp->sk_refcnt), sk_drops_read(sp)); } diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index df9c29eb5c1f..b55d036c7f4d 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -2103,7 +2103,7 @@ static void get_openreq6(struct seq_file *seq, seq_printf(seq, "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X " - "%02X %08X:%08X %02X:%08lX %08X %5u %8d %d %d %pK\n", + "%02X %08X:%08X %02X:%08lX %08X %5u %8d %d %d 0\n", i, src->s6_addr32[0], src->s6_addr32[1], src->s6_addr32[2], src->s6_addr32[3], @@ -2120,7 +2120,7 @@ static void get_openreq6(struct seq_file *seq, sk_uid(req->rsk_listener)), 0, /* non standard timer */ 0, /* open_requests have no inode */ - 0, req); + 0); } static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i) @@ -2171,7 +2171,7 @@ static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i) seq_printf(seq, "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X " - "%02X %08X:%08X %02X:%08lX %08X %5u %8d %llu %d %pK %lu %lu %u %u %d\n", + "%02X %08X:%08X %02X:%08lX %08X %5u %8d %llu %d 0 %lu %lu %u %u %d\n", i, src->s6_addr32[0], src->s6_addr32[1], src->s6_addr32[2], src->s6_addr32[3], srcp, @@ -2186,7 +2186,7 @@ static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i) from_kuid_munged(seq_user_ns(seq), sk_uid(sp)), READ_ONCE(icsk->icsk_probes_out), sock_i_ino(sp), - refcount_read(&sp->sk_refcnt), sp, + refcount_read(&sp->sk_refcnt), jiffies_to_clock_t(icsk->icsk_rto), jiffies_to_clock_t(icsk->icsk_ack.ato), (icsk->icsk_ack.quick << 1) | inet_csk_in_pingpong_mode(sp), @@ -2211,7 +2211,7 @@ static void get_timewait6_sock(struct seq_file *seq, seq_printf(seq, "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X " - "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %pK\n", + "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d 0\n", i, src->s6_addr32[0], src->s6_addr32[1], src->s6_addr32[2], src->s6_addr32[3], srcp, @@ -2219,7 +2219,7 @@ static void get_timewait6_sock(struct seq_file *seq, dest->s6_addr32[2], dest->s6_addr32[3], destp, READ_ONCE(tw->tw_substate), 0, 0, 3, jiffies_delta_to_clock_t(delta), 0, 0, 0, 0, - refcount_read(&tw->tw_refcnt), tw); + refcount_read(&tw->tw_refcnt)); } static int tcp6_seq_show(struct seq_file *seq, void *v) diff --git a/net/key/af_key.c b/net/key/af_key.c index 1d8965d7f4f3..d215b33b7492 100644 --- a/net/key/af_key.c +++ b/net/key/af_key.c @@ -3803,10 +3803,9 @@ static int pfkey_seq_show(struct seq_file *f, void *v) struct sock *s = sk_entry(v); if (v == SEQ_START_TOKEN) - seq_printf(f ,"sk RefCnt Rmem Wmem User Inode\n"); + seq_puts(f, "sk RefCnt Rmem Wmem User Inode\n"); else - seq_printf(f, "%pK %-6d %-6u %-6u %-6u %-6llu\n", - s, + seq_printf(f, "0 %-6d %-6u %-6u %-6u %-6llu\n", refcount_read(&s->sk_refcnt), sk_rmem_alloc_get(s), sk_wmem_alloc_get(s), diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index e6b1d9758c9c..537562aacb7e 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -2700,14 +2700,13 @@ static int netlink_native_seq_show(struct seq_file *seq, void *v) { if (v == SEQ_START_TOKEN) { seq_puts(seq, - "sk Eth Pid Groups " + "sk Eth Pid Groups " "Rmem Wmem Dump Locks Drops Inode\n"); } else { struct sock *s = v; struct netlink_sock *nlk = nlk_sk(s); - seq_printf(seq, "%pK %-3d %-10u %08x %-8d %-8d %-5d %-8d %-8u %-8llu\n", - s, + seq_printf(seq, "0 %-3d %-10u %08x %-8d %-8d %-5d %-8d %-8u %-8llu\n", s->sk_protocol, nlk->portid, nlk->groups ? (u32)nlk->groups[0] : 0, diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index b22cda322136..331f78689075 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -4825,16 +4825,13 @@ static void packet_seq_stop(struct seq_file *seq, void *v) static int packet_seq_show(struct seq_file *seq, void *v) { if (v == SEQ_START_TOKEN) - seq_printf(seq, - "%*sRefCnt Type Proto Iface R Rmem User Inode\n", - IS_ENABLED(CONFIG_64BIT) ? -17 : -9, "sk"); + seq_puts(seq, "sk RefCnt Type Proto Iface R Rmem User Inode\n"); else { struct sock *s = sk_entry(v); const struct packet_sock *po = pkt_sk(s); seq_printf(seq, - "%pK %-6d %-4d %04x %-5d %1d %-6u %-6u %-6llu\n", - s, + "0 %-6d %-4d %04x %-5d %1d %-6u %-6u %-6llu\n", refcount_read(&s->sk_refcnt), s->sk_type, ntohs(READ_ONCE(po->num)), diff --git a/net/phonet/socket.c b/net/phonet/socket.c index 631a99cdbd00..ad12b746d4fc 100644 --- a/net/phonet/socket.c +++ b/net/phonet/socket.c @@ -586,14 +586,13 @@ static int pn_sock_seq_show(struct seq_file *seq, void *v) struct pn_sock *pn = pn_sk(sk); seq_printf(seq, "%2d %04X:%04X:%02X %02X %08X:%08X %5d %llu " - "%d %pK %u", + "%d 0 %u", sk->sk_protocol, pn->sobject, pn->dobject, pn->resource, sk->sk_state, sk_wmem_alloc_get(sk), sk_rmem_alloc_get(sk), from_kuid_munged(seq_user_ns(seq), sk_uid(sk)), sock_i_ino(sk), - refcount_read(&sk->sk_refcnt), sk, - sk_drops_read(sk)); + refcount_read(&sk->sk_refcnt), sk_drops_read(sk)); } seq_pad(seq, '\n'); return 0; diff --git a/net/sctp/proc.c b/net/sctp/proc.c index 43433d7e2acd..7ea123b90aa5 100644 --- a/net/sctp/proc.c +++ b/net/sctp/proc.c @@ -174,7 +174,7 @@ static int sctp_eps_seq_show(struct seq_file *seq, void *v) sk = ep->base.sk; if (!net_eq(sock_net(sk), seq_file_net(seq))) continue; - seq_printf(seq, "%8pK %8pK %-3d %-3d %-4d %-5d %5u %5llu ", ep, sk, + seq_printf(seq, "%8d %8d %-3d %-3d %-4d %-5d %5u %5llu ", 0, 0, sctp_sk(sk)->type, sk->sk_state, hash, ep->base.bind_addr.port, from_kuid_munged(seq_user_ns(seq), sk_uid(sk)), @@ -260,9 +260,9 @@ static int sctp_assocs_seq_show(struct seq_file *seq, void *v) sk = epb->sk; seq_printf(seq, - "%8pK %8pK %-3d %-3d %-2d %-4d " + "%8d %8d %-3d %-3d %-2d %-4d " "%4d %8d %8d %7u %5llu %-5d %5d ", - assoc, sk, sctp_sk(sk)->type, sk->sk_state, + 0, 0, sctp_sk(sk)->type, sk->sk_state, assoc->state, 0, assoc->assoc_id, assoc->sndbuf_used, diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 13f9926bf205..82f951376e0b 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -3562,8 +3562,7 @@ static int unix_seq_show(struct seq_file *seq, void *v) struct unix_sock *u = unix_sk(s); unix_state_lock(s); - seq_printf(seq, "%pK: %08X %08X %08X %04X %02X %5llu", - s, + seq_printf(seq, "%08u: %08X %08X %08X %04X %02X %5llu", 0, refcount_read(&s->sk_refcnt), 0, s->sk_state == TCP_LISTEN ? __SO_ACCEPTCON : 0,