Ограничения поддержки POSIX

21 мая 2024

ID posix_uns_ifaces

В KasperskyOS ограниченно реализован POSIX с ориентацией на стандарт POSIX.1-2008. Прежде всего ограничения связаны с обеспечением безопасности.

Отсутствует поддержка XSI и опциональной функциональности.

Ограничения затрагивают:

  • взаимодействие между процессами;
  • взаимодействие между потоками исполнения посредством сигналов;
  • асинхронный ввод-вывод;
  • использование робастных мьютексов;
  • работу с терминалом;
  • работу с оболочкой;
  • управление дескрипторами файлов;
  • использование таймеров;
  • получение системных параметров.

Ограничения представлены:

  • нереализованными интерфейсами;
  • интерфейсами, которые реализованы с отклонениями от стандарта POSIX.1-2008;
  • интерфейсами-заглушками, которые не выполняют никаких действий, кроме присвоения переменной errno значения ENOSYS и возвращения значения -1.

В KasperskyOS сигналы не могут прервать системные вызовы Call(), Recv(), Reply(), которые обеспечивают работу библиотек, реализующих интерфейс POSIX.

Ядро KasperskyOS не посылает сигналы.

Ограничения взаимодействия между процессами

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

fork()

Создать новый (дочерний) процесс.

Не реализован.

unistd.h

pthread_

atfork()

Зарегистрировать обработчики, которые вызываются перед и после создания дочернего процесса.

Не реализован.

pthread.h

wait()

Ожидать остановки или завершения дочернего процесса.

Заглушка.

sys/wait.h

waitid()

Ожидать изменения состояния дочернего процесса.

Не реализован.

sys/wait.h

waitpid()

Ожидать остановки или завершения дочернего процесса.

Заглушка.

sys/wait.h

execl()

Запустить исполняемый файл.

Заглушка.

unistd.h

execle()

Запустить исполняемый файл.

Заглушка.

unistd.h

execlp()

Запустить исполняемый файл.

Заглушка.

unistd.h

execv()

Запустить исполняемый файл.

Не реализован.

unistd.h

execve()

Запустить исполняемый файл.

Не реализован.

unistd.h

execvp()

Запустить исполняемый файл.

Заглушка.

unistd.h

fexecve()

Запустить исполняемый файл.

Заглушка.

unistd.h

setpgid()

Перевести процесс в другую группу или создать группу.

Заглушка.

unistd.h

setsid()

Создать сессию.

Заглушка.

unistd.h

getpgrp()

Получить идентификатор группы вызывающего процесса.

Заглушка.

unistd.h

getpgid()

Получить идентификатор группы.

Заглушка.

unistd.h

getppid()

Получить идентификатор родительского процесса.

Заглушка.

unistd.h

getsid()

Получить идентификатор сессии.

Заглушка.

unistd.h

times()

Получить значения времени для процесса и его потомков.

Заглушка.

sys/times.h

kill()

Послать сигнал процессу или группе процессов.

Можно посылать только сигнал SIGTERM. Параметр pid игнорируется.

signal.h

pause()

Ожидать сигнала.

Заглушка.

unistd.h

sigpending()

Проверить наличие полученных заблокированных сигналов.

Не реализован.

signal.h

sigqueue()

Послать сигнал процессу.

Не реализован.

signal.h

sigtimedwait()

Ожидать сигнала из заданного набора сигналов.

Не реализован.

signal.h

sigwaitinfo()

Ожидать сигнала из заданного набора сигналов.

Не реализован.

signal.h

sem_init()

Создать неименованный семафор.

Нельзя создать неименованный семафор для синхронизации между процессами. Если передать ненулевое значение через параметр pshared, то только вернет значение -1 и присвоит переменной errno значение ENOTSUP.

semaphore.h

sem_open()

Создать/открыть именованный семафор.

Нельзя открыть именованный семафор, который был создан другим процессом. Именованные семафоры (как и неименованные) являются локальными, то есть они доступны только тому процессу, который их создал.

semaphore.h

pthread_

spin_init()

Создать спин-блокировку.

Нельзя создать спин-блокировку для синхронизации между процессами. Если передать значение PTHREAD_PROCESS_SHARED через параметр pshared, то это значение будет проигнорировано.

pthread.h

mmap()

Отобразить в память.

Нельзя выполнить отображение в память для взаимодействия между процессами. Если передать значения MAP_SHARED и PROT_WRITE через параметры flags и prot соответственно, то только вернет значение MAP_FAILED и присвоит переменной errno значение EACCES. Для остальных возможных значений параметра prot значение MAP_SHARED параметра flags игнорируется. Кроме того, через параметр prot нельзя передавать сочетания флагов PROT_WRITE|PROT_EXEC и PROT_READ|PROT_WRITE|PROT_EXEC. В этом случае только вернет значение MAP_FAILED и присвоит переменной errno значение ENOMEM.

sys/mman.h

mprotect()

Задать права доступа к памяти.

Для целей безопасности некоторые конфигурации ядра KasperskyOS запрещают предоставлять доступ к регионам виртуальной памяти на запись и исполнение одновременно. Если при использовании такой конфигурации ядра через параметр prot передать значение PROT_WRITE|PROT_EXEC, то только вернет значение -1 и присвоит переменной errno значение ENOTSUP.

sys/mman.h

pipe()

Создать неименованный канал.

