diff options
| author | 2021-03-25 15:31:22 -0700 | |
|---|---|---|
| committer | 2021-03-25 15:31:22 -0700 | |
| commit | efd13b71a3fa31413f8d15342e01d44b60b0a432 (patch) | |
| tree | 2ed1b299e25538c5a60485a1047507b49d3e0ecf /net/sctp/outqueue.c | |
| parent | hinic: avoid gcc -Wrestrict warning (diff) | |
| parent | Merge branch 'akpm' (patches from Andrew) (diff) | |
| download | wireguard-linux-efd13b71a3fa31413f8d15342e01d44b60b0a432.tar.xz wireguard-linux-efd13b71a3fa31413f8d15342e01d44b60b0a432.zip | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sctp/outqueue.c')
| -rw-r--r-- | net/sctp/outqueue.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c index 3fd06a27105d..5cb1aa5f067b 100644 --- a/net/sctp/outqueue.c +++ b/net/sctp/outqueue.c @@ -1135,6 +1135,7 @@ static void sctp_outq_flush_data(struct sctp_flush_ctx *ctx, static void sctp_outq_flush_transports(struct sctp_flush_ctx *ctx) { + struct sock *sk = ctx->asoc->base.sk; struct list_head *ltransport; struct sctp_packet *packet; struct sctp_transport *t; @@ -1144,6 +1145,12 @@ static void sctp_outq_flush_transports(struct sctp_flush_ctx *ctx) t = list_entry(ltransport, struct sctp_transport, send_ready); packet = &t->packet; if (!sctp_packet_empty(packet)) { + rcu_read_lock(); + if (t->dst && __sk_dst_get(sk) != t->dst) { + dst_hold(t->dst); + sk_setup_caps(sk, t->dst); + } + rcu_read_unlock(); error = sctp_packet_transmit(packet, ctx->gfp); if (error < 0) ctx->q->asoc->base.sk->sk_err = -error; |
