In article <[EMAIL PROTECTED]> (at Mon, 16 Jan 2006 16:59:20 +1100), Shaun 
Pereira <[EMAIL PROTECTED]> says:

> If I understand correctly from your comments (thanks for that, they are
> helpful)
> copy_to_user acts like a memcopy for an 'array' of bytes and should not
> be used to copy the timeval struct to userspace. 
> Rather put_user / __put_user macros should be used which allows transfer
> of single element values of the structure. 

> +int compat_sock_get_timestamp(struct sock *sk, struct timeval __user
> *userstamp)
> +{
> +     struct compat_timeval __user *ctv
> +             = (struct compat_timeval __user*) userstamp;
> +     int err = -ENOENT;
> +     if(!sock_flag(sk, SOCK_TIMESTAMP))
> +             sock_enable_timestamp(sk);
> +     if(sk->sk_stamp.tv_sec == -1)
> +             return err;
> +     if(sk->sk_stamp.tv_sec == 0)
> +             do_gettimeofday(&sk->sk_stamp);
> +     err = -EFAULT;
> +     if(access_ok(VERIFTY_WRITE, ctv, sizeof(*ctv))) {
> +             err = __put_user(sk->sk_stamp.tv_sec, &ctv->tv_sec);
> +             err != __put_user(sk->sk_stamp.tv_usec, &ctv->tv_usec);
> +     }
> +     return err;
> +}
> +

Hmm, you will copy 32bit of MSB in big-endian.
You should do something like this:

        strtuct compat_timeval tvtmp;
        :
        tvtmp.tv_sec = sk->sk_stamp.tv_sec;
        tvtmp.tv_usec = sk->sk_stemp.tv_usec;
        return copy_to_user(ctv, &tvtmp, sizeof(tvtmp));

Or, am I miss something?

--yoshfuji
-
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