diff options
author | Michal Simek <michal.simek@xilinx.com> | 2013-08-13 19:00:53 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-08-20 11:43:02 -0400 |
commit | 4f01c72ef36d3305d6273fe7f1f6670c52745c3d (patch) | |
tree | ab71ffb7a755c453f84a2aaf37fe285d0bcdcd31 /kernel | |
parent | 0dcf19b4fb41449de4d1f953f86aa6a90accdff5 (diff) |
microblaze: fix clone syscall
commit dfa9771a7c4784bafd0673bc7abcee3813088b77 upstream.
Fix inadvertent breakage in the clone syscall ABI for Microblaze that
was introduced in commit f3268edbe6fe ("microblaze: switch to generic
fork/vfork/clone").
The Microblaze syscall ABI for clone takes the parent tid address in the
4th argument; the third argument slot is used for the stack size. The
incorrectly-used CLONE_BACKWARDS type assigned parent tid to the 3rd
slot.
This commit restores the original ABI so that existing userspace libc
code will work correctly.
All kernel versions from v3.8-rc1 were affected.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/fork.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 987b28a1f01b..ffbc0904794e 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -1675,6 +1675,12 @@ SYSCALL_DEFINE5(clone, unsigned long, newsp, unsigned long, clone_flags, | |||
1675 | int __user *, parent_tidptr, | 1675 | int __user *, parent_tidptr, |
1676 | int __user *, child_tidptr, | 1676 | int __user *, child_tidptr, |
1677 | int, tls_val) | 1677 | int, tls_val) |
1678 | #elif defined(CONFIG_CLONE_BACKWARDS3) | ||
1679 | SYSCALL_DEFINE6(clone, unsigned long, clone_flags, unsigned long, newsp, | ||
1680 | int, stack_size, | ||
1681 | int __user *, parent_tidptr, | ||
1682 | int __user *, child_tidptr, | ||
1683 | int, tls_val) | ||
1678 | #else | 1684 | #else |
1679 | SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp, | 1685 | SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp, |
1680 | int __user *, parent_tidptr, | 1686 | int __user *, parent_tidptr, |