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)