Критические изменения в версии 1.3
В связи с изменениями в компонентах SDK в версии 1.3, вам может быть необходимо внести изменения в прикладной код, разработанный с использованием версии KasperskyOS Community Edition 1.2, перед тем как использовать его с версией KasperskyOS Community Edition 1.3.
В версии 1.3 были введены следующие критические изменения в компоненты SDK:
- Из ядра KasperskyOS в составе SDK удалена поддержка счетчиков производительности.
- Из SDK удалены объявления функций:
fork
,exec*
,popen*
,pclose
. Использование этих функций приведет к ошибке при сборке. - Указание неверного имени IPC-канала в шаблоне файла init.yaml.in приводит к ошибке при сборке.
- Тулчейн в составе SDK переведен на использование компилятора Clang.
- В компоненте Mbed-TLS включены алгоритмы TLS 1.3. Необходимо вызывать функцию
psa_crypto_init()
перед первым использованием хеширующих механизмов. Для корректной работы библиотеки Mbed-TLS достаточно добавить вызовpsa_crypto_init()
перед первым вызовом любой функции Mbed-TLS. Эту функцию можно вызывать произвольное количество раз: если первый вызов проходит успешно, остальные вызовы также будут успешны. - Изменения в библиотеке kdf:
- удалены функции
KdfGetDeviceFromContainer()
иKdfEnumContainerNames()
; - функции
KdfGetDeviceListByTarget()
иKdfGetDeviceListByTargetSet()
теперь возвращают контейнер с дескриптором типаKdfDevContainerHandle
.
- удалены функции
- Из интерфейса ядра
Handle.idl
удален устаревший методSecurityDisconnect
. - Удален конфигурационный параметр
VFS_BUFFER_SPLIT_SIZE
. В качестве ограничения сверху при передаче данных в арене IPC в VFS будет использоватьсяVFS_BUFFER_SIZE
. Для конфигурирования размера I/O буфера (setbuf
) вводится новый параметрVFS_BUFSIZ
. Для чтения/записи данных большого размера появится возможность использовать буферы MDL. - В VFS добавлена поддержка прав доступа для файлов. Теперь при работе с файлами VFS будет проверять биты владельца (
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
возвращается только в случае ошибки, иначе даже в случае получения данных нулевого размера возвращается корректный указатель на память. - Значения IDL-типа string при передаче в IPC-сообщениях должны содержать завершающий нулевой байт, даже пустые строки. Строки из нуля байтов перестанут считаться валидными и будут отклоняться Kaspersky Security Module.
- Изменены прототипы функций:
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 () } } } } - В каждый EDL-файл в составе SDK, содержащий службу
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
.
- Удален метод
- Добавлен список поддерживаемых кодов (MIB) функции
sysctl()
. Вызов с кодами, отличными от поддерживаемых запрещен и возвращает кодENOSYS
. Все разрешенные коды переведены на отдельные интерфейсные методы компонента VFS (VfsNetConfig.idl
). При помощи политик безопасности можно разрешать только чтение или только запись, используя аргументvalOperation
IPC-запроса (кромеIpctlForwarding
,RtDump
,RtIflist
): 0 - запись, установка значения параметра; 1 - чтение параметра; 2 - запрос размера параметра)Поддерживаемые коды перечислены в таблице ниже.
Разрешенные коды функции sysctl()
Название параметра
Код MIB
Интерфейсный метод VFS
net.inet.ip.forwarding
CTL_NET, PF_INET, IPPROTO_IP, IPCTL_FORWARDING
IpctlForwarding
net.inet.ip.mtudisc
CTL_NET, PF_INET, IPPROTO_IP, IPCTL_MTUDISC
IpctlMtudisc
net.inet.ip.ttl
CTL_NET, PF_INET, IPPROTO_IP, IPCTL_DEFTTL
IpctlTtl
net.inet.tcp.keepcnt
CTL_NET, PF_INET, IPPROTO_TCP, TCPCTL_KEEPCNT
TcpctlKeepcnt
net.inet.tcp.keepidle
CTL_NET, PF_INET, IPPROTO_TCP, TCPCTL_KEEPIDLE
TcpctlKeepidle
net.inet.tcp.keepintvl
CTL_NET, PF_INET, IPPROTO_TCP, TCPCTL_KEEPINTVL
TcpctlKeepintvl
net.inet.tcp.mss_ifmtu
CTL_NET, PF_INET, IPPROTO_TCP, TCPCTL_MSS_IFMTU
TcpctlMssifmtu
net.inet.tcp.mssdflt
CTL_NET, PF_INET, IPPROTO_TCP, TCPCTL_MSSDFLT
TcpctlMssdflt
net.inet.tcp.recvspace
CTL_NET, PF_INET, IPPROTO_TCP, TCPCTL_RECVSPACE
TcpctlRecvspace
net.inet.tcp.sendspace
CTL_NET, PF_INET, IPPROTO_TCP, TCPCTL_SENDSPACE
TcpctlSendspace
net.inet.udp.recvspace
CTL_NET, PF_INET, IPPROTO_UDP, UDPCTL_RECVSPACE
UdpctlRecvspace
net.inet.udp.sendspace
CTL_NET, PF_INET, IPPROTO_UDP, UDPCTL_SENDSPACE
UdpctlSendspace
net.route.rtdump
CTL_NET, PF_ROUTE, NET_RT_DUMP
RtDump
net.route.rtiflist
CTL_NET, PF_ROUTE, NET_RT_IFLIST
RtIflist
net.inet.ip.dad_count
CTL_NET, PF_INET, IPPROTO_IP, IPCTL_DAD_COUNT
IpctlDadcount
kern.hostname
CTL_KERN, KERN_HOSTNAME
KernHostname