On Tue, 2006-08-29 at 11:20 -0700, Chris Wright wrote:
> * Sridhar Samudrala ([EMAIL PROTECTED]) wrote:
> > -int verify_iovec(struct msghdr *m, struct iovec *iov, char *address, int 
> > mode)
> > +ssize_t verify_iovec(struct msghdr *m, struct iovec *iov, char *address, 
> > int mode)
> >  {
> >     int size, err, ct;
> > +   ssize_t tot_len = 0;
> >     
> >     if (m->msg_namelen) {
> >             if (mode == VERIFY_READ) {
> > @@ -61,17 +62,22 @@ int verify_iovec(struct msghdr *m, struc
> >     err = 0;
> >  
> >     for (ct = 0; ct < m->msg_iovlen; ct++) {
> > -           err += iov[ct].iov_len;
> > +           ssize_t len;
> > +
> >             /*
> > -            * Goal is not to verify user data, but to prevent returning
> > -            * negative value, which is interpreted as errno.
> > -            * Overflow is still possible, but it is harmless.
> > +            * Goal is not to verify user data, but to prevent the cases 
> > +            * where an iov_len value or the sum of all iov_len values
> > +            * overflows ssize_t.
> >              */
> > -           if (err < 0)
> > -                   return -EMSGSIZE;
> > +           len = (ssize_t)iov[ct].iov_len;
> > +           if (len < 0)
> > +                   return -EINVAL;
> > +           tot_len += len;
> > +           if (tot_len < 0)
> 
> I specifically used size_t here, because signed integer overflow is not
> defined in C.

Is this a problem even if we are adding only positive integers?
I tried some tests and i didn't see any problem.
For ex: adding 2 max positive integers 0x7fffffff gave a result of -2
which passes the test for overflow.
    0x7fffffff + 0x7ffffff = -2 
    0x7fffffff + 1 = -2147483648

Thanks
Sridhar

> 
> thanks,
> -chris
> -
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to [EMAIL PROTECTED]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to