X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=net%2Fsctp%2Fsocket.c;h=fb02c70333078743e832a7a991f7a44770d19bcc;hb=b50afd203a5ef1998c18d6519ad2b2c546d6af22;hp=6cdc61c21438aa9b6dbdad93e70759071a4d6789;hpb=d6169b0206db1c8c8d0e4c6b79fdf4b2fc6455f1;p=cascardo%2Flinux.git diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 6cdc61c21438..fb02c7033307 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -4473,17 +4473,21 @@ int sctp_transport_lookup_process(int (*cb)(struct sctp_transport *, void *), const union sctp_addr *paddr, void *p) { struct sctp_transport *transport; - int err = 0; + int err = -ENOENT; rcu_read_lock(); transport = sctp_addrs_lookup_transport(net, laddr, paddr); if (!transport || !sctp_transport_hold(transport)) goto out; - err = cb(transport, p); + + sctp_association_hold(transport->asoc); sctp_transport_put(transport); -out: rcu_read_unlock(); + err = cb(transport, p); + sctp_association_put(transport->asoc); + +out: return err; } EXPORT_SYMBOL_GPL(sctp_transport_lookup_process);