Prex Platform Security

Posted 2009-10-08

New technical paper on Prex Platform Security is available now.

Prex 0.9.0 Released!

Posted 2009-10-01

This release adds new security framework which supports pathname-based access control. Now, we can assign the set of specific capabilities for any applications depending on its role.

  • New: Enable capability based security by default.
  • New: Support resource limit to prevent DoS attack.
  • New: Add task_chkcap() kernel call to trace the capability violations.
  • New: Support pipe and redirection in shell.
  • New: Support LCD off timer.
  • New: Handle PATH variable for exec in shell.
  • New: Add 'more' command to verify the pipe feature in shell.
  • New: Support Sun Studio compiler.
  • New: Change name of real-time task to *.rt to identify it easily.
  • New: Support pathname-based capability mapping.
  • New: Support getenv()/putenv().
  • New: Add 'set', 'unset' and 'export' command in shell.
  • New: Add power server - 'pow'.
  • New: Add 'fstab' - file system table.
  • New: Run 'rc' script at boot.
  • New: Add script loader in exec server.
  • New: Add 'pmctrl' - power management utility.
  • New: Support protected name for system object.
  • New: Add 'diskutil' - disk management utilitiy.
  • New: Add 'install' - software installer.
  • New: Add 'ktrace' - system call tracer.
  • New: Add workstation console multiplexer driver - 'wscons'.
  • New: Initial PowerPC support.
  • New: Add new device flag (D_PROT) for protected devices.
  • New: Initial version of kernel debugger.
  • New: Add 'lock' - terminal lock utility.
  • Fix: Page fault in realloc().
  • Fix: exception_return() breaks the return value of subsequent syscall.
  • Fix: 'tty' - the new line is not handled properly.
  • Fix: Intermittent hang during task_terminate().
  • Fix: 'lr' register is broken after fork(). (ARM).
  • Fix: Enable interrupts during system call (ARM).
  • Fix: Page fault under sub-shell (NOMMU).
  • Fix: The pipe() system call fails at second call.
  • Fix: Fix to increment the file reference in dup2().
  • Fix: The byte count for writing fifo is always 0.
  • Fix: Memory leak in task_terminate().
  • Fix: Fix the compile error with gcc 2.95. Correct the format of printf.
  • Fix: Fix to reject changing the capability of the kernel task.
  • Fix: Fix system hang when kernel is compiled with PCC.
  • Fix: Add signal number in the return code of waitpid().
  • Fix: Remove workaround for ioctl() buffering issue.
  • Fix: Prevent format string attack with sys_log().
  • Fix: Fix many codes to prevent buffer overflow caused by strcpy/strcat.
  • Fix: Page fault in 'nice'. The first item of the envp is lost.
  • Fix: setpriority() returns error even if it is success.
  • Fix: 'proc' - some process data are not initialized for fork().
  • Fix: 'tty' - fix for big endian.
  • Fix: Fix many other bugs.

Prex 0.8.1 Released!

Posted 2008-10-18

This release includes the ARM Integrator/CP port.
You can run arm-integrator port in QEMU on PC.

  • New: Add MMU support for ARM.
  • New: Support Integrator/CP platform.
  • New: Add the function to relocate ARM exception vectors.
  • New: Add exception handling for ARM architecture.
  • New: Add machine_setpower() interface in DKI.
  • New: Define 'syspage' which holds architecture specific data.
  • New: Change architecture interface to common definition in all platforms.
  • New: Add physical/virtual address mapping table.
  • New: Support multiple RAM regions.
  • New: Add the serial console driver for PC.
  • New: Add tetris game ported from BSD.
  • New: Add '--profile' option in the configure script.
  • New: Support static driver to debug with fixed symbol address.
  • Fix: Change all external function declarations as BSD style.
  • Fix: Remove time data from the kernel banner string.
  • Fix: Improve build and configuration system.
  • Fix: Add tty_done() to notify the completion of the TTY output interrupt.
  • Fix: Fix the broken output of 'mem' command in 'kmon'.

Application Programming Guide!

Posted 2008-09-15

Application Programming Guide is available now.

Power Management Document

Posted 2008-09-10

Power Management Document released.

Prex Datasheet!

Posted 2008-08-31

Added Prex Datasheet (pdf) in the document list.

CmdBox User's Guide

Posted 2008-08-27

CmdBox is a small binary that includes tiny versions of many UNIX utilities. CmdBox User's Guide is now available. It describes the usage and options of each command.

