User Tools

Site Tools


wishlist:david

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Last revision Both sides next revision
wishlist:david [2016/01/22 18:15]
dcvmoole created
wishlist:david [2017/04/09 12:28]
dcvmoole another new todo item
Line 7: Line 7:
   * reason: the current libc implementation is not atomic and thus dangerous, aside from violating POSIX   * reason: the current libc implementation is not atomic and thus dangerous, aside from violating POSIX
   * note: there are going to be other calls to which this applies, but dup2 is a rather obvious case   * note: there are going to be other calls to which this applies, but dup2 is a rather obvious case
 +
 +=== See if SUSPEND can be redefined to EDONTREPLY ===
 +
 +  * reason: various places use either SUSPEND or EDONTREPLY, with the same meaning
 +  * reason: SUSPEND is not defined in errno.h and thus may end up overlapping with existing error codes
  
 === Preserve mounted file systems while remounting root FS === === Preserve mounted file systems while remounting root FS ===
Line 17: Line 22:
 === Make libblockdriver accept chardriver requests as well === === Make libblockdriver accept chardriver requests as well ===
  
-  * reason: a first step towards ​+  * reason: a first step towards ​NetBSD convergence regarding block device access 
 +  * reason: better performance and less skew by avoiding going through a file system
   * complication:​ the need for temporary buffers for I/O   * complication:​ the need for temporary buffers for I/O
   * subsequent project: continuous block tracing through blocking character driver IOCTLs   * subsequent project: continuous block tracing through blocking character driver IOCTLs
 +  * related project: take file systems out of the raw block device communication path altogether
  
 === Get rid of _SIGN for errno numbers === === Get rid of _SIGN for errno numbers ===
Line 75: Line 82:
   * reason: the current approach requires extra IPC and extra state to be kept in the file system   * reason: the current approach requires extra IPC and extra state to be kept in the file system
   * reason: seek behavior can be combined with posix_fadvise/​madvise to provide hints   * reason: seek behavior can be combined with posix_fadvise/​madvise to provide hints
