From f9c88b850579fc12bcf362a54b57625380cb0b2e Mon Sep 17 00:00:00 2001 From: Vlad Yasevich Date: Mon, 30 Oct 2006 18:54:32 -0800 Subject: [PATCH] --- yaml --- r: 40540 b: refs/heads/master c: 4f4443088b763ca4ac7521e9b4a881b52c294dec h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/sctp/protocol.c | 2 +- trunk/net/sctp/socket.c | 9 +++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 3be6e457b599..2c416b97c733 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f8687afefcc821fc47c75775eec87731fe3de360 +refs/heads/master: 4f4443088b763ca4ac7521e9b4a881b52c294dec diff --git a/trunk/net/sctp/protocol.c b/trunk/net/sctp/protocol.c index fac7674438a4..5b4f82fd98f8 100644 --- a/trunk/net/sctp/protocol.c +++ b/trunk/net/sctp/protocol.c @@ -591,7 +591,7 @@ static struct sock *sctp_v4_create_accept_sk(struct sock *sk, newinet->dport = htons(asoc->peer.port); newinet->daddr = asoc->peer.primary_addr.v4.sin_addr.s_addr; newinet->pmtudisc = inet->pmtudisc; - newinet->id = 0; + newinet->id = asoc->next_tsn ^ jiffies; newinet->uc_ttl = -1; newinet->mc_loop = 1; diff --git a/trunk/net/sctp/socket.c b/trunk/net/sctp/socket.c index 9f34dec6ff8e..935bc9187fd8 100644 --- a/trunk/net/sctp/socket.c +++ b/trunk/net/sctp/socket.c @@ -3372,6 +3372,7 @@ SCTP_STATIC int sctp_do_peeloff(struct sctp_association *asoc, { struct sock *sk = asoc->base.sk; struct socket *sock; + struct inet_sock *inetsk; int err = 0; /* An association cannot be branched off from an already peeled-off @@ -3389,6 +3390,14 @@ SCTP_STATIC int sctp_do_peeloff(struct sctp_association *asoc, * asoc to the newsk. */ sctp_sock_migrate(sk, sock->sk, asoc, SCTP_SOCKET_UDP_HIGH_BANDWIDTH); + + /* Make peeled-off sockets more like 1-1 accepted sockets. + * Set the daddr and initialize id to something more random + */ + inetsk = inet_sk(sock->sk); + inetsk->daddr = asoc->peer.primary_addr.v4.sin_addr.s_addr; + inetsk->id = asoc->next_tsn ^ jiffies; + *sockp = sock; return err;