CmdBox currently supports the following commands:

  • cal, cat, clear, cp, date, dmesg, echo, free, head, hostname, kill, ls
  • mkdir, mount, mv, nice, ps, pwd, reboot, rm, rmdir, sh, shutdown
  • sleep, sync, test, touch, umount, uname

Support FAT File System. (Prex 0.8.0)

Posted 2008-08-11

FAT file system is supported with this version.

  • New: Add 'fatfs' - FAT file system.
  • New: Add 'fifofs' - FIFO file system.
  • New: Support pipe().
  • New: Support compiling with PCC (Portable C Compiler).
  • New: Add 'head' command.
  • New: Add 'cal' command.
  • Fix: Fix object_create() for no object name.
  • Fix: Remove all variadic macros for C90 compilers.
  • Fix: The semaphore count is not set properly for re-initialization.
  • Fix: Change the argument type for timer_callout().
  • Fix: Fix page fault if an alarm exception is invoked after task termination.
  • Fix: thread_suspend() returns a success code for error case.
  • Fix: Fix to return an appropriate error code in thread_load().
  • Fix: Remove the register data from the argument of an exception handler.
  • Fix: Change the data types of ioctl() parameters.
  • Fix: Fix a page fault by waitpid().
  • Fix: Add wait after enabling gate A20 for some real hardwares.
  • Fix: Fix vnode lookup routine to prevent a deadlock in a fs server.
  • Fix: Fix a process server to handle exit() properly.
  • Fix: Fix the system hang on the actual GBA flash cart.

Coding Standard Updated.

Posted 2008-06-20

Released new coding standard based on the BSD's style guide.

POSIX Support! (Prex 0.7.0)

Posted 2007-12-25

This version includes POSIX emulation support. Some system servers and libraries are implemented. Various bug corrections are also included.

  • New: Add process server which manages process state and pid.
  • New: Add exec server which executes an ELF program.
  • New: Add boot server.
  • New: Initial release of TTY driver. Minimum set of termios is also added.
  • New: 'cmdbox' - tiny versions of many UNIX utilities.
  • New: Add init process.
  • New: Add stdio to libc, which is optimized for low-footprint systems.
  • New: Add UNIX emulation for fork(), exec(), pid, file I/O, signal, etc.
  • New: Support realloc().
  • New: Change gcc optimization option to -Os from -O2.
  • New: Enable gcc '-ansi' and '-pedantic' options for portability.
  • Fix: Fix the scheduler to switch a thread properly for priority change.
  • Fix: Fix the kernel hang when a thread terminates while it holds a mutex.
  • Fix: Boot failure when a boot task does not have any data or bss sections.
  • Fix: The reference count is not incremented after dup().
  • Fix: Fix to support processing an exception by drivers at interrupt level.
  • Fix: Fix a file lookup routine in devfs.
  • Fix: The scheduler is kept locked with some exception conditions.
  • Fix: kmem_alloc() cause a hang when kernel memory allocation is failed.
  • Fix: Change the scheduling policy of a timer thread to SCHED_FIFO.
  • Fix: Page fault during mkdir() when "foo/bar" style path is specified.
  • Fix: Fix a bug in recursive mutex lock.
  • Fix: A mutex for buffer cache is not initialized.
  • Fix: Fix a page fault while writing ramfs.
  • Fix: Fix a build error with old version (2.95) of gcc.
  • Fix: Design change of timer_hook().
  • Fix: Reduce interrupt latency when interrupt occurs in thread switching.
  • Fix: Rescheduling flag is kept pending in some rare cases.
  • Fix: Remove a kernel function trace feature that depends on gcc.
  • Fix: Add checking CAP_NICE for the priority boost.
  • Fix: Fix a page fault after task termination by an exception.
  • Fix: Mutex is locked even if cond_wait() fails due to exception.
  • Fix: Fix memory leak when a periodic thread is terminated.

The source code was fully cleaned up for ANSI-C compatible with this version.

Web Site Renewal.

Posted 2007-06-26

That's because everybody judges a book by its cover...

File Systems! (Prex 0.5.0)

Posted 2007-06-20

File system is supported with this version.

  • New: Add file system server including VFS framework.
  • New: Support buffer cache and mount function.
  • New: Add 'devfs' - device file system.
  • New: Add 'ramfs' - RAM file system.
  • New: Add 'arfs' - archive file system.
  • New: Add file system test tool.
  • New: Add 'configure' script for build.
  • New: Support BSD style makefile for POSIX applications.
  • Fix: Fix crash in irq_detach().
  • Fix: Fix makefile to optimize build speed with cygwin.

