From 45dd6e49605b84f5e267327bc1ef64d7526d7658 Mon Sep 17 00:00:00 2001 From: Vladislav Yasevich Date: Mon, 13 Jun 2005 15:10:49 -0700 Subject: [PATCH] --- yaml --- r: 1975 b: refs/heads/master c: 4243cac1e76228f7ba916d5df9e75a219352160a h: refs/heads/master i: 1973: 4847156adbe8bbc9d1cdb4ac46a4d90ce334d574 1971: 9f98a5ee87cf33e2b3f68394a91177fd4f2ac479 1967: bd75302516641e909fdf73e441917ef4c2cfd1d9 v: v3 --- [refs] | 2 +- trunk/net/sctp/socket.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index dd948e3e356f..e5e7d90a08f1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 77bd91967a97e5b94ae36113efe1d9e4f68a716e +refs/heads/master: 4243cac1e76228f7ba916d5df9e75a219352160a diff --git a/trunk/net/sctp/socket.c b/trunk/net/sctp/socket.c index 0b338eca6dc0..2a3c0e08a090 100644 --- a/trunk/net/sctp/socket.c +++ b/trunk/net/sctp/socket.c @@ -4686,6 +4686,7 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk, struct sctp_endpoint *newep = newsp->ep; struct sk_buff *skb, *tmp; struct sctp_ulpevent *event; + int flags = 0; /* Migrate socket buffer sizes and all the socket level options to the * new socket. @@ -4707,6 +4708,17 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk, sctp_sk(newsk)->bind_hash = pp; inet_sk(newsk)->num = inet_sk(oldsk)->num; + /* Copy the bind_addr list from the original endpoint to the new + * endpoint so that we can handle restarts properly + */ + if (assoc->peer.ipv4_address) + flags |= SCTP_ADDR4_PEERSUPP; + if (assoc->peer.ipv6_address) + flags |= SCTP_ADDR6_PEERSUPP; + sctp_bind_addr_copy(&newsp->ep->base.bind_addr, + &oldsp->ep->base.bind_addr, + SCTP_SCOPE_GLOBAL, GFP_KERNEL, flags); + /* Move any messages in the old socket's receive queue that are for the * peeled off association to the new socket's receive queue. */