[KERNEL] Temporarily disable checks added in #8680.

More info in comments to syscall_file_system_lfn

git-svn-id: svn://kolibrios.org@8912 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Rustem Gimadutdinov (rgimad) 2021-06-21 21:31:19 +00:00
parent 0698439542
commit fc3c8d4ae0
2 changed files with 69 additions and 65 deletions

View File

@ -168,7 +168,7 @@ iglobal
dd syscall_move_window ; 67-Window move or resize dd syscall_move_window ; 67-Window move or resize
dd f68 ; 68-Some internal services dd f68 ; 68-Some internal services
dd sys_debug_services ; 69-Debug dd sys_debug_services ; 69-Debug
dd syscall_file_system_lfn ; 70-Common file system interface, version 2 dd file_system_lfn ; 70-Common file system interface, version 2
dd syscall_window_settings ; 71-Window settings dd syscall_window_settings ; 71-Window settings
dd sys_sendwindowmsg ; 72-Send window message dd sys_sendwindowmsg ; 72-Send window message
dd blit_32 ; 73-blitter; dd blit_32 ; 73-blitter;

View File

@ -26,69 +26,69 @@ maxPathLength = 1000h
image_of_eax EQU esp+32 image_of_eax EQU esp+32
image_of_ebx EQU esp+20 image_of_ebx EQU esp+20
; System function 70 security check ; ; System function 70 security check
align 4 ; align 4
proc file_system_is_operation_safe stdcall, inf_struct_ptr: dword ; proc file_system_is_operation_safe stdcall, inf_struct_ptr: dword
; in: ; ; in:
; inf_struct_ptr = pointer to information structure was given to sysfn70 ; ; inf_struct_ptr = pointer to information structure was given to sysfn70
; out: ZF = 1 if operation is safe ; ; out: ZF = 1 if operation is safe
; ZF = 0 if operation can cause kernel crash ; ; ZF = 0 if operation can cause kernel crash
push ebx ecx edx ; push ebx ecx edx
xor ecx, ecx ; ecx - length of target buffer ; xor ecx, ecx ; ecx - length of target buffer
mov ebx, [inf_struct_ptr] ; mov ebx, [inf_struct_ptr]
mov edx, [ebx + 16] ; base of target buffer ; mov edx, [ebx + 16] ; base of target buffer
cmp dword [ebx], 0 ; if 70.0 ; cmp dword [ebx], 0 ; if 70.0
jnz .case1 ; jnz .case1
mov ecx, dword [ebx + 12] ; mov ecx, dword [ebx + 12]
jmp .end_switch ; jmp .end_switch
.case1: ; .case1:
cmp dword [ebx], 1 ; if 70.1 ; cmp dword [ebx], 1 ; if 70.1
jnz .case2_3 ; jnz .case2_3
; ;mov ecx, 32
; cmp dword [ebx + 8], 1 ; check encoding
; jbe .case1_304 ; if encdoing <= 1 i.e cpp866
; mov ecx, 560 ; if unicode then bdvk block len is 560 bytes
; jmp .case1_end
; .case1_304:
; mov ecx, 304 ; if cp866 then bdvk block len is 304 bytes
; .case1_end:
; imul ecx, dword [ebx + 12] ; multiply bdvk length by their count
; add ecx, 32 ; add result header len
; jmp .end_switch
; .case2_3:
; cmp dword [ebx], 3
; ja .case5 ; if subfn > 3
; mov ecx, dword [ebx + 12]
; jmp .end_switch
; .case5:
; cmp dword [ebx], 5
; jnz .case6
; mov ecx, 40
; jmp .end_switch
; .case6:
; cmp dword [ebx], 6
; jnz .switch_none
; mov ecx, 32 ; mov ecx, 32
cmp dword [ebx + 8], 1 ; check encoding ; jmp .end_switch
jbe .case1_304 ; if encdoing <= 1 i.e cpp866
mov ecx, 560 ; if unicode then bdvk block len is 560 bytes
jmp .case1_end
.case1_304:
mov ecx, 304 ; if cp866 then bdvk block len is 304 bytes
.case1_end:
imul ecx, dword [ebx + 12] ; multiply bdvk length by their count
add ecx, 32 ; add result header len
jmp .end_switch
.case2_3: ; .switch_none:
cmp dword [ebx], 3 ; mov ecx, 1
ja .case5 ; if subfn > 3 ; test ecx, ecx
mov ecx, dword [ebx + 12] ; jmp .ret
jmp .end_switch
.case5: ; .end_switch:
cmp dword [ebx], 5 ; ;;
jnz .case6 ; stdcall is_region_userspace, edx, ecx
mov ecx, 40 ; .ret:
jmp .end_switch ; pop edx ecx ebx
; ret
.case6: ; endp
cmp dword [ebx], 6
jnz .switch_none
mov ecx, 32
jmp .end_switch
.switch_none:
mov ecx, 1
test ecx, ecx
jmp .ret
.end_switch:
;;
stdcall is_region_userspace, edx, ecx
.ret:
pop edx ecx ebx
ret
endp
syscall_fileSystemUnicode: syscall_fileSystemUnicode:
; in: ebx -> f.80 parameter structure ; in: ebx -> f.80 parameter structure
@ -101,16 +101,20 @@ syscall_fileSystemUnicode:
@@: @@:
jmp fileSystemUnicode jmp fileSystemUnicode
syscall_file_system_lfn: ; temporarily commented out cause acpi driver (drivers/devman) uses sysfn70 via 0x40
; in: ebx -> f.70 parameter structure ; so because drivers it kernel space, pointer checking fails
stdcall file_system_is_operation_safe, ebx ; TODO solution: add filesystem functions without pointer checking to kernel exports
jnz @f ; and make the driver use them, not int 0x40
; syscall_file_system_lfn: ; with user pointer correctness checking
; ; in: ebx -> f.70 parameter structure
; stdcall file_system_is_operation_safe, ebx
; jnz @f
DEBUGF 1, "sysfn70 addr error\n" ; DEBUGF 1, "sysfn70 addr error\n"
mov dword [image_of_eax], ERROR_MEMORY_POINTER ; mov dword [image_of_eax], ERROR_MEMORY_POINTER
ret ; ret
@@: ; @@:
jmp file_system_lfn ; jmp file_system_lfn
; System function 70 ; System function 70