You have to run 'configure' script at the top of the source tree before compiling this version.

Prex 0.4.3 Released!

Posted 2007-04-13

This version includes some important kernel enhancement like DPC framework.

  • New: Support DPC - deferred procedure call.
  • New: Add 'dmesg' function to dump kernel messages.
  • New: Reduce the timer jitters of periodic thread.
  • New: Change the name of sys_stat() to sys_info().
  • New: Add handling of reference count for the device objects.
  • New: Add 'force' option to device_broadcast().
  • New: Make the kernel information as same with POSIX utsname.
  • New: Remove the quantum adjustment feature.
  • New: Add IPC test tool for multi-threaded servers.
  • New: Add timer hooking service to reduce the driver's callout.
  • New: Improve DVS algorithm of CPUfreq driver.
  • Fix: System hang when periodic timer is stopped for an invalid timer object.
  • Fix: Replace a delay driver as generic driver service.
  • Fix: Fix a system call trap code (ARM).
  • Fix: Fix a compile error when it built with SSP enabled gcc.
  • Fix: Fix data corruption in malloc() library.
  • Fix: A thread could not hold semaphore in some case.

Prex 0.4.2 Released!

Posted 2007-01-24

This release includes various bug corrections and improvement of kernel API.

  • New: Support RAM disk driver.
  • New: Change an argument type of device_read()/device_write().
  • New: Add kernel release name in the kernel statistics data.
  • New: Update vm_inherit option of task_create().
  • New: Change the data type of the message length of IPC related API.
  • New: The vm_attrib() API is renamed to vm_attribute().
  • New: Add kernel debugging API.
  • New: Code size reduction for GBA port.
  • New: Support recursive locking of mutex.
  • New: Code clean up and system tuning.
  • Fix: Fix page fault during kernel memory dump.
  • Fix: Fix a bug in removing free node for VM region (NOMMU).
  • Fix: System hang by accessing ARM bank register after STM^ instruction.
  • Fix: Fix an alignment bug in the page reserve routine.
  • Fix: Fix memory leak when vm_map() is called two or more times (NOMMU).
  • Fix: The end address of the page extraction is not correct (x86).
  • Fix: Interrupt is kept disabled when DMA buffer allocation is failed (x86).

Prex 0.4.1 Released!

Posted 2006-02-23

A minor update has been released.

  • New: Add ELF task relocation with NOMMU system.
  • New: Replace all strncpy() by strlcpy() in kernel for security reason.
  • Fix: There are some mutex hang conditions that cause system hang.
  • Fix: Fix a deadlock problem of FDD driver.
  • Fix: Rewrite the periodic timer routine in kernel.
  • Fix: The highest priority thread is not selected in sched_wakeone().
  • Fix: Drop vm_inherit option for task_create() on NOMMU system.

Source Browser is Available Online.

Posted 2006-01-04

You can browse the Prex source tree on the web site.

Security Improvement! (Prex 0.4.0)

Posted 2005-12-31

This is the milestone release for the kernel security improvement. New system calls for "Task Capability" were added to limit individual operation of user mode tasks. Almost all system calls were revised to check task permissions.

  • New: Add sys_capget()/sys_capset() kernel API for the task capability.
  • New: Define the standard message header for IPC.
  • New: Add vm_inherit argument in task_create() to improve exec() emulation.
  • New: Add /sample directory and sample applications.
  • New: Remove /img directory.
  • Fix: Fix the memory leak caused when task_create() is failed.
  • Fix: Incorrect I/O read size of FDD driver.
  • Fix: Fix the console driver to lock a scheduler during I/O operations.

Prex 0.3.1 Released!

Posted 2005-12-07

This release includes some minor bugfixes and feature enhancements.

  • New: Add null/zero device driver.
  • New: Support MUTEX_INITIALIZER for the static initialization of mutexes.
  • New: Merge all configuration files into one single 'config.h'.
  • New: libc and headers are updated with BSD derived code.
  • New: Add 'make lint' as make option.
  • Fix: object_lookup() does not return correct object ID.

Prex 0.3.0 Released!

Posted 2005-11-11

