| .. | .. |
|---|
| 55 | 55 | |
|---|
| 56 | 56 | static inline void syscall_get_arguments(struct task_struct *task, |
|---|
| 57 | 57 | struct pt_regs *regs, |
|---|
| 58 | | - unsigned int i, unsigned int n, |
|---|
| 59 | 58 | unsigned long *args) |
|---|
| 60 | 59 | { |
|---|
| 61 | | - if (n == 0) |
|---|
| 62 | | - return; |
|---|
| 60 | + args[0] = regs->ARM_ORIG_r0; |
|---|
| 61 | + args++; |
|---|
| 63 | 62 | |
|---|
| 64 | | - if (i + n > SYSCALL_MAX_ARGS) { |
|---|
| 65 | | - unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i; |
|---|
| 66 | | - unsigned int n_bad = n + i - SYSCALL_MAX_ARGS; |
|---|
| 67 | | - pr_warn("%s called with max args %d, handling only %d\n", |
|---|
| 68 | | - __func__, i + n, SYSCALL_MAX_ARGS); |
|---|
| 69 | | - memset(args_bad, 0, n_bad * sizeof(args[0])); |
|---|
| 70 | | - n = SYSCALL_MAX_ARGS - i; |
|---|
| 71 | | - } |
|---|
| 72 | | - |
|---|
| 73 | | - if (i == 0) { |
|---|
| 74 | | - args[0] = regs->ARM_ORIG_r0; |
|---|
| 75 | | - args++; |
|---|
| 76 | | - i++; |
|---|
| 77 | | - n--; |
|---|
| 78 | | - } |
|---|
| 79 | | - |
|---|
| 80 | | - memcpy(args, ®s->ARM_r0 + i, n * sizeof(args[0])); |
|---|
| 63 | + memcpy(args, ®s->ARM_r0 + 1, 5 * sizeof(args[0])); |
|---|
| 81 | 64 | } |
|---|
| 82 | 65 | |
|---|
| 83 | 66 | static inline void syscall_set_arguments(struct task_struct *task, |
|---|
| 84 | 67 | struct pt_regs *regs, |
|---|
| 85 | | - unsigned int i, unsigned int n, |
|---|
| 86 | 68 | const unsigned long *args) |
|---|
| 87 | 69 | { |
|---|
| 88 | | - if (n == 0) |
|---|
| 89 | | - return; |
|---|
| 70 | + regs->ARM_ORIG_r0 = args[0]; |
|---|
| 71 | + args++; |
|---|
| 90 | 72 | |
|---|
| 91 | | - if (i + n > SYSCALL_MAX_ARGS) { |
|---|
| 92 | | - pr_warn("%s called with max args %d, handling only %d\n", |
|---|
| 93 | | - __func__, i + n, SYSCALL_MAX_ARGS); |
|---|
| 94 | | - n = SYSCALL_MAX_ARGS - i; |
|---|
| 95 | | - } |
|---|
| 96 | | - |
|---|
| 97 | | - if (i == 0) { |
|---|
| 98 | | - regs->ARM_ORIG_r0 = args[0]; |
|---|
| 99 | | - args++; |
|---|
| 100 | | - i++; |
|---|
| 101 | | - n--; |
|---|
| 102 | | - } |
|---|
| 103 | | - |
|---|
| 104 | | - memcpy(®s->ARM_r0 + i, args, n * sizeof(args[0])); |
|---|
| 73 | + memcpy(®s->ARM_r0 + 1, args, 5 * sizeof(args[0])); |
|---|
| 105 | 74 | } |
|---|
| 106 | 75 | |
|---|
| 107 | | -static inline int syscall_get_arch(void) |
|---|
| 76 | +static inline int syscall_get_arch(struct task_struct *task) |
|---|
| 108 | 77 | { |
|---|
| 109 | 78 | /* ARM tasks don't change audit architectures on the fly. */ |
|---|
| 110 | 79 | return AUDIT_ARCH_ARM; |
|---|