Print this page
OS-3735 modstubs MAXNARG is too low.
*** 48,58 ****
* but worth it?!).
*
* NOTE: Use NO_UNLOAD_STUBs if the module is NOT unloadable once it is
* loaded.
*/
! #define MAXNARG 10
/*
* WARNING: there is no check for forgetting to write END_MODULE,
* and if you do, the kernel will most likely crash. Be careful
*
--- 48,58 ----
* but worth it?!).
*
* NOTE: Use NO_UNLOAD_STUBs if the module is NOT unloadable once it is
* loaded.
*/
! #define MAXNARG 12
/*
* WARNING: there is no check for forgetting to write END_MODULE,
* and if you do, the kernel will most likely crash. Be careful
*
*** 182,192 ****
pushq %rsi
pushq %rdx
pushq %rcx
pushq %r8
pushq %r9
! /* (next 4 args, if any, are already on the stack above %rbp) */
movq %r15, %rdi
call mod_hold_stub /* mod_hold_stub(mod_stub_info *) */
cmpl $-1, %eax /* error? */
jne .L1
movq 0x18(%r15), %rax
--- 182,192 ----
pushq %rsi
pushq %rdx
pushq %rcx
pushq %r8
pushq %r9
! /* (next 6 args, if any, are already on the stack above %rbp) */
movq %r15, %rdi
call mod_hold_stub /* mod_hold_stub(mod_stub_info *) */
cmpl $-1, %eax /* error? */
jne .L1
movq 0x18(%r15), %rax
*** 193,203 ****
call *%rax
addq $0x30, %rsp
jmp .L2
.L1:
/*
! * copy MAXNARG == 10 incoming arguments
*/
popq %r9
popq %r8
popq %rcx
popq %rdx
--- 193,203 ----
call *%rax
addq $0x30, %rsp
jmp .L2
.L1:
/*
! * copy MAXNARG == 12 incoming arguments
*/
popq %r9
popq %r8
popq %rcx
popq %rdx
*** 217,228 ****
movl $MAXNARG - 6 + 3, %r11d
pushq (%rsp, %r11, 8)
pushq (%rsp, %r11, 8)
pushq (%rsp, %r11, 8)
pushq (%rsp, %r11, 8)
call *(%r15) /* call the stub fn(arg, ..) */
! addq $0x20, %rsp /* pop off last 4 args */
pushq %rax /* save any return values */
pushq %rdx
movq %r15, %rdi
call mod_release_stub /* release hold on module */
popq %rdx /* restore return values */
--- 217,230 ----
movl $MAXNARG - 6 + 3, %r11d
pushq (%rsp, %r11, 8)
pushq (%rsp, %r11, 8)
pushq (%rsp, %r11, 8)
pushq (%rsp, %r11, 8)
+ pushq (%rsp, %r11, 8)
+ pushq (%rsp, %r11, 8)
call *(%r15) /* call the stub fn(arg, ..) */
! addq $0x30, %rsp /* pop off last 6 args */
pushq %rax /* save any return values */
pushq %rdx
movq %r15, %rdi
call mod_release_stub /* release hold on module */
popq %rdx /* restore return values */
*** 336,345 ****
--- 338,349 ----
movl $MAXNARG+1, %ecx
/ copy incoming arguments
pushl (%esp, %ecx, 4) / push MAXNARG times
pushl (%esp, %ecx, 4)
pushl (%esp, %ecx, 4)
+ pushl (%esp, %ecx, 4)
+ pushl (%esp, %ecx, 4)
pushl (%esp, %ecx, 4)
pushl (%esp, %ecx, 4)
pushl (%esp, %ecx, 4)
pushl (%esp, %ecx, 4)
pushl (%esp, %ecx, 4)