diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 8cbc96eb6927f064ca4db7b5ad4554dd8dc14c55..692272109cc15524d5115f7e409cfe39c6ad1014 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -431,11 +431,13 @@ static int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len) ret = sctp_add_bind_addr(bp, addr, af->sockaddr_len, SCTP_ADDR_SRC, GFP_ATOMIC); - /* Copy back into socket for getsockname() use. */ - if (!ret) { - inet_sk(sk)->inet_sport = htons(inet_sk(sk)->inet_num); - sp->pf->to_sk_saddr(addr, sk); + if (ret) { + sctp_put_port(sk); + return ret; } + /* Copy back into socket for getsockname() use. */ + inet_sk(sk)->inet_sport = htons(inet_sk(sk)->inet_num); + sp->pf->to_sk_saddr(addr, sk); return ret; }