В связи с изменениями в компонентах 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 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|