Showing error 1887

User: Jiri Slaby
Error type: Invalid Pointer Dereference
Error type description: A pointer which is invalid is being dereferenced
File location: net/ipv4/igmp.c
Line in file: 2118
Project: Linux Kernel
Project version: 2.6.28
Tools: Smatch (1.59)
Entered: 2013-09-11 08:47:26 UTC


Source:

2088        if (!in_dev) {
2089                err = -ENODEV;
2090                goto done;
2091        }
2092        err = -EADDRNOTAVAIL;
2093
2094        for (pmc=inet->mc_list; pmc; pmc=pmc->next) {
2095                if (pmc->multi.imr_multiaddr.s_addr == msf->imsf_multiaddr &&
2096                    pmc->multi.imr_ifindex == imr.imr_ifindex)
2097                        break;
2098        }
2099        if (!pmc)                /* must have a prior join */
2100                goto done;
2101        msf->imsf_fmode = pmc->sfmode;
2102        psl = pmc->sflist;
2103        rtnl_unlock();
2104        if (!psl) {
2105                len = 0;
2106                count = 0;
2107        } else {
2108                count = psl->sl_count;
2109        }
2110        copycount = count < msf->imsf_numsrc ? count : msf->imsf_numsrc;
2111        len = copycount * sizeof(psl->sl_addr[0]);
2112        msf->imsf_numsrc = count;
2113        if (put_user(IP_MSFILTER_SIZE(copycount), optlen) ||
2114            copy_to_user(optval, msf, IP_MSFILTER_SIZE(0))) {
2115                return -EFAULT;
2116        }
2117        if (len &&
2118            copy_to_user(&optval->imsf_slist[0], psl->sl_addr, len))
2119                return -EFAULT;
2120        return 0;
2121done:
2122        rtnl_unlock();
2123        return err;
2124}
2125
2126int ip_mc_gsfget(struct sock *sk, struct group_filter *gsf,
2127        struct group_filter __user *optval, int __user *optlen)
2128{
Show full sources