POSIX support limitations
KasperskyOS has a limited implementation of POSIX oriented toward the POSIX.1-2008 standard. These limitations are primarily due to security precautions.
There is no XSI support or optional functionality.
Limitations affect the following:
- Interaction between processes
- Interaction between threads via signals
- Asynchronous input/output
- Use of robust mutexes
- Terminal operations
- Shell operations
- File handle management
- Clock usage
- Getting system parameters
Limitations include:
- Unimplemented interfaces
- Interfaces that are implemented with deviations from the POSIX.1-2008 standard
- Stub interfaces that do not perform any operations except assign the
ENOSYS
value to theerrno
variable and return the value-1
In KasperskyOS, signals cannot interrupt the Call()
, Recv()
, and Reply()
system calls that support the operation of libraries that implement the POSIX interface.
The KasperskyOS kernel does not transmit signals.
Limitations on interaction between processes
Interface | Purpose | Implementation | Header file based on the POSIX.1-2008 standard |
---|---|---|---|
| Create a new (child) process. | Not implemented |
|
| Register the handlers that are called before and after the child process is created. | Not implemented |
|
| Wait for the child process to stop or complete. | Stub |
|
| Wait for the state of the child process to change. | Not implemented |
|
| Wait for the child process to stop or complete. | Stub |
|
| Run the executable file. | Stub |
|
| Run the executable file. | Stub |
|
| Run the executable file. | Stub |
|
| Run the executable file. | Not implemented |
|
| Run the executable file. | Not implemented |
|
| Run the executable file. | Stub |
|
| Run the executable file. | Stub |
|
| Move the process to another group or create a group. | Stub |
|
| Create a session. | Stub |
|
| Get the group ID of the calling process. | Stub |
|
| Get the group ID. | Stub |
|
| Get the ID of the parent process. | Stub |
|
| Get the session ID. | Stub |
|
| Get the time values for the process and its descendants. | Stub |
|
| Send a signal to the process or group of processes. | Only the |
|
| Wait for a signal. | Stub |
|
| Check for received blocked signals. | Not implemented |
|
| Send a signal to the process. | Not implemented |
|
| Wait for a signal from the defined set of signals. | Not implemented |
|
| Wait for a signal from the defined set of signals. | Not implemented |
|
| Create an unnamed semaphore. | You cannot create an unnamed semaphore for synchronization between processes. If a non-zero value is passed through the |
|
| Create/open a named semaphore. | You cannot open a named semaphore that was created by another process. Named semaphores (like unnamed semaphores) are local, which means that they are accessible only to the process that created them. |
|
| Create a spin lock. | You cannot create a spin lock for synchronization between processes. If the |
|
| Map to memory. | You cannot perform memory mapping for interaction between processes. If the |
|
| Define the memory access permissions. | For security purposes, some configurations of the KasperskyOS kernel prohibit granting simultaneous write-and-execute access to virtual memory regions. If this type of kernel configuration is in use and you pass the |
|
| Create an unnamed channel. | You cannot use an unnamed channel for data transfer between processes. Unnamed channels are local, which means that they are accessible only to the process that created them. |
|
| Create a special FIFO file (named channel). | Stub |
|
| Create a special FIFO file (named channel). | Not implemented |
|
Limitations on interaction between threads via signals
Interface | Purpose | Implementation | Header file based on the POSIX.1-2008 standard |
---|---|---|---|
| Send a signal to a thread. | You cannot send a signal to a thread. If a signal number is passed through the |
|
| Restore the state of the control thread and the signals mask. | Not implemented |
|
| Save the state of the control thread and the signals mask. | Not implemented |
|
Asynchronous input/output limitations
Interface | Purpose | Implementation | Header file based on the POSIX.1-2008 standard |
---|---|---|---|
| Cancel input/output requests that are waiting to be handled. | Not implemented |
|
| Receive an error from an asynchronous input/output operation. | Not implemented |
|
| Request the execution of input/output operations. | Not implemented |
|
| Request a file read operation. | Not implemented |
|
| Get the status of an asynchronous input/output operation. | Not implemented |
|
| Wait for the completion of asynchronous input/output operations. | Not implemented |
|
| Request a file write operation. | Not implemented |
|
| Request execution of a set of input/output operations. | Not implemented |
|
Limitations on the use of robust mutexes
Interface | Purpose | Implementation | Header file based on the POSIX.1-2008 standard |
---|---|---|---|
| Return a robust mutex to a consistent state. | Not implemented |
|
| Get a robust mutex attribute. | Not implemented |
|
| Define a robust mutex attribute. | Not implemented |
|
Terminal operation limitations
Interface | Purpose | Implementation | Header file based on the POSIX.1-2008 standard |
---|---|---|---|
| Get the path to the file of the control terminal. | Only returns or passes an empty string through the |
|
| Define the terminal settings. | The input speed, output speed, and other settings specific to hardware terminals are ignored. |
|
| Wait for output completion. | Returns only the value |
|
| Suspend or resume receipt or transmission of data. | Suspending output and resuming suspended output are not supported. |
|
| Clear the input queue or output queue, or both of these queues. | Returns only the value |
|
| Break the connection with the terminal for a set time. | Returns only the value |
|
| Get the path to the terminal file. | Returns only a null pointer. |
|
| Get the path to the terminal file. | Returns only an error value. |
|
| Get the ID of a group of processes using the terminal. | Returns only the value |
|
| Define the ID for a group of processes using the terminal. | Returns only the value |
|
| Get the ID of a group of processes for the leader of the session connected to the terminal. | Returns only the value |
|
Shell operation limitations
Interface | Purpose | Implementation | Header file based on the POSIX.1-2008 standard |
---|---|---|---|
| Create a child process for command execution and an unnamed channel with this process. | Only assigns the |
|
| Close the unnamed channel with the child process created by | Cannot be used because |
|
| Create a child process for command execution. | Stub |
|
| Perform a shell-like expansion of the string. | Not implemented |
|
| Free up the memory allocated for the results from calling | Not implemented |
|
Limitations on file handle management
Interface | Purpose | Implementation | Header file based on the POSIX.1-2008 standard |
---|---|---|---|
| Make a copy of the handle of an opened file. | Handles of regular files, standard I/O streams, sockets and channels are supported. There is no guarantee that the lowest available handle will be received. |
|
| Make a copy of the handle of an opened file. | Handles of regular files, standard I/O streams, sockets and channels are supported. The handle of an opened file needs to be passed through the |
|
Limitations on clock usage
Interface | Purpose | Implementation | Header file based on the POSIX.1-2008 standard |
---|---|---|---|
| Get the time value. | If the |
|
| Get the CPU time spent on execution of the calling process. | Returns the amount of time (in milliseconds) that has elapsed since the KasperskyOS kernel was started. |
|
Getting system parameters
Interface | Purpose | Implementation | Header file based on the POSIX.1-2008 standard |
---|---|---|---|
| Get a system parameter. | Stub |
|