--- zzzz-none-000/linux-2.6.19.2/net/ipv6/raw.c 2007-01-10 19:10:37.000000000 +0000 +++ davinci-8020-5505/linux-2.6.19.2/net/ipv6/raw.c 2007-01-19 14:42:56.000000000 +0000 @@ -549,7 +549,7 @@ return err; } -static int rawv6_send_hdrinc(struct sock *sk, void *from, int length, +static int rawv6_send_hdrinc(struct sock *sk, void *from, unsigned int length, struct flowi *fl, struct rt6_info *rt, unsigned int flags) { @@ -604,7 +604,7 @@ return err; } -static int rawv6_probe_proto_opt(struct flowi *fl, struct msghdr *msg) +static void rawv6_probe_proto_opt(struct flowi *fl, struct msghdr *msg) { struct iovec *iov; u8 __user *type = NULL; @@ -616,7 +616,7 @@ int i; if (!msg->msg_iov) - return 0; + return; for (i = 0; i < msg->msg_iovlen; i++) { iov = &msg->msg_iov[i]; @@ -638,9 +638,8 @@ code = iov->iov_base; if (type && code) { - if (get_user(fl->fl_icmp_type, type) || - get_user(fl->fl_icmp_code, code)) - return -EFAULT; + get_user(fl->fl_icmp_type, type); + get_user(fl->fl_icmp_code, code); probed = 1; } break; @@ -651,8 +650,7 @@ /* check if type field is readable or not. */ if (iov->iov_len > 2 - len) { u8 __user *p = iov->iov_base; - if (get_user(fl->fl_mh_type, &p[2 - len])) - return -EFAULT; + get_user(fl->fl_mh_type, &p[2 - len]); probed = 1; } else len += iov->iov_len; @@ -666,7 +664,6 @@ if (probed) break; } - return 0; } static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk, @@ -691,7 +688,7 @@ /* Rough check on arithmetic overflow, better check is made in ip6_build_xmit */ - if (len < 0) + if ((ssize_t)len < 0) return -EMSGSIZE; /* Mirror BSD error message compatibility */ @@ -790,9 +787,7 @@ opt = ipv6_fixup_options(&opt_space, opt); fl.proto = proto; - err = rawv6_probe_proto_opt(&fl, msg); - if (err) - goto out; + rawv6_probe_proto_opt(&fl, msg); ipv6_addr_copy(&fl.fl6_dst, daddr); if (ipv6_addr_any(&fl.fl6_src) && !ipv6_addr_any(&np->saddr))