В связи с изменениями в компонентах SDK в версии 1.3, вам может быть необходимо внести изменения в прикладной код, разработанный с использованием версии KasperskyOS Community Edition 1.2, перед тем как использовать его с версией KasperskyOS Community Edition 1.3.
В версии 1.3 были введены следующие критические изменения в компоненты SDK:
fork
, exec*
, popen*
, pclose
. Использование этих функций приведет к ошибке при сборке. psa_crypto_init()
перед первым использованием хеширующих механизмов. Для корректной работы библиотеки Mbed-TLS достаточно добавить вызов psa_crypto_init()
перед первым вызовом любой функции Mbed-TLS. Эту функцию можно вызывать произвольное количество раз: если первый вызов проходит успешно, остальные вызовы также будут успешны.KdfGetDeviceFromContainer()
и KdfEnumContainerNames()
;KdfGetDeviceListByTarget()
и KdfGetDeviceListByTargetSet()
теперь возвращают контейнер с дескриптором типа KdfDevContainerHandle
.Handle.idl
удален устаревший метод SecurityDisconnect
.VFS_BUFFER_SPLIT_SIZE
. В качестве ограничения сверху при передаче данных в арене IPC в VFS будет использоваться VFS_BUFFER_SIZE
. Для конфигурирования размера I/O буфера (setbuf
) вводится новый параметр VFS_BUFSIZ
. Для чтения/записи данных большого размера появится возможность использовать буферы MDL.S_IRUSR
, S_IWUSR
, S_IXUSR
) у файла и разрешать/запрещать те или иные операции. При создании файла и каталога нужно обязательно проверять, что все биты выставляются корректно:open(file, O_RDWR | O_CREAT, (S_IRUSR | S_IWUSR)
(Read | Write | Execute)
. Бит Execute
отвечает за возможность поиска файлов в директории: mkdir(dir, S_IRWXU)
Поскольку функция open()
позволяет создавать файлы не указывая данные биты, то может возникнуть ситуация, что ранее созданные файлы могут перестать открываться с ошибкой EACCESS
. Изменить права у файла можно с помощью функции chmod()
.
Driver.idl
метод GetDeviceEvents()
переименован в AwaitDeviceEvents()
.kl_drivers_Driver *KdfServerInit(KdfServerData *data)
заменена на kl_drivers_Driver *KdfServerInit(void)
.Task::FreeSelfEnv
стал заглушкой, которая возвращает rcUimplemented
, а функции KnTaskFreeEnv
и KnTaskGetEnv
перестали быть потокобезопасными.AF_ROUTE
сокеты запрещена. Теперь при попытке записи в AF_ROUTE
сокет будет возвращена ошибка EACCESS
. Для добавления/удаления маршрутов необходимо использовать ioctl()
и структуру ortentry
.nk_arena_get()
. RTL_NULL
возвращается только в случае ошибки, иначе даже в случае получения данных нулевого размера возвращается корректный указатель на память.KosString KosCreateStringEx(KosStringRoot *root, const char *str)
изменен на Retcode KosCreateStringEx(KosStringRoot *root, const char *str, KosString *outStr)
;KosString KosCreateString(const char *str)
изменен на Retcode KosCreateString(const char *str, KosString *outStr)
.task.Task
добавлен новый метод GetPid
, который всегда используется при создании процесса.В результате при строго настроенной политики безопасности с жестким ограничением методов вызов EntityInit(Ex)
начнет возвращать ошибку. Необходимо в политике добавить новый метод в разрешенные.
Пример:
request dst=kl.core.Core {
match endpoint=task.Task {
match method=GetPid {
match src=Einit { grant () }
}
}
}
kl.drivers.Block
, также добавлена служба типа kl.drivers.Driver
.Например, для ATA.edl
результат будет выглядеть так:
entity kl.drivers.ATA
security kl.drivers.block.Security
endpoints {
driver : kl.drivers.Driver
ata: kl.drivers.Block
}
Block.idl
:Fini()
.EnumPorts()
. Следует использовать метод GetDeviceList()
службы kl.drivers.Driver
.Open()
. Следует использовать метод OpenDevice()
службы kl.drivers.Driver
.Close()
. Следует использовать метод CloseDevice()
службы kl.drivers.Driver
.sysctl()
. Вызов с кодами, отличными от поддерживаемых запрещен и возвращает код ENOSYS
. Все разрешенные коды переведены на отдельные интерфейсные методы компонента VFS (VfsNetConfig.idl
). При помощи политик безопасности можно разрешать только чтение или только запись, используя аргумент valOperation
IPC-запроса (кроме IpctlForwarding
, RtDump
, RtIflist
): 0 - запись, установка значения параметра; 1 - чтение параметра; 2 - запрос размера параметра)Поддерживаемые коды перечислены в таблице ниже.
Разрешенные коды функции sysctl()
Название параметра |
Код MIB |
Интерфейсный метод VFS |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|