Re: [PATCH 06/19] Add ioctl() argument and attribute handling utils
From: Stefan Richter <stefanr@s5r6.in-berlin.de>
Date: 2010-08-21 07:16:16
Also in:
lkml
Miloslav Trmac wrote:
----- "Stefan Richter" [off-list ref] wrote:quoted
Miloslav Trmač wrote:quoted
--- /dev/null +++ b/crypto/userspace/utils.c[...]quoted
+#ifdef CONFIG_COMPAT +/* max() is too clever for compile-time constants */ +#define CONST_MAX(A, B) ((A) > (B) ? (A) : (B)) + +#define MAX_SESSION_INPUT_DATA_SIZE \ + (CONST_MAX(sizeof(struct ncr_session_input_data), \ + sizeof(struct compat_ncr_session_input_data))) +#define MAX_SESSION_OUTPUT_BUFFER_SIZE \ + (CONST_MAX(sizeof(struct ncr_session_output_buffer), \ + sizeof(struct compat_ncr_session_output_buffer))) + +#else /* !CONFIG_COMPAT */ + +#define MAX_SESSION_INPUT_DATA_SIZE (sizeof(struct ncr_session_input_data)) +#define MAX_SESSION_OUTPUT_BUFFER_SIZE \ + (sizeof(struct ncr_session_output_buffer)) + +#endif /* !CONFIG_COMPAT */struct compat_xyz cannot be bigger than struct xyz, can it?Perhaps not, but the code has been written and it's easier to keep it than to speculate :)
What's there to speculate? :-) COMPAT = 32bit user on 64bit kernel. The latter has larger long and pointers and possibly different alignment of 64bit data.
It also helps document the fact that the data format depends on properties of the userspace.
Since it is a new ABI, it can be written to not need COMPAT ifdef'ery nor compat handlers. -- Stefan Richter -=====-==-=- =--- =-=-= http://arcgraph.de/sr/