Skip to content

Commit 4e6c91c

Browse files
edumazetkuba-moo
authored andcommitted
ipv6: use inet->cork.fl.u.ip6 and np->final in ip6_datagram_dst_update()
Get rid of @FL6 and &final variables in ip6_datagram_dst_update(). Use instead inet->cork.fl.u.ip6 and np->final so that a stack canary is no longer needed. Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com> Link: https://patch.msgid.link/20260206173426.1638518-4-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 3d3f075 commit 4e6c91c

1 file changed

Lines changed: 11 additions & 10 deletions

File tree

net/ipv6/datagram.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,12 @@ static void ip6_datagram_flow_key_init(struct flowi6 *fl6,
7272
int ip6_datagram_dst_update(struct sock *sk, bool fix_sk_saddr)
7373
{
7474
struct ip6_flowlabel *flowlabel = NULL;
75-
struct in6_addr *final_p, final;
76-
struct ipv6_txoptions *opt;
77-
struct dst_entry *dst;
7875
struct inet_sock *inet = inet_sk(sk);
7976
struct ipv6_pinfo *np = inet6_sk(sk);
80-
struct flowi6 fl6;
77+
struct ipv6_txoptions *opt;
78+
struct in6_addr *final_p;
79+
struct dst_entry *dst;
80+
struct flowi6 *fl6;
8181
int err = 0;
8282

8383
if (inet6_test_bit(SNDFLOW, sk) &&
@@ -86,32 +86,33 @@ int ip6_datagram_dst_update(struct sock *sk, bool fix_sk_saddr)
8686
if (IS_ERR(flowlabel))
8787
return -EINVAL;
8888
}
89-
ip6_datagram_flow_key_init(&fl6, sk);
89+
fl6 = &inet_sk(sk)->cork.fl.u.ip6;
90+
ip6_datagram_flow_key_init(fl6, sk);
9091

9192
rcu_read_lock();
9293
opt = flowlabel ? flowlabel->opt : rcu_dereference(np->opt);
93-
final_p = fl6_update_dst(&fl6, opt, &final);
94+
final_p = fl6_update_dst(fl6, opt, &np->final);
9495
rcu_read_unlock();
9596

96-
dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p);
97+
dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_p);
9798
if (IS_ERR(dst)) {
9899
err = PTR_ERR(dst);
99100
goto out;
100101
}
101102

102103
if (fix_sk_saddr) {
103104
if (ipv6_addr_any(&np->saddr))
104-
np->saddr = fl6.saddr;
105+
np->saddr = fl6->saddr;
105106

106107
if (ipv6_addr_any(&sk->sk_v6_rcv_saddr)) {
107-
sk->sk_v6_rcv_saddr = fl6.saddr;
108+
sk->sk_v6_rcv_saddr = fl6->saddr;
108109
inet->inet_rcv_saddr = LOOPBACK4_IPV6;
109110
if (sk->sk_prot->rehash)
110111
sk->sk_prot->rehash(sk);
111112
}
112113
}
113114

114-
ip6_sk_dst_store_flow(sk, dst, &fl6);
115+
ip6_sk_dst_store_flow(sk, dst, fl6);
115116

116117
out:
117118
fl6_sock_release(flowlabel);

0 commit comments

Comments
 (0)