The kernel becomes enough stable with this release.

  • New: Integrate configuration files and makefiles.
  • New: Change the name of sync APIs for POSIX compatibility.
  • New: Support re-initialize of the semaphore.
  • New: Change the driver ioctl code to BSD style.
  • New: Add test programs for mutex, semaphore and deadlock detection.
  • New: Add malloc() in the user mode library.
  • Fix: Fix the incorrect kernel handling of umem_strnlen().
  • Fix: Modify the thread test program for long-run test.
  • Fix: sem_post() can not unblock the waiting thread.
  • Fix: vm_allocate() does not zero-fill the allocated memory.
  • Fix: Fix compile error with gcc4.

Prex 0.2.2 Released!

Posted 2005-10-07

This release includes some minor bugfixes and minor feature enhancements.

  • New: Add the kernel function tracer which can dump the run-time call tree.
  • New: Add a benchmark tool to create/terminate 100000 threads at once.
  • New: Add code to detect above 64M of RAM. (x86)
  • Fix: Kernel page fault in accessing the highest physical page. (x86)
  • Fix: sys_reboot() is replaced by ioctl of the power management driver.
  • Fix: There is a time window that lost an IST trigger from ISR.
  • Fix: Change not to restart the system by sys_panic().
  • Fix: Clean up comments in kernel sources.

Porting to ARM Processor. (Prex 0.2.1)

Posted 2005-06-27

This release includes the Game Boy Advance port.

  • New: Add ARM processor support. (ATM7TDMI)
  • New: Add BSP for Game Boy Advance including on-screen keyboard.
  • Fix: The irq lock count is not 0 after switching to the new thread.
  • Fix: Improve the kernel callout timer for the small timeout value.
  • Fix: Remove the error check of max scheduling quantum in sched_setparam().

MMU-less Support! (Prex 0.2.0)

Posted 2005-06-06

This is a milestone release to support 'NOMMU' microcontrollers. The new VM stub for NOMMU was added to keep the API compatibility with the MMU kernel. Now, an application can work on the MMU and NOMMU platforms without changing its source code.

  • New: Add new VM code for No-MMU platform.
  • New: Change the structure of the driver I/O table.
  • New: Add minimum libc.
  • Fix: Fix panic() if the active condition variable is destroyed.
  • Fix: Semaphore causes an unconditional wakeup of the blocked threads.
  • Fix: Update structure of the source tree.
Note: Currently, Newlib is not required to build Prex applications. However, the small C library with this version is temporary code until Newlib is ported to Prex.

Power Management! (Prex 0.1.2)

Posted 2005-04-20

Dynamic Voltage Scaling (DVS) with Pentium M processor is supported in this release. DVS reduces the CPU power consumption without significant performance degradation. The voltage monitoring tool and the DVS demonstration program have been added.

  • New: Add Pentium-M support for x86 processor driver.
  • New: Add CPU voltage monitoring tool 'cpuvolt'.
  • New: Add DVS test program which changes the CPU load periodically.
  • Fix: Improve the build method for cross platform portability.
Important: The default power policy was changed to 'Power Save' mode. If you want to optimize the system for the real-time performance, you have to change the power policy to the 'Performance' mode. In this mode, DVS does not work and CPU will always run at the highest speed.

Prex 0.1.1 Released!

Posted 2005-04-05

This release includes some major bugfixes and minor feature enhancements.

  • New: Add an initial version of kernel monitor 'kmon'.
  • New: Add some user mode test programs to check kernel functions.
  • New: Move time_get()/time_set() functions to the driver layer.
  • New: Add sys_time() kernel interface to return system ticks.
  • New: Improve the device I/O dispatcher to verify user buffer automatically.
  • Fix: Timer overflow issue after 49.7 days of continuous operation.
  • Fix: Unexpected page fault in the exception handler.
  • Fix: Page fault after returning from main() routine.

Note: Newlib is required to build an user mode application with this release.

Initial Release! (Prex 0.1)

Posted 2005-03-16

This is the first public release of Prex. It includes kernel, system call library, "hello world" sample application, and some technical documents. Most kernel features (task, thread, vm, ipc, exception, timer, synch) have been implemented in this version. It has a memory protection feature with x86 MMU. I hope you can enjoy exploration of the Prex kernel source. (like me :-)

The Project Web Site Online.

Posted 2005-03-03

I want to hear your feedback about this site. Please let me know what you think.

The Prex Project is Published.

Posted 2005-02-23

The Prex project has been registered in
Let's rock!