signal: Reduce copy_siginfo to just a memcpy
The savings for copying just part of struct siginfo appears to be in the noise on modern machines. So remove this ``optimization'' and simplify the code. At the same time mark the second parameter as constant so there is no confusion as to which direction the copy will go. This ensures that a fully initialized siginfo that is sent ends up as a fully initialized siginfo on the signal queue. This full initialization ensures even confused code won't copy unitialized data to userspace, and it prepares for turning copy_siginfo_to_user into a simple copy_to_user. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
This commit is contained in:
@@ -11,13 +11,9 @@ struct task_struct;
|
|||||||
/* for sysctl */
|
/* for sysctl */
|
||||||
extern int print_fatal_signals;
|
extern int print_fatal_signals;
|
||||||
|
|
||||||
static inline void copy_siginfo(struct siginfo *to, struct siginfo *from)
|
static inline void copy_siginfo(struct siginfo *to, const struct siginfo *from)
|
||||||
{
|
{
|
||||||
if (from->si_code < 0)
|
|
||||||
memcpy(to, from, sizeof(*to));
|
memcpy(to, from, sizeof(*to));
|
||||||
else
|
|
||||||
/* _sigchld is currently the largest know union member */
|
|
||||||
memcpy(to, from, __ARCH_SI_PREAMBLE_SIZE + sizeof(from->_sifields._sigchld));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int copy_siginfo_to_user(struct siginfo __user *to, const struct siginfo *from);
|
int copy_siginfo_to_user(struct siginfo __user *to, const struct siginfo *from);
|
||||||
|
Reference in New Issue
Block a user