- 
-=== Look into setuid/​seteuid behavior === 
- 
-  * reason: this is causing problems with openssh server privilege separation, possibly openntpd (#61), possibly others 
-  * complication:​ uid/gid management is so convoluted that a paper was published about it 
-  * complication:​ lots of services other than PM and VFS (eg UDS, IPC..) are probably also doing the wrong thing 
  
 === Implement true vector support for readv/​writev/​sendmsg/​recvmsg === === Implement true vector support for readv/​writev/​sendmsg/​recvmsg ===
Line 141: Line 142:
   * reason: (lots of reasons, TBD)   * reason: (lots of reasons, TBD)
   * complication:​ (lots of complications,​ TBD)   * complication:​ (lots of complications,​ TBD)
 +
 +=== Add SEM_UNDO support to SysV IPC semaphores ===
 +
 +  * reason: missing functionality
 +  * complication:​ tricky in many ways, may end up doubling sem.c code size
 +  * complication:​ needs an extensive test set to match (adding to test88 or separate)
 +
 +=== Add support for SysV IPC message queues ===
 +
 +  * reason: ipcs/ipcrm expect this to be supported
 +  * note: this will require that the process-is-blocked-on table be split from sem.c
 +
 +=== Make procfs no longer import other services'​ headers and tables ===
 +
 +  * reason: where needed, this kind of stuff should now be handled by the MIB service
 +  * reason: there are rare cases where recompiling procfs is not desirable
 +  * complication:​ especially for /​proc/​services this will require moving a lot into MIB
 +
 +=== Make procfs optional ===
 +
 +  * reason: essentially the same role is now fulfilled by the MIB service, making procfs somewhat redundant
 +  * reason: we want to allow footprint reduction in general
 +  * complication:​ not all of the information is available through the MIB service as it is
 +  * complication:​ /etc/mtab is currently a symlink to /​proc/​mounts,​ this needs to be dealt with
 +  * note: ideally, procfs should no longer be needed on the ramdisk
 +
 +=== Rework the DS publish/​subscribe API ===
 +
 +  * reason: the current implementation is heavyweight (libc regex) and uses malloc through regcomp(3)
 +  * reason: at the same time it does not fulfill needs of services, which want to have multiple independent subscriptions
 +  * complication:​ this requires a proper look at all current DS publish/​subscribe usage scenarios
 +  * note: an example use case is RMIB, which wants to detect MIB-service restarts independent of the main code
 +  * note: a solution based on multiple possible subscriptions to sets of service classes would probably suffice
 +  * note: libsys should probably have a DS notification dispatcher, possibly as part of SEF
 +  * note: this probably a good time to introduce a system-wide constant for service label sizes
 +
 +=== Make the MIB service'​s RMIB calls asynchronous ===
 +
 +  * reason: a RMIB call to a deadlocked service may currently deadlock MIB, and with that the entire system
 +  * complication:​ this may or may not require the MIB service to sign up for PM process events
 +  * note: this depends on RMIB being notified about service deaths through DS, rather than via ipc_sendrec()
 +
 +=== Extend RMIB functionality/​robustness to match service requirements ===
 +
 +  * problem: it is not possible to modify (= bump the version number of) already-mounted RMIB subtrees (e.g., net.interface)
 +  * problem: it is not possible to mount RMIB subtrees using a name only (e.g. minix.lwip)
 +  * problem: it is currently possible to mess up the MIB tree with bad name+id combos in RMIB mount requests
 +
 +=== Disallow killing processes in an uninterruptible system call ===
 +
 +  * reason: processes may currently be terminated while in an uninterruptible system call, possibly triggering poorly-tested scenarios in other services (safecopy failures, etc)
 +  * complication:​ this will require changes to the PM signal state machine, with subtle side effects
 +  * complication:​ involving all user-facing system services in exit notification is a performance problem
 +  * note: the most obvious solution would be kernel support for notification (to PM) when a process system call has completed, comparable to SIGNDELAY, and a PREEXIT process state in PM
 +  * note: ideally the same idea would be applied to signal handler invocation, because the current approach makes dangerous and already-incorrect(?​) assumptions about "​retreg"​ there
 +
 +=== Add support for pselect(2) ===
 +
 +  * reason: pselect(2) is required by dhcpcd(8) and various other parts of userland
 +  * complication:​ pselect(2) is supposed to be atomic and thus cannot be implemented as a select(2) wrapper
 +  * complication:​ a proper implementation will require a non-trivial extension to the PM/VFS protocol
 +  * subsequent project: also implement paccept(2); this will require storing more call state in VFS
  
 === Move the BSD socket API into VFS === === Move the BSD socket API into VFS ===
  
-  * status: **IN PROGRESS**+  * status: **PULL REQUEST FILED**
   * reason: libc should not need to test or track socket types, it violates the light-libc minix philosophy   * reason: libc should not need to test or track socket types, it violates the light-libc minix philosophy
   * reason: the individual writes to implement sendto (etc) probably violate posix signal atomicity   * reason: the individual writes to implement sendto (etc) probably violate posix signal atomicity
Line 167: Line 230:
   * complication:​ different file system will require different small exceptions   * complication:​ different file system will require different small exceptions
   * complication:​ no neat way to model orphan management in the edge (directory) layer   * complication:​ no neat way to model orphan management in the edge (directory) layer
 +
 +=== Look into setuid/​seteuid behavior ===
 +
 +  * status: **MERGED**
 +  * reason: this is causing problems with openssh server privilege separation, possibly openntpd (#61), possibly others
 +  * complication:​ uid/gid management is so convoluted that a paper was published about it
 +  * complication:​ lots of services other than PM and VFS (eg UDS, IPC..) are probably also doing the wrong thing
  
 === Resolve the issue of soft faults versus partial success in file systems === === Resolve the issue of soft faults versus partial success in file systems ===
wishlist/david.txt · Last modified: 2017/10/11 18:13 by dcvmoole