Нельзя использовать неименованный канал для передачи данных между процессами. Неименованные каналы являются локальными, то есть они доступны только тому процессу, который их создал.

unistd.h

mkfifo()

Создать специальный файл FIFO (именованный канал).

Заглушка.

sys/stat.h

mkfifoat()

Создать специальный файл FIFO (именованный канал).

Не реализован.

sys/stat.h

Ограничения взаимодействия между потоками исполнения посредством сигналов

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

pthread_kill()

Послать сигнал потоку исполнения.

Нельзя послать сигнал потоку исполнения. Если передать номер сигнала через параметр sig, то только возвращается значение ENOSYS.

signal.h

siglongjmp()

Восстановить состояние потока управления и маску сигналов.

Не реализован.

setjmp.h

sigsetjmp()

Сохранить состояние потока управления и маску сигналов.

Не реализован.

setjmp.h

Ограничения асинхронного ввода-вывода

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

aio_cancel()

Отменить запросы ввода-вывода, которые ожидают обработки.

Не реализован.

aio.h

aio_error()

Получить ошибку операции асинхронного ввода-вывода.

Не реализован.

aio.h

aio_fsync()

Запросить выполнение операций ввода-вывода.

Не реализован.

aio.h

aio_read()

Запросить чтение из файла.

Не реализован.

aio.h

aio_return()

Получить статус операции асинхронного ввода-вывода.

Не реализован.

aio.h

aio_suspend()

Ожидать завершения операций асинхронного ввода-вывода.

Не реализован.

aio.h

aio_write()

Запросить запись в файл.

Не реализован.

aio.h

lio_listio()

Запросить выполнение набора операций ввода-вывода.

Не реализован.

aio.h

Ограничения использования робастных мьютексов

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

pthread_mutex_consistent()

Вернуть робастный мьютекс в консистентное состояние.

Не реализован.

pthread.h

pthread_mutexattr_getrobust()

Получить атрибут робастности мьютекса.

Не реализован.

pthread.h

pthread_mutexattr_setrobust()

Задать атрибут робастности мьютекса.

Не реализован.

pthread.h

Ограничения работы с терминалом

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

ctermid()

Получить путь к файлу управляющего терминала.

Только возвращает или передает через параметр s пустую строку.

stdio.h

tcsetattr()

Задать параметры терминала.

Скорость ввода, скорость вывода и другие параметры, специфичные для аппаратных терминалов, игнорируются.

termios.h

tcdrain()

Ожидать завершения вывода.

Только возвращает значение -1.

termios.h

tcflow()

Приостановить или возобновить прием или передачу данных.

Приостановка вывода и запуск приостановленного вывода не поддерживаются.

termios.h

tcflush()

Очистить очередь ввода или очередь вывода, или обе эти очереди.

Только возвращает значение -1.

termios.h

tcsendbreak()

Разорвать соединение с терминалом на заданное время.

Только возвращает значение -1.

termios.h

ttyname()

Получить путь к файлу терминала.

Только возвращает нулевой указатель.

unistd.h

ttyname_r()

Получить путь к файлу терминала.

Только возвращает значение ошибки.

unistd.h

tcgetpgrp()

Получить идентификатор группы процессов, использующих терминал.

Только возвращает значение -1.

unistd.h

tcsetpgrp()

Задать идентификатор группы процессов, использующих терминал.

Только возвращает значение -1.

unistd.h

tcgetsid()

Получить идентификатор группы процессов для лидера сессии, связанной с терминалом.

Только возвращает значение -1.

termios.h

Ограничения работы с оболочкой

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

popen()

Создать дочерний процесс для выполнения команды и неименованный канал с этим процессом.

Только присваивает переменной errno значение ENOSYS и возвращает значение NULL.

stdio.h

pclose()

Закрыть неименованный канал с дочерним процессом, созданным popen(), и ожидать завершения дочернего процесса.

Нельзя использовать, так как popen() всегда возвращает NULL вместо дескриптора неименованного канала, который является входными параметром для pclose().

stdio.h

system()

Создать дочерний процесс для выполнения команды.

Заглушка.

stdlib.h

wordexp()

Раскрыть строку как в оболочке.

Не реализован.

wordexp.h

wordfree()

Освободить память, выделенную для результатов вызова wordexp().

Не реализован.

wordexp.h

Ограничения управления дескрипторами файлов

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

dup()

Сделать копию дескриптора открытого файла.

Поддерживаются дескрипторы обычных файлов, стандартных потоков ввода-вывода, сокетов и каналов. Не гарантируется, что будет получен наименьший свободный дескриптор.

fcntl.h

dup2()

Сделать копию дескриптора открытого файла.

Поддерживаются дескрипторы обычных файлов, стандартных потоков ввода-вывода, сокетов и каналов. Через параметр fildes2 нужно передавать дескриптор открытого файла.

fcntl.h

Ограничения использования таймеров

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

clock_gettime()

Получить значение времени.

Если передать значение CLOCK_PROCESS_CPUTIME_ID или CLOCK_THREAD_CPUTIME_ID через параметр clock_id, то только вернет значение -1 и присвоит переменной errno значение EINVAL.

time.h

clock()

Получить процессорное время, затраченное на исполнение вызывающего процесса.

Возвращает время с момента запуска ядра KasperskyOS в миллисекундах.

time.h

Получение системных параметров

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

confstr()

Получить системный параметр.

Заглушка.

unistd.h

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!