From 4e919c4eb5104cf8e42be8e91455154ceba01f52 Mon Sep 17 00:00:00 2001 From: "Rustem Gimadutdinov (rgimad)" Date: Tue, 24 Nov 2020 12:49:42 +0000 Subject: [PATCH] SysFn 18.13 security fix: now apps cannot destroy kernel memory via passing illegal address in ecx Update docs on SysFn 18.13 git-svn-id: svn://kolibrios.org@8247 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/docs/sysfuncr.txt | 8 ++++++++ kernel/trunk/docs/sysfuncs.txt | 8 ++++++++ kernel/trunk/kernel.asm | 10 ++++++++++ 3 files changed, 26 insertions(+) diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index b47da8c798..5a0118e20a 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -956,6 +956,14 @@ picture rb Xsize*Ysize*4 ; 32 бита информация Возвращаемое значение: * функция не возвращает значения + но, если указатель в ecx недопустимый, например, + регион [ecx, ecx + 9) пересекается с памятью ядра, + то тогда функция возвращает -1 +Замечания: + * В данный момент используется только часть буфера размером + 9 байт. Тем не менее рекомендуется использовать буфер + размером 16 байт для будущей совместимости, в будущем могут быть + добавлены некоторые поля. Структура буфера: db a,b,c,d для версии a.b.c.d db 0: зарезервировано diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index 1a1e4e80ff..88e76e756e 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -949,6 +949,14 @@ Parameters: the information will be placed Returned value: * function does not return value + but if pointer in ecx is illegal, for example, + [ecx, ecx + 9) region intersects with kernel memory, + then function returns -1 +Remarks: + * At the moment only the part of the buffer by a size + 9 bytes is used. Nevertheless it is recommended to use + 16 byte buffer for the future compatibility, in the future + some fields can be added. Structure of the buffer: db a,b,c,d for version a.b.c.d db 0: reserved diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index 4778975648..f636636bf7 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -2455,11 +2455,21 @@ sysfn_lastkey: ; 18.12 = return 0 (backward compatibility) ret ;------------------------------------------------------------------------------ sysfn_getversion: ; 18.13 = get kernel ID and version + ; if given memory address belongs to kernel then error + mov eax, ecx + mov ebx, version_end-version_inf + call is_region_userspace + test eax, eax + jz .addr_error + mov edi, ecx mov esi, version_inf mov ecx, version_end-version_inf rep movsb ret +.addr_error: ; if given memory address is illegal + mov eax, -1 + ret ;------------------------------------------------------------------------------ sysfn_waitretrace: ; 18.14 = sys wait retrace ;wait retrace functions