.. | .. |
---|
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; |
---|