mirror of
https://github.com/torvalds/linux
synced 2024-11-03 01:56:01 +00:00
doc: ioctl: Add some clarifications to botching-up-ioctls
- The guide currently says to pad the structure to a multiple of 64-bits. This is not necessary in cases where the structure contains no 64-bit types. Clarify this concept to avoid unnecessary padding. - When using __u64 to hold user pointers, blindly trying to do a cast to a void __user * may generate a warning on 32-bit systems about a cast from an integer to a pointer of different size. There is a macro to deal with this which hides an ugly double cast. Add a reference to this macro. Signed-off-by: Laura Abbott <labbott@redhat.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Jonathan Corbet <corbet@lwn.net>
This commit is contained in:
parent
951499710b
commit
c6517b7815
1 changed files with 8 additions and 5 deletions
|
@ -34,15 +34,18 @@ will need to add a a 32-bit compat layer:
|
|||
64-bit platforms do. So we always need padding to the natural size to get
|
||||
this right.
|
||||
|
||||
* Pad the entire struct to a multiple of 64-bits - the structure size will
|
||||
otherwise differ on 32-bit versus 64-bit. Having a different structure size
|
||||
hurts when passing arrays of structures to the kernel, or if the kernel
|
||||
checks the structure size, which e.g. the drm core does.
|
||||
* Pad the entire struct to a multiple of 64-bits if the structure contains
|
||||
64-bit types - the structure size will otherwise differ on 32-bit versus
|
||||
64-bit. Having a different structure size hurts when passing arrays of
|
||||
structures to the kernel, or if the kernel checks the structure size, which
|
||||
e.g. the drm core does.
|
||||
|
||||
* Pointers are __u64, cast from/to a uintprt_t on the userspace side and
|
||||
from/to a void __user * in the kernel. Try really hard not to delay this
|
||||
conversion or worse, fiddle the raw __u64 through your code since that
|
||||
diminishes the checking tools like sparse can provide.
|
||||
diminishes the checking tools like sparse can provide. The macro
|
||||
u64_to_user_ptr can be used in the kernel to avoid warnings about integers
|
||||
and pointres of different sizes.
|
||||
|
||||
|
||||
Basics
|
||||
|
|
Loading…
Reference in a new issue