X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fipv4%2Figmp.c;h=149dc862776c5523d74c97981f2d51ab25457000;hb=9213980e6a70d8473e0ffd4b39ab5b6caaba9ff5;hp=99d46b4bc077bdcb2d7c36e75fa08a7d0ef5e102;hpb=c449269f45c2cdf53af08c8d0af37472f66539d9;p=linux-2.6.git diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index 99d46b4bc..149dc8627 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c @@ -292,6 +292,7 @@ static struct sk_buff *igmpv3_newpack(struct net_device *dev, int size) } } if (rt->rt_src == 0) { + kfree_skb(skb); ip_rt_put(rt); return 0; } @@ -1912,7 +1913,7 @@ done: } int ip_mc_msfget(struct sock *sk, struct ip_msfilter *msf, - struct ip_msfilter *optval, int *optlen) + struct ip_msfilter __user *optval, int __user *optlen) { int err, len, count, copycount; struct ip_mreqn imr; @@ -1958,11 +1959,11 @@ int ip_mc_msfget(struct sock *sk, struct ip_msfilter *msf, len = copycount * sizeof(psl->sl_addr[0]); msf->imsf_numsrc = count; if (put_user(IP_MSFILTER_SIZE(copycount), optlen) || - copy_to_user((void *)optval, msf, IP_MSFILTER_SIZE(0))) { + copy_to_user(optval, msf, IP_MSFILTER_SIZE(0))) { return -EFAULT; } if (len && - copy_to_user((void *)&optval->imsf_slist[0], psl->sl_addr, len)) + copy_to_user(&optval->imsf_slist[0], psl->sl_addr, len)) return -EFAULT; return 0; done: @@ -1971,7 +1972,7 @@ done: } int ip_mc_gsfget(struct sock *sk, struct group_filter *gsf, - struct group_filter *optval, int *optlen) + struct group_filter __user *optval, int __user *optlen) { int err, i, count, copycount; struct sockaddr_in *psin; @@ -2005,7 +2006,7 @@ int ip_mc_gsfget(struct sock *sk, struct group_filter *gsf, copycount = count < gsf->gf_numsrc ? count : gsf->gf_numsrc; gsf->gf_numsrc = count; if (put_user(GROUP_FILTER_SIZE(copycount), optlen) || - copy_to_user((void *)optval, gsf, GROUP_FILTER_SIZE(0))) { + copy_to_user(optval, gsf, GROUP_FILTER_SIZE(0))) { return -EFAULT; } for (i=0; isin_family = AF_INET; psin->sin_addr.s_addr = psl->sl_addr[i]; - if (copy_to_user((void *)&optval->gf_slist[i], &ss, sizeof(ss))) + if (copy_to_user(&optval->gf_slist[i], &ss, sizeof(ss))) return -EFAULT; } return 0;