inet: preserve const qualifier in inet_sk()
authorEric Dumazet <edumazet@google.com>
Thu, 16 Mar 2023 15:31:55 +0000 (15:31 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 17 Mar 2023 08:56:37 +0000 (08:56 +0000)
We can change inet_sk() to propagate const qualifier of its argument.

This should avoid some potential errors caused by accidental
(const -> not_const) promotion.

Other helpers like tcp_sk(), udp_sk(), raw_sk() will be handled
in separate patch series.

v2: use container_of_const() as advised by Jakub and Linus

Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://lore.kernel.org/netdev/20230315142841.3a2ac99a@kernel.org/
Link: https://lore.kernel.org/netdev/CAHk-=wiOf12nrYEF2vJMcucKjWPN-Ns_SW9fA7LwST_2Dzp7rw@mail.gmail.com/
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/inet_sock.h
include/trace/events/sock.h
include/trace/events/tcp.h
net/ipv4/ip_output.c
net/ipv6/ping.c
net/ipv6/udp.c
net/mptcp/sockopt.c
security/lsm_audit.c

index 51857117ac0995cee20c1e62752c470d2a473fa8..caa20a9055310f5ef108f9b1bb43214a3d598b9e 100644 (file)
@@ -305,10 +305,7 @@ static inline struct sock *skb_to_full_sk(const struct sk_buff *skb)
        return sk_to_full_sk(skb->sk);
 }
 
-static inline struct inet_sock *inet_sk(const struct sock *sk)
-{
-       return (struct inet_sock *)sk;
-}
+#define inet_sk(ptr) container_of_const(ptr, struct inet_sock, sk)
 
 static inline void __inet_sk_copy_descendant(struct sock *sk_to,
                                             const struct sock *sk_from,
index 03d19fc562f872d68cfb2349797f0924cfba718b..fd206a6ab5b85a8eb50fc9303abc28d74c50ea07 100644 (file)
@@ -158,7 +158,7 @@ TRACE_EVENT(inet_sock_set_state,
        ),
 
        TP_fast_assign(
-               struct inet_sock *inet = inet_sk(sk);
+               const struct inet_sock *inet = inet_sk(sk);
                struct in6_addr *pin6;
                __be32 *p32;
 
@@ -222,7 +222,7 @@ TRACE_EVENT(inet_sk_error_report,
        ),
 
        TP_fast_assign(
-               struct inet_sock *inet = inet_sk(sk);
+               const struct inet_sock *inet = inet_sk(sk);
                struct in6_addr *pin6;
                __be32 *p32;
 
index 901b440238d5fc203b78cff1081b4b7e1e2eb4bd..bf06db8d2046c4a7f59070b724ce6fc7762f9d4b 100644 (file)
@@ -67,7 +67,7 @@ DECLARE_EVENT_CLASS(tcp_event_sk_skb,
        ),
 
        TP_fast_assign(
-               struct inet_sock *inet = inet_sk(sk);
+               const struct inet_sock *inet = inet_sk(sk);
                __be32 *p32;
 
                __entry->skbaddr = skb;
index e7bef36ce26f5b5e5503eaf14319b2465b779598..cb04dbad9ea474fcaa4b5ba31c4a37299c4e1a8d 100644 (file)
@@ -129,7 +129,8 @@ int ip_local_out(struct net *net, struct sock *sk, struct sk_buff *skb)
 }
 EXPORT_SYMBOL_GPL(ip_local_out);
 
-static inline int ip_select_ttl(struct inet_sock *inet, struct dst_entry *dst)
+static inline int ip_select_ttl(const struct inet_sock *inet,
+                               const struct dst_entry *dst)
 {
        int ttl = inet->uc_ttl;
 
@@ -146,7 +147,7 @@ int ip_build_and_send_pkt(struct sk_buff *skb, const struct sock *sk,
                          __be32 saddr, __be32 daddr, struct ip_options_rcu *opt,
                          u8 tos)
 {
-       struct inet_sock *inet = inet_sk(sk);
+       const struct inet_sock *inet = inet_sk(sk);
        struct rtable *rt = skb_rtable(skb);
        struct net *net = sock_net(sk);
        struct iphdr *iph;
index 808983bc2ec9f92be7d13237fb7d52b6423ccf23..c4835dbdfcff7912465713cdac9914b0f5585972 100644 (file)
@@ -237,7 +237,7 @@ static int ping_v6_seq_show(struct seq_file *seq, void *v)
                seq_puts(seq, IPV6_SEQ_DGRAM_HEADER);
        } else {
                int bucket = ((struct ping_iter_state *) seq->private)->bucket;
-               struct inet_sock *inet = inet_sk(v);
+               struct inet_sock *inet = inet_sk((struct sock *)v);
                __u16 srcp = ntohs(inet->inet_sport);
                __u16 destp = ntohs(inet->inet_dport);
                ip6_dgram_sock_seq_show(seq, v, srcp, destp, bucket);
index 9fb2f33ee3a76a09bbe15a9aaf1371a804f91ee2..ab4ae886235ac9557219c901c5041adfa8b026ef 100644 (file)
@@ -1708,7 +1708,7 @@ int udp6_seq_show(struct seq_file *seq, void *v)
                seq_puts(seq, IPV6_SEQ_DGRAM_HEADER);
        } else {
                int bucket = ((struct udp_iter_state *)seq->private)->bucket;
-               struct inet_sock *inet = inet_sk(v);
+               const struct inet_sock *inet = inet_sk((const struct sock *)v);
                __u16 srcp = ntohs(inet->inet_sport);
                __u16 destp = ntohs(inet->inet_dport);
                __ip6_dgram_sock_seq_show(seq, v, srcp, destp,
index 8a9656248b0f09e78ebf3d6d787449f33505b81f..5cef4d3d21ac824ab6d3a5ee8be3bd00cce63925 100644 (file)
@@ -1046,7 +1046,7 @@ static int mptcp_getsockopt_tcpinfo(struct mptcp_sock *msk, char __user *optval,
 
 static void mptcp_get_sub_addrs(const struct sock *sk, struct mptcp_subflow_addrs *a)
 {
-       struct inet_sock *inet = inet_sk(sk);
+       const struct inet_sock *inet = inet_sk(sk);
 
        memset(a, 0, sizeof(*a));
 
index a7355b4b9bb86d173f94e43109148bc0ea27d1b3..00d3bdd386e294ecd562bfa8ce502bf179ad32d9 100644 (file)
@@ -317,7 +317,7 @@ static void dump_common_audit_data(struct audit_buffer *ab,
 
                        switch (sk->sk_family) {
                        case AF_INET: {
-                               struct inet_sock *inet = inet_sk(sk);
+                               const struct inet_sock *inet = inet_sk(sk);
 
                                print_ipv4_addr(ab, inet->inet_rcv_saddr,
                                                inet->inet_sport,
@@ -329,7 +329,7 @@ static void dump_common_audit_data(struct audit_buffer *ab,
                        }
 #if IS_ENABLED(CONFIG_IPV6)
                        case AF_INET6: {
-                               struct inet_sock *inet = inet_sk(sk);
+                               const struct inet_sock *inet = inet_sk(sk);
 
                                print_ipv6_addr(ab, &sk->sk_v6_rcv_saddr,
                                                inet->inet_sport,