POSIX support limitations
KasperskyOS uses a limited POSIX interface oriented toward the POSIX.1-2008 standard (without XSI support). These limitations are primarily due to security precautions.
Limitations affect the following:
- Interaction between processes
- Interaction between threads via signals
- Standard input/output
- Asynchronous input/output
- Use of robust mutexes
- Terminal operations
- Shell usage
- Management of file handles
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. | Stub |
|
| 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. | Stub |
|
| Run the executable file. | Stub |
|
| Run the executable file. | Stub |
|
| Run the executable file. | Stub |
|
| Move the process to another group or create a group. | Stub |
|
| Create a session. | Not implemented |
|
| Get the group ID for the calling process. | Not implemented |
|
| Get the group ID. | Stub |
|
| Get the ID of the parent process. | Not implemented |
|
| 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. | Not implemented |
|
| Check for received blocked signals. | Not implemented |
|
| Get and change the set of blocked signals. | Stub |
|
| Wait for a signal. | Stub |
|
| Wait for a signal from the defined set of signals. | Stub |
|
| 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 to the function 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. |
|
| Define the mutex attribute that allows the mutex to be used by multiple processes. | You cannot define the mutex attribute that allows the mutex to be used by multiple processes. If the |
|
| Define the barrier attribute that allows the barrier to be used by multiple processes. | You cannot define the barrier attribute that allows the barrier to be used by multiple processes. If the |
|
| Define the conditional variable attribute that allows the conditional variable to be used by multiple processes. | You cannot define the conditional variable attribute that allows the conditional variable to be used by multiple processes. If the |
|
| Define the read/write lock object attribute that allows the read/write lock object attribute to be used by multiple processes. | You cannot define the read/write lock object attribute that allows the read/write lock object attribute to be used by multiple processes. If the |
|
| Create a spin lock. | You cannot create a spin lock for synchronization between processes. If the |
|
| Create or open a shared memory object. | Not implemented |
|
| Map to memory. | You cannot perform memory mapping for interaction between processes. If the |
|
| Define the memory access permissions. | This function works as a stub by default. To use this function, define special settings for the KasperskyOS kernel. |
|
| 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 to the function through the |
|
| Get and change the set of blocked signals. | Stub |
|
| 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 |
|
Standard input/output limitations
Interface | Purpose | Implementation | Header file based on the POSIX.1-2008 standard |
---|---|---|---|
| Formatted print to file. | Not implemented |
|
| Use memory as a data stream. | Not implemented |
|
| Use dynamically allocated memory as a data stream. | Not implemented |
|
| Formatted print to file. | 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. | This function 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. | This function only returns 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. | This function only returns the value |
|
| Break the connection with the terminal for a set time. | This function only returns the value |
|
| Get the path to the terminal file. | This function only returns a null pointer. |
|
| Get the path to the terminal file. | This function only returns an error value. |
|
| Get the ID of a group of processes using the terminal. | This function only returns the value |
|
| Define the ID for a group of processes using the terminal. | This function only returns the value |
|
| Get the ID of a group of processes for the leader of the session connected to the terminal. | This function only returns 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 a channel for this process. | This function only assigns the |
|
| Close the channel with the child process created by the | This function cannot be used because its input parameter is the data stream handle returned by the |
|
| 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 of calling the | Not implemented |
|
Limitations on management of file handles
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 |
|