<html><body>
<p><tt>Roland Dreier <rolandd@cisco.com> wrote on 11/14/2005 11:47:13 AM:<br>
<br>
>     Pradeep> I am trying to use copy_from_user()/copy_to_user of data<br>
>     Pradeep> structures that contains pointers.<br>
> <br>
> If you are defining a new interface, then the simplest thing is not to<br>
> do that: always put pointers in a 64-bit field.<br>
> <br>
> If it is an existing interface that can't be changed, then there<br>
> should be an existing compat wrapper for the system call.<br>
> <br>
This is for address translation. Address translations use "write()"</tt><br>
<tt>to a character device. write() does not have a compat wrapper and so</tt><br>
<tt>there are two possible approaches:</tt><br>
<br>
<tt>1) convert the write() to ioctl() and use the compat wrapper</tt><br>
<tt>approach.</tt><br>
<tt>2) use the test_thread_flag(TIF_32BIT) or an alternative to ascertain</tt><br>
<tt>if it is a 32-bit app on a 64 bit kernel and do the compat_ptr(),</tt><br>
<tt>else use the regular copy_*_user().</tt><br>
<br>
<tt>I am leaning towards the first option, since that is the correct way to </tt><br>
<tt>approach this and will work across all platforms. Any other suggestions?</tt><br>
<br>
<tt>Pradeep</tt><br>
<tt>pradeep@us.ibm.com<br>
</tt></body></html>