forked from KolibriOS/kolibrios
SysFn 9 security fix: now apps cannot destroy kernel memory via passing illegal address in ebx
Update docs on SysFn 9 git-svn-id: svn://kolibrios.org@8246 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
a75d4696ea
commit
5d4528238c
@ -293,6 +293,9 @@ picture rb Xsize*Ysize*4 ; 32 бита
|
|||||||
ecx = -1 - получить информацию о текущем потоке
|
ecx = -1 - получить информацию о текущем потоке
|
||||||
Возвращаемое значение:
|
Возвращаемое значение:
|
||||||
* eax = максимальный номер слота потока
|
* eax = максимальный номер слота потока
|
||||||
|
но, если указатель в ebx недопустимый, например,
|
||||||
|
регион [ebx, ebx + 0x4C) пересекается с памятью ядра,
|
||||||
|
то тогда функция возвращает -1
|
||||||
* буфер, на который указывает ebx, содержит следующую информацию:
|
* буфер, на который указывает ebx, содержит следующую информацию:
|
||||||
* +0: dword: использование процессора (сколько тактов в секунду
|
* +0: dword: использование процессора (сколько тактов в секунду
|
||||||
уходит на исполнение именно этого потока)
|
уходит на исполнение именно этого потока)
|
||||||
|
@ -283,6 +283,9 @@ Parameters:
|
|||||||
ecx = -1 - get information on the current thread
|
ecx = -1 - get information on the current thread
|
||||||
Returned value:
|
Returned value:
|
||||||
* eax = maximum number of the slot of a thread
|
* eax = maximum number of the slot of a thread
|
||||||
|
but if pointer in ebx is illegal, for example,
|
||||||
|
[ebx, ebx + 0x4C) region intersects with kernel memory,
|
||||||
|
then function returns -1
|
||||||
* buffer pointed to by ebx contains the following information:
|
* buffer pointed to by ebx contains the following information:
|
||||||
* +0: dword: usage of the processor (how many time units
|
* +0: dword: usage of the processor (how many time units
|
||||||
per second leaves on execution of this thread)
|
per second leaves on execution of this thread)
|
||||||
|
@ -3159,6 +3159,14 @@ sys_cpuusage:
|
|||||||
; +26 dword used mem
|
; +26 dword used mem
|
||||||
; +30 dword PID , process idenfification number
|
; +30 dword PID , process idenfification number
|
||||||
;
|
;
|
||||||
|
; if given memory address belongs to kernel then error
|
||||||
|
push ebx
|
||||||
|
mov eax, ebx
|
||||||
|
mov ebx, 0x4C
|
||||||
|
call is_region_userspace
|
||||||
|
pop ebx
|
||||||
|
test eax, eax
|
||||||
|
jz .addr_error
|
||||||
|
|
||||||
cmp ecx, -1 ; who am I ?
|
cmp ecx, -1 ; who am I ?
|
||||||
jne .no_who_am_i
|
jne .no_who_am_i
|
||||||
@ -3249,6 +3257,10 @@ sys_cpuusage:
|
|||||||
mov [esp+32], eax
|
mov [esp+32], eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
.addr_error: ; if given memory address is illegal
|
||||||
|
mov eax, -1
|
||||||
|
ret
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
sys_clock:
|
sys_clock:
|
||||||
cli
|
cli
|
||||||
|
Loading…
Reference in New Issue
Block a user