freebsd-nq/sys/kern
Bruce Evans 6bfb820292 Quick fix for stack overflow when there are more than about 25 slices.
Using recursion to traverse the recursive data structure for extended
partitions was never good, but when slice support was implemented in
1995, the recursion worked for the default maximum number of slices
(32), and standard fdisk utilities didn't support creating more than
the default number.  Even then, corrupt extended partitions could
cause endless recursion, because we attempt to check all slices, even
ones which we don't turn into devices.

The recursion has succumbed to creeping features.  The stack requirements
for each level had grown to 204 bytes on i386's.  Most of the growth was
caused by adding a 64-byte copy of the DOSpartition table to each frame.
The kernel stack size has shrunk to about 5K on i386's.  Most of the
shrinkage was caused by the growth of `struct sigacts' by 2388 bytes
to support 128 signals.

Linux fdisk (a 1997 version at least) can now create 60 slices (4 standard
ones, 56 for logical drives within extended partitions, and it seems to
be leaving room to map the 4 BSD partitions on my test drive), and Linux
(2.2.29 and 2.3.35 at least) now reports all these slices at boot time.

The fix limits the recursion to 16 levels (4 + 16 slices) and recovers
32 bytes per level caused by gcc pessimizing for space.  Switching to
a static buffer doesn't cause any problems due to recursion, since the
buffer is not passed down.  Using a static buffer is wrong in general
because it requires the giant lock to protect it.  However, this problem
is small compared with using a static buffer for dsname().  We sometimes
neglect to copy the result of dsname() before sleeping.

Also fixed slice names when we find more than MAX_SLICES (32) slices.
The number of the last slice found was not passed passed recursively.
The limit on the recursion now prevents finding more than 32 slices
with a standard extended partition data structure anyway.
2000-01-27 05:11:29 +00:00
..
bus_if.m
device_if.m
imgact_aout.c
imgact_elf.c Changed the type used to represent the user stack pointer from `long *' 1999-12-27 10:42:55 +00:00
imgact_gzip.c
imgact_shell.c
inflate.c Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL" 1999-12-29 05:07:58 +00:00
init_main.c If we fail to find init, print out the search path used. This helps 1999-12-20 02:50:49 +00:00
init_sysent.c Fix bde'isms in acl/extattr syscall interface, renaming syscalls to 2000-01-19 06:02:31 +00:00
kern_acct.c Introduce NDFREE (and remove VOP_ABORTOP) 1999-12-15 23:02:35 +00:00
kern_acl.c Fix bde'isms in acl/extattr syscall interface, renaming syscalls to 2000-01-19 06:07:34 +00:00
kern_clock.c Make adjtime(2) adjust boottime so it doesn't cause non-monotonous 1999-12-08 10:02:12 +00:00
kern_conf.c Backout previous commit. It was a mistake. 2000-01-23 15:47:46 +00:00
kern_descrip.c Fix the style bugs in the style bugs fix. The style bug fix made the 2000-01-21 06:57:52 +00:00
kern_environment.c
kern_exec.c When we are execing a setugid program, and we have a procfs filesystem 2000-01-20 07:12:52 +00:00
kern_exit.c Handle the case where we truss an SUGID program -- in particular, we need 2000-01-10 04:09:05 +00:00
kern_fork.c Put on my asbestos underwear and commit the patch that I posted to -arch 1999-12-06 11:13:50 +00:00
kern_intr.c
kern_jail.c
kern_kthread.c Panic if proc0 hasn't been created and we try to call kthread_create. 2000-01-10 08:00:58 +00:00
kern_ktrace.c Introduce NDFREE (and remove VOP_ABORTOP) 1999-12-15 23:02:35 +00:00
kern_linker.c Introduce NDFREE (and remove VOP_ABORTOP) 1999-12-15 23:02:35 +00:00
kern_lock.c Lock reporting and assertion changes. 1999-12-11 16:13:02 +00:00
kern_lockf.c
kern_malloc.c
kern_mib.c
kern_module.c
kern_ntptime.c Add a couple of strategic sysctls for monitoring. 2000-01-23 14:52:37 +00:00
kern_physio.c
kern_proc.c
kern_prot.c Implement setres[ug]id() and getres[ug]id(). This has been sitting in 2000-01-16 16:34:26 +00:00
kern_random.c
kern_resource.c
kern_shutdown.c Seconds to ticks conversion was done at the wrong place. 2000-01-12 17:26:42 +00:00
kern_sig.c Introduce NDFREE (and remove VOP_ABORTOP) 1999-12-15 23:02:35 +00:00
kern_subr.c
kern_switch.c
kern_synch.c
kern_syscalls.c
kern_sysctl.c
kern_tc.c Make adjtime(2) adjust boottime so it doesn't cause non-monotonous 1999-12-08 10:02:12 +00:00
kern_threads.c
kern_time.c
kern_timeout.c
kern_xxx.c
ksched.c Fixed some type mismatches. p_retval[0] in struct proc has type 1999-12-27 10:22:09 +00:00
link_aout.c Fixed a cast of a pointer to an integer of a possibly different size. 1999-12-24 15:33:36 +00:00
link_elf_obj.c Fixed a cast of a pointer to an integer of a possibly different size. 1999-12-24 15:33:36 +00:00
link_elf.c Fixed a cast of a pointer to an integer of a possibly different size. 1999-12-24 15:33:36 +00:00
Make.tags.inc Add soft updates to the set of things being tagged. Syntax cleanup. 2000-01-27 01:22:06 +00:00
makedevops.pl
Makefile
makesyscalls.sh Second pass commit to introduce new ACL and Extended Attribute system 1999-12-19 06:08:07 +00:00
md5c.c Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL" 1999-12-29 05:07:58 +00:00
p1003_1b.c
posix4_mib.c
subr_acl_posix1e.c Fix bde'isms in acl/extattr syscall interface, renaming syscalls to 2000-01-19 06:07:34 +00:00
subr_autoconf.c
subr_blist.c Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL" 1999-12-29 05:07:58 +00:00
subr_bus.c * Set the devclass of a device before calling the probe method. This allows 1999-12-24 16:21:15 +00:00
subr_clist.c
subr_devstat.c
subr_disk.c Also handle zero return from dscheck(). 2000-01-10 12:21:39 +00:00
subr_disklabel.c
subr_diskmbr.c Quick fix for stack overflow when there are more than about 25 slices. 2000-01-27 05:11:29 +00:00
subr_diskslice.c Cleanup some more remaining bdev fluff. 2000-01-16 09:25:34 +00:00
subr_eventhandler.c
subr_log.c
subr_module.c
subr_param.c This is Bosko Milekic's mbuf allocation waiting code. Basically, this 1999-12-12 05:52:51 +00:00
subr_prf.c
subr_prof.c
subr_rman.c
subr_scanf.c
subr_smp.c Allow SMP systems with an MCA bus to work properly. 2000-01-13 09:09:02 +00:00
subr_trap.c Add a new mechanism, cndbctl(), to tell the console driver that 2000-01-11 14:54:01 +00:00
subr_xxx.c
sys_generic.c Add aio_waitcomplete(). Make aio work correctly for socket descriptors. 2000-01-14 02:53:29 +00:00
sys_pipe.c Use vfs_timestamp() instead of getnanotime() to set timestamps. This 1999-12-26 13:04:52 +00:00
sys_process.c
sys_socket.c
syscalls.c Fix bde'isms in acl/extattr syscall interface, renaming syscalls to 2000-01-19 06:02:31 +00:00
syscalls.master Fix bde'isms in acl/extattr syscall interface, renaming syscalls to 2000-01-19 06:01:07 +00:00
sysv_ipc.c
sysv_msg.c
sysv_sem.c
sysv_shm.c
tty_compat.c
tty_conf.c
tty_cons.c Don't follow null pointers if we somehow have a null devswitch entry 2000-01-25 09:20:08 +00:00
tty_pty.c
tty_snoop.c
tty_subr.c
tty_tb.c
tty_tty.c
tty.c
uipc_domain.c
uipc_mbuf.c Actively limit the allocation of mbufs to NMBUFS/nmbufs and mbuf clusters 1999-12-28 06:35:57 +00:00
uipc_proto.c
uipc_sockbuf.c Add aio_waitcomplete(). Make aio work correctly for socket descriptors. 2000-01-14 02:53:29 +00:00
uipc_socket2.c Add aio_waitcomplete(). Make aio work correctly for socket descriptors. 2000-01-14 02:53:29 +00:00
uipc_socket.c Add aio_waitcomplete(). Make aio work correctly for socket descriptors. 2000-01-14 02:53:29 +00:00
uipc_syscalls.c This is Bosko Milekic's mbuf allocation waiting code. Basically, this 1999-12-12 05:52:51 +00:00
uipc_usrreq.c Introduce NDFREE (and remove VOP_ABORTOP) 1999-12-15 23:02:35 +00:00
vfs_acl.c Fix bde'isms in acl/extattr syscall interface, renaming syscalls to 2000-01-19 06:07:34 +00:00
vfs_aio.c Back out the previous spl change, since it opens a race window. 2000-01-20 08:15:13 +00:00
vfs_bio.c Need to reset the buffer pointer to avoid reconsidering the same buffer 2000-01-18 02:13:26 +00:00
vfs_cache.c
vfs_cluster.c
vfs_conf.c Put on asbestos suit and put a splcam() around the 'Mounting root from..' 1999-12-12 16:34:43 +00:00
vfs_default.c Fix bde'isms in acl/extattr syscall interface, renaming syscalls to 2000-01-19 06:07:34 +00:00
vfs_export.c Give vn_isdisk() a second argument where it can return a suitable errno. 2000-01-10 12:04:27 +00:00
vfs_extattr.c Add bwillwrite to all system calls that create things in the filesystem. 2000-01-10 00:08:53 +00:00
vfs_init.c The sysctl mod_xx hack is no longer required now that we have totally 1999-12-12 16:30:34 +00:00
vfs_lookup.c Introduce NDFREE (and remove VOP_ABORTOP) 1999-12-15 23:02:35 +00:00
vfs_mount.c Put on asbestos suit and put a splcam() around the 'Mounting root from..' 1999-12-12 16:34:43 +00:00
vfs_subr.c Give vn_isdisk() a second argument where it can return a suitable errno. 2000-01-10 12:04:27 +00:00
vfs_syscalls.c Add bwillwrite to all system calls that create things in the filesystem. 2000-01-10 00:08:53 +00:00
vfs_vnops.c Give vn_isdisk() a second argument where it can return a suitable errno. 2000-01-10 12:04:27 +00:00
vnode_if.pl Use a seperate -c and -h mode. The vnode_if.c file is compiled only into 1999-12-12 16:43:05 +00:00
vnode_if.src Second pass commit to introduce new ACL and Extended Attribute system 1999-12-19 06:08:07 +00:00