Showing error 944

User: Jiri Slaby
Error type: Leaving function in locked state
Error type description: Some lock is not unlocked on all paths of a function, so it is leaked
File location: net/ipv6/mcast.c
Line in file: 488
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-03-02 21:35:17 UTC


Source:

 458                if (psl) {
 459                        for (i=0; i<psl->sl_count; i++)
 460                                newpsl->sl_addr[i] = psl->sl_addr[i];
 461                        sock_kfree_s(sk, psl, IP6_SFLSIZE(psl->sl_max));
 462                }
 463                pmc->sflist = psl = newpsl;
 464        }
 465        rv = 1;        /* > 0 for insert logic below if sl_count is 0 */
 466        for (i=0; i<psl->sl_count; i++) {
 467                rv = memcmp(&psl->sl_addr[i], source, sizeof(struct in6_addr));
 468                if (rv == 0)
 469                        break;
 470        }
 471        if (rv == 0)                /* address already there is an error */
 472                goto done;
 473        for (j=psl->sl_count-1; j>=i; j--)
 474                psl->sl_addr[j+1] = psl->sl_addr[j];
 475        psl->sl_addr[i] = *source;
 476        psl->sl_count++;
 477        err = 0;
 478        /* update the interface list */
 479        ip6_mc_add_src(idev, group, omode, 1, source, 1);
 480done:
 481        if (pmclocked)
 482                write_unlock_bh(&pmc->sflock);
 483        read_unlock_bh(&ipv6_sk_mc_lock);
 484        read_unlock_bh(&idev->lock);
 485        in6_dev_put(idev);
 486        dev_put(dev);
 487        if (leavegroup)
 488                return ipv6_sock_mc_drop(sk, pgsr->gsr_interface, group);
 489        return err;
 490}
 491
 492int ip6_mc_msfilter(struct sock *sk, struct group_filter *gsf)
 493{
 494        struct in6_addr *group;
 495        struct ipv6_mc_socklist *pmc;
 496        struct net_device *dev;
 497        struct inet6_dev *idev;
 498        struct ipv6_pinfo *inet6 = inet6_sk(sk);
Show full sources