1.Add procedure check exception 12 (overflow stack) 2.Add info in reference of function 68,24 (rus) 3.Change max limit size of the load file to 1G, for load big WinApp files. 4.Fix procedure close tcp socket:

When WinApp create/close socket in loop =>  crash core Kolibri

git-svn-id: svn://kolibrios.org@9976 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Jurgen 2024-02-16 18:07:13 +00:00
parent a0d93dfb0c
commit 34d6f8189f
4 changed files with 65 additions and 17 deletions

View File

@ -511,7 +511,7 @@ proc load_file_umode stdcall, file_name:dword
jnz .err_1
mov eax, [file_size]
cmp eax, 1024*1024*16 ;to be enough for anybody (c)
cmp eax, 1024*1024*1024 ;to be enough for anybody 1Gbt(c)
ja .err_1
;it is very likely that the file is packed
stdcall kernel_alloc, [file_size] ;with kpack, so allocate memory from kernel heap

View File

@ -201,11 +201,59 @@ exc_c: ; exceptions (all but 7th - #NM)
iretd
IRetToUserHook:
cmp ebx, 12
je .ex_stack
cmp ebx, 14
jne .nostack
mov ecx, cr2
sub ecx, [reg_esp3]
jg .nostack
add ecx, 1000h
jl .nostack
.ex_stack:
xor ecx, ecx
mov ecx, [ecx+APP_HEADER_01_.except_stack_top]
test ecx, ecx
jle .nostack
xchg edi, eax
sub ecx, sizeof.EXCEPT_STACK
push ebx
push 1
pop ebx
.lock:
lock bts [ecx+EXCEPT_STACK.LockAccess], 0
jnc .lock1
call delay_hs_unprotected
jmp .lock
.lock1:
pop ebx
cmp ebx, 14
jne .ex12
btr [esi+APPDATA.except_mask], 12
jc .ex_stack1
xchg eax, edi
jmp .nostack
.ex_stack1:
bts [esi+APPDATA.except_mask], ebx
dec ebx
dec ebx
.ex12:
mov [ecx+EXCEPT_STACK.ExcCode], ebx
mov eax, ecx
xchg [reg_esp3], eax
mov [ecx+EXCEPT_STACK.OldESP], eax
mov eax, cr2
mov [ecx+EXCEPT_STACK.RegCR2], eax
xchg edi, [reg_eip]
mov [ecx+EXCEPT_STACK.RegEIP], edi
jmp .end
.nostack:
xchg eax, [reg_eip]
sub dword[reg_esp3], 8
mov edi, [reg_esp3]
stosd
mov [edi], ebx
.end:
restore_ring3_context
; simply return control to interrupted process
unknown_interrupt:

View File

@ -3608,8 +3608,13 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
приостановка с уведомлением отлаживающего приложения иначе.
* После завершения критических действий в обработчике пользователя
восстановление бита маски данного исключения можно сделать
подфункцией 25. Сброс флагов исключений в модулях FPU и XMM также
возлагается на обработчик пользователя.
подфункцией 25. Сброс флагов исключений в модулях FPU и XMM также возлагается на обработчик пользователя.
Внимание:
Если пользовательский обработчик обрабатывает исключение переполнения стека (#SS), то должен быть установлен адрес резервного стека в заголовке программы (см. структуру APP_HEADER_01_ taskman.inc).
В этот резервный стек будут записаны дополнительные данные (см. структуру EXCEPT_STACK sys32.inc).
Пользовательский бработчик,при завершении обработки этого исключения, должен дополнительно обнулить бит занятости (бит номер 0) резервного стека в поле LockAccess структуры EXCEPT_STACK.
---------------------- Константы для регистров: ----------------------
eax - SF_SYS_MISC (68)

View File

@ -757,22 +757,17 @@ socket_close:
jne .free
cmp [eax + SOCKET.Protocol], IP_PROTO_TCP
je .tcp
jne .free
test [eax + SOCKET.state], SS_ISCONNECTED
jz .free
test [eax + SOCKET.state], SS_ISDISCONNECTING
jnz .free
call tcp_disconnect
test eax, eax
jz .end
.free:
call socket_free
ret
.tcp:
test [eax + SOCKET.state], SS_ISCONNECTED
jz @f
test [eax + SOCKET.state], SS_ISDISCONNECTING
jnz @f
call tcp_disconnect
@@:
; TODO:
; ...
; call socket_free
.end:
ret