diff options
Diffstat (limited to 'net/sctp/socket.c')
-rw-r--r-- | net/sctp/socket.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 9f34dec6ff8e..935bc9187fd8 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c | |||
@@ -3372,6 +3372,7 @@ SCTP_STATIC int sctp_do_peeloff(struct sctp_association *asoc, | |||
3372 | { | 3372 | { |
3373 | struct sock *sk = asoc->base.sk; | 3373 | struct sock *sk = asoc->base.sk; |
3374 | struct socket *sock; | 3374 | struct socket *sock; |
3375 | struct inet_sock *inetsk; | ||
3375 | int err = 0; | 3376 | int err = 0; |
3376 | 3377 | ||
3377 | /* An association cannot be branched off from an already peeled-off | 3378 | /* 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, | |||
3389 | * asoc to the newsk. | 3390 | * asoc to the newsk. |
3390 | */ | 3391 | */ |
3391 | sctp_sock_migrate(sk, sock->sk, asoc, SCTP_SOCKET_UDP_HIGH_BANDWIDTH); | 3392 | sctp_sock_migrate(sk, sock->sk, asoc, SCTP_SOCKET_UDP_HIGH_BANDWIDTH); |
3393 | |||
3394 | /* Make peeled-off sockets more like 1-1 accepted sockets. | ||
3395 | * Set the daddr and initialize id to something more random | ||
3396 | */ | ||
3397 | inetsk = inet_sk(sock->sk); | ||
3398 | inetsk->daddr = asoc->peer.primary_addr.v4.sin_addr.s_addr; | ||
3399 | inetsk->id = asoc->next_tsn ^ jiffies; | ||
3400 | |||
3392 | *sockp = sock; | 3401 | *sockp = sock; |
3393 | 3402 | ||
3394 | return err; | 3403 | return err; |