Dmitry, I can't review the non-x86 changes in 1/7 - 4/7. As for this and the previous patch I see nothing bad after a quick glance. Just I have some concerns about the "future extensions", I'll write another email tomorrow. In particualar, I personally hate the very idea of copy_struct_from_user/check_zeroed_user ;) On 01/13, Dmitry V. Levin wrote: > > +ptrace_set_syscall_info_entry(struct task_struct *child, struct pt_regs *regs, > + struct ptrace_syscall_info *info) > +{ > + unsigned long args[ARRAY_SIZE(info->entry.args)]; > + int nr = info->entry.nr; > + int i; > + > + if (nr != info->entry.nr) > + return -ERANGE; > + > + for (i = 0; i < ARRAY_SIZE(args); i++) { > + args[i] = info->entry.args[i]; > + if (args[i] != info->entry.args[i]) > + return -ERANGE; > + } > + > + syscall_set_nr(child, regs, nr); > + /* > + * If the syscall number is set to -1, setting syscall arguments is not > + * just pointless, it would also clobber the syscall return value on > + * those architectures that share the same register both for the first > + * argument of syscall and its return value. > + */ > + if (nr != -1) > + syscall_set_arguments(child, regs, args); Thanks, much better than I tried to suggest in my reply to V1. But may be if (syscall_get_nr() != -1) syscall_set_arguments(...); will look a bit more consistent? Oleg.