This is a partial list of the major machine-independent changes
(i.e., these are the changes people ask about most often). Machine
specific changes have also been made, and are sometimes mentioned
in the pages for the specific platforms.
Note: Problems for which patches exist are marked in red.
Raise carp(4) advskew to 240 while waiting for the pfsync(4) bulk update. This makes sure that other hosts can preempt a host that's booting up but hasn't got its network bearings yet.
Fix a check-for-null-then-deref-anyway bug in icmp6.
Fix a cut-and-pasto in pf(4)'s stateful ICMP code.
Make pfsync(4) stop carp(4) preempting to become master until the bulk state table sync has completed.
Support best-efforts bulk transfers of states when a pfsync(4) syncif is first configured. This allows pfsync+carp clusters to come up gracefully without killing active connections.
Have rc(8) stop carp(4) interfaces on system shutdown.
Add pass rules for the pfsync and carp protocols to the default pf(4) rulebase installed by /etc/rc(8).
Set permissions on the right files for the @owner, @group and @mode directives in pkg_add(1) when -B is in effect.
For wi(4) devices with Prism firmware version 1.6.3 or later, support an enhanced security mode for a hostap where the SSID can be hidden from snoopers.
Stop the installer asking for the timezone when upgrading.
Fix spamd(8)'s logging when the blacklist limit is hit.
Allow users with write access to bgpd(8)'s control socket to send queries.
Fix an out-of-bounds read in ssl(3) (CAN-2004-0112). This code isn't used in OpenBSD.
Always read at least DEV_BSIZE (512) bytes of the disklabel, some disks have smaller block sizes.
RELIABILITY FIX: A missing check for a NULL-pointer dereference has been found in ssl(3). A remote attacker can use the bug to cause an OpenSSL application to crash; this may lead to a denial of service. A source code patch is available. [Applied to stable]
Fix a memory leak and a missing break in pf(4) ioctl processing error paths.
Clear struct sockaddr_un before use in syslogc(8).
In spamd(8), only shrink the window once we're in the DATA mode. This way, greylisted connections don't get held up by the tiny window but spam bodies are still sent. Very. Slowly.
Restore scsi(4) bus scans to full speed by not checking LUNs that will be skipped anyway.
Fix byte-ordering problems in routed(8) (PR#3704). Based on NetBSD.
RELIABILITY FIX: Defects in the payload validation and processing functions of isakmpd(8) have been discovered. An attacker could send malformed ISAKMP messages and cause isakmpd to crash or to loop endlessly. A source code patch is available. [Applied to stable]
Obey the user's 'boot reboot' command at the ddb(4) prompt, even if the system is starting up.
Some signedness paranoia when handling carp(4) sysctls.
Fix missing checks for NULL returned from getpass(3) in login_*(8).
Make bgpd(8) work harder to clean up after itself on exit.
Have dhclient(8) (old and new) exit cleanly if its interface goes away (PR#3648).
New sysctl(3) net.inet.tcp.reasslimit, to control the size of the memory pool for TCP out-of-order segment reassembly that was introduced in the last erratum.
RELIABILITY FIX: OpenBSD's TCP/IP stack did not impose limits on how many out-of-order TCP segments are queued in the system. An attacker could send out-of-order TCP segments and trick the system into using all available memory buffers. A source code patch is available. [Applied to stable]
Strip out all the multiple-interfaces code from new dhclient(8), it's not used any more.
Be sure to call fifofs' reclaim function from its host filesystems (ext2fs, ffs, nfs). [Applied to stable]
Give fifofs a real reclaim function to prevent memory leaks on rovocation, and fix a potential null deref. [Applied to stable]
Disable the COMPAT_25 compatibility option in GENERIC kernels.
Add DH group 14 (modp2048) to isakmpd(8)'s list of predefined quick mode suites.
3.4-current -> 3.5-beta.
Remove a null deref and unbreak WSDISPLAY_USEFONT for vga(4).
Fix an nfsv3-related panic that could occur when linking from a local fs into an NFS mount. [Applied to stable]
Add an implementation for the tcp_drain() function, similar to ip_drain(). [Applied to stable]
Stop pfctl(8) '-s all' printing the entire OS fingerprint database and all the interfaces.
Interoperability fixes for isakmpd(8), particularly when talking to a Cisco PIX.
Don't use a regex when deleting a user from a group with userdel(8), since the username may contain regex special characters. Also, chmod(2) the new group file before moving it into place instead of after.
First cut at procmap(1) from NetBSD (where it's called pmap). Not yet built by default.
New 'split' option in iostat(8) for the newly-separated disk read/write stats.
Check for TDB entries marked as invalid when looking up tcpmd5 connections.
Record separate disk statistics for read and write operations. Adapted from NetBSD.
In ifstated(8), don't bcopy(3) around a structure containing TAILQ pointers.
Better SIGHUP handling in ifstated(8).
Refactor processor speed settings sysctl code (hw.cpuspeed, hw.setperf) for clarity.
Fix broken tcpdump(8) IKE output for certain vendors' phase 1 proposals.
New driver, bce(4), for Broadcom 4401 10/100Mbps Ethernet devices.
Drop the osigaltstack() compatibility system call.
Import and merge XFree86-current of 2004/02/13, minus files with the new XFree86 License which contains text developed by The XFree86 Project, Inc (http://www.xfree86.org/) and its contributors.
Make sure all pf(4) anchors get updated after an anchor is removed.
Better signal handling and other cleanup in pflogd(8).
Print textual service and protocol names properly in tcpdump(8) even when -n is specified.
Disallow em(4) PHY resets when IP is enabled on an interface to prevent lockups when using GigE copper.
Use a hash table instead of a linked list to speed up 802.1q tag -> vlan(4) interface lookup.
New -p flag for pfctl(8), allowing the device to be something other than /dev/pf.
Logging cleanup in ifstated(8).
Revert some propolice breakage in gcc3.
64-bit alignment fixes in ifstated(8).
RELIABILITY FIX: Several buffer overflows exist in the code parsing font.aliases files in XFree86. Thanks to ProPolice, these cannot be exploited to gain privileges, but they can cause the X server to abort. A source code patch is available. [Applied to stable]
Add missing volatile to a signal handler flag in dc(1).
in tcp_input(), stop an unsigned integer underflow from making the TCP MSS calculation return ridiculously large values when ifp==NULL.
Reduce makewhatis(8)'s newly-increased pickiness a little.
Fix another bug that allows a pf(4) antispoof rule on an interface with no IP addresses to result in all other interfaces blocking all IP packets.
Install bgpd.conf(5) root:wheel, mode 0600 and make bgpd(8) insist it be so.
Reduce the default number of pty(4) devices from 64 to 16, now that additional ptys will be created on demand.
Fix an off-by-one when generating pty(4) device names (ptydevname()).
Make tcpdump(8)'s pfsync(4) output more consistent with other tcpdump output.
Plug an mbuf(9) leak by making ip_fragment() free the mbuf on errors instead of expecting the caller to do it. [Applied to stable]
Add a flag so that hardware sensors can be marked as invalid if, for example, they're disconnected.
Another pass at making dhclient(8)'s code readable.
Fix a curiously familiar reference-counting bug in uvm(9).
SECURITY FIX: A reference-counting bug exists in the shmat(2) system call that could be used by an attacker to write to kernel memory under certain circumstances. Adapted from FreeBSD. A source code patch is available. [Applied to stable]
Fix a CVS merge error in xterm(1)'s app-defaults file.
If ssh(1) is in privsep mode, pass the SIGALRM from LoginGraceTime expiry through to the child process.
Apply the same strict RFC 2460 interpretation used for the IPv6 MTU to the TCP MSS calculation.
New parser for ifstated(8), and more features. Still more to come.
Fix grep(1)'s ^ and $ anchors that were broken by the recent -w fixes.
For programs that don't support long options, stop getopt(3) treating '--foo' the same way it treats '--', as per POSIX (PR#3666). [Applied to stable]
Let pfctl(8) deal gracefully with 'modulate state' on rules with protos to which it might not apply in the same way as 'keep state', e.g. 'pass proto {tcp udp} modulate state' is now acceptable.
Don't use a valid user id as a flag value in ps(1).
Remove the earlier fix for the IPv6 MTU crash bug now that the full fix is in place.
SECURITY FIX: An IPv6 MTU handling problem exists that could be used by an attacker to cause a denial of service attack against hosts with reachable IPv6 TCP ports. Fix this fully by applying a strict interpretation of RFC 2460 section 5, last paragraph. A source code patch is available. [Applied to stable]
Sync named(8)'s root.hint file after the IP address change of B.ROOT-SERVERS.NET.
Stop systrace(1) trying to normalize an empty filename.
Enable tcpmd5 on bgpd(8)'s listen socket. For peers configured with md5sig, require accept(2)ed sockets to have signatures enabled.
New TCP_SIGNATURE_ENABLE option to getsockopt(2), allowing a process to check the tcpmd5 status of an accept(2)ed socket.
Support ssh(1) version 2 password change. password-dead must be set to non-zero in login.conf(5) for this to work.
New update-moduli target in /usr/src/etc/Makefile, for regenerating /etc/moduli(5).
Format string fixes and other cleanup for fvwm(1) in the wake of -ansi removal.
Remove -ansi from the list of gcc(1) build options for XFree86.
On i386 systems with SSE2, halve the time taken to zero a page of memory. Based on FreeBSD.
Switch the new sigaltstack(2) code back on again on alpha and sparc64.
Make ddb(4)'s ps /n command show the correct state for a process.
Reset the TCP keepalive timer to tcp.keepidle (normally four hours) after the three-way handshake completes. (syncache sets it to tcp.keepinittime, normally 150 seconds).
Allow a single listen socket to be used for connections with and without tcpmd5.
Avoid a long scsi(4) freeze when attaching live scsibus* devices.
Support RFC 3390 'Increasing TCP's initial window' extension, enabled using sysctl(8) net.inet.tcp.rfc3390.
When TCP is in the SYN_SENT state, don't increase cwnd by 1*MSS on receipt of the SYN/ACK.
Note that 'pegasos' is not quite the same as 'pegosos'.
Handle tftpd(8) tsize and timeout options. From FreeBSD, as was the RFC 2347 support.
Add RFC 2347 "TFTP Option Extension" support to tftpd(8). Try to ignore trailing garbage that Apple OpenFirmware can leave where an option should be.
Make the package tools show strerror(3) output when die()ing on filesystem errors.
Allow pkg_delete(1) to handle removal of packages with bogus dependencies, as could be created by earlier versions of the new package tools.
Major changes to biosboot(8) and installboot(8), supporting EDD (LBA) mode boots and a shift key-triggered CHS fallback mode. For an encore, remove the previous version's 64KB limit on the size of boot(8).
Make pfctl(8) print even an all-zeros netmask, unless the address is all-zeros too.
Take an extra parameter to pthread_stackseg_np(3) to return stack info for any thread instead of just the current thread.
Only call destructors once on ELF architectures. Stops KDE apps moaning on shutdown.
Fix an early-free bug in mg(1) that was breaking compile-goto-error.
Make pflogd(8) less likely to cause logfile corruption on unexpected shutdowns, and more able to detect and deal sensibly with corrupted files on startup.
Implement the KERN_PROC2 sysctl(3), allowing ps(1) etc. to be independent of changes to process-related kernel structures. From NetBSD.
On i386, sync fdisk(8)'s built-in MBR image with the recent changes.
Import generic IEEE 802.11 interface framework from NetBSD.
Have pf(4) do as non-pf udp_input() does, and drop UDP packets with destination port zero, or with zero or oversize payload.
Import pkill(1) and pgrep(1) from NetBSD. Selecting by session ID (-s option) doesn't work yet.
Fix signal handling in the case of an error in inetd(8)'s config file.
Import SYN cache code to deflect SYN flood attacks, controlled with sysctl(3)s net.inet.tcp.syncachelimit and net.inet.tcp.synbucketlimit. From NetBSD, based on work by David Borman.
Unbreak ifconfig destroy on vlan(4) interfaces when MROUTING is defined.
In yacc(1), make sure extern YYSTYPE doesn't get #ifdef'd out when generating a .h file.
Keep track of parent vnodes on ufs filesystems, this will be needed soon.
Add some rwlocks around kernel file descriptor code, avoiding some rare race conditions.
Don't allow a tun(4) cloner interface to be destroyed if there are any outstanding knote(9)s.
Really stop the compiler optimising away memset(3) calls used to zero sensitive data in sudo(8). From sudo CVS.
Major changes to the i386 master boot record, which now uses EDD if available to support booting from a partition more than 8GB from the start of the disk. The 8GB size limit is still in place.
For i386 only, incread SHMMAXPGS from 2048 to 8192.
In the all-architectures kernel config, bump SHMMNI from 32 to 128, and SHMSEG from 8 to 128.
If pkg_add(1) fails in the postinstall script, record the package as a borked install instead of dying with a bunch of unregistered files all over the place.
Make join(1) more POSIX for non-matching lines (PR#2208).
Add dirhash feature from FreeBSD, which uses an in-memory hash table for lookups in large directories. Not enabled by default yet. See UFS_DIRHASH in options(4).
Extend the pfsync(4) protocol to allow a peer to query for complete state information should it receive an update for a state it knows nothing about.
Check for oversize allocations earlier in kernel malloc(9).
When sudo(8) is run with -k or -K only complain about missing usernames to stderr and don't log anything, since we may be running in a .logout script at shutdown and the YP etc. daemon may have gone away.
Make sure a signal handler-modified variable in sensorsd(8) is typed as volatile sig_atomic_t.
In wsmoused(8) (and bgpd) don't set up a handler for SIGKILL since that signal isn't passed to the process at all ever.
Fix a pasto (from the recent source-tracking additions) in the implementation of pf(4) DIOCSTART.
Fix end-of-tape handling under pthreads. Fix from FreeBSD PR#56274, including the fix to the fix in FreeBSD PR#59291.
Use a virtual filesystem in pkg_add(1) and pkg_delete(1) so they can test for available space and writeability before attempting to do the real operations.
Much work on the new bgpd.
Remove the recursive format string option '%:' from kernel printf(9).
Change in*_pcbnotify() to return the number of matches.
Check for multicasts earlier when processing TCP input, to reduce the amount of redundant processing.
For semop(2) calls with a small number of operations, use the stack instead of malloc(9)'d memory to reduce overhead. Adapted from FreeBSD.
On i386, add a driver for the Pentium 4's thermal control circuit.
Stop tcpdump(8) printing garbage pfsync(4) states when the snaplen is less than the sender's MTU.
Have dc(1) handle SIGINT in a rational way, and have bc(1) pass SIGINT to dc to handle in a rational way.
When updating process stats, check for non-monotonically-increasing time from microtime(9), deal with it by doing nothing instead of zeroing the counter, and complain #ifdef DIAGNOSTIC.
Enhanced Intel SpeedStep support on i386.
New sysctl(3) variables hw.cpuspeed and hw.setperf on i386, used to control LongRun.
Only modulate the TCP timestamp (pf(4) scrub reassemble tcp) if there's a valid timestamp to be modulated.
Allow ARP replies containing Ethernet multicast addresses, since some HA products want to do this.
Show tcpdump(8) how to recognise IKE NAT-D and NAT-OA payloads.
When isakmpd(8) gives up on a message, show the exchange name in the log.
Change pfsync(4) multicast group to 224.0.0.240, and IP protocol (pfsync in protocols(5)) to 240.
New pseudo-user _bgpd with matching group.
Begin spanning tree operation when a bridge(4) interface comes up.
New BGP daemon, bgpd. Not complete, and not built by default yet.
Do a real inverse-colour cursor for rasops(9)-based consoles. Based on a similar change in NetBSD.
New ifconfig(8) option -C (and supporting ioctl(2) SIOCIFGCLONERS) that lists all cloning-capable devices.
New mbuf_tags(9) type ...PF_TRANSLATE_LOCALHOST, used so that pf(4) redirection to localhost doesn't defeat the ability of programs like portmap(8) to tell localhost connections from remote connections.
Add ifconfig create support to ppp(4) and sl(4). No ifconfig destroy yet.
Fix regex(3) handling of non-ASCII characters (PR#3594). Fix from FreeBSD.
Fix grep(1)'s handling of certain patterns containing multiple dots (PR#3597).
Don't allow too many network interfaces (>65535) to be attached.
Merge Perl 5.8.2.
Add an hppa target to gcc3.
Add support for UDP encapsulation of ESP in transport mode (see draft-ietf-ipsec-udp-encaps-XX.txt,) enabled via new sysctl(3) toggle net.inet.esp.udpencap.
Use a consistent, high listen backlog for sshd(8), ssh-agent(1) and forwarding sockets.
Build more components of libiberty in preparation for gcc3.
Sync libiberty with the version from GCC 3.3.2.
Sync libedit with that of NetBSD on 8 Nov 2003.
Move libiberty into src/gnu/lib/libiberty, removing it from the egcs directory. The new library is a sync'd to "somewhere between binutils-2.10 and 2.11" with some local changes.
SECURITY FIX: Due to a bug in the parsing of Allow/Deny rules for httpd(8)'s access module, using IP addresses without a netmask on big endian 64-bit platforms causes the rules to fail to match. This only affects sparc64. A source code patch is available. [Applied to stable]
New -o option to kvm_mkdb(8), to put the database somewhere other than /var/db.
Fix return code from diff(1) when the -i option is in use.
Build ftp(1) statically linked, to help out when things go wrong.
Don't call the post-install script of packages that didn't fully install, and allow such packages to be fully removed.
Let pkg_add(1) install packages coming from stdin.
pkg_delete(1) allows the path to an installed package on the command line, so e.g. 'pkg_delete /var/db/pkg/zsh-*' now works.
The package tools now automatically use the target of the first @cwd in the packing list as the prefix.
Temporarily back out the recent reordering of interface capability tests and pf_test(). pf(4) rdr rules are now generating some bogus checksums.
In isakmpd(8), require encrypted messages as soon as we have the keystate for it, require DELETE payloads to be accompanied by HASHes, and add validation for HASH payloads without active exchanges.
Allow pf(4) tags to use the same macros as labels (see pf.conf(5)).
Make pkg_delete(1) handle dependencies properly when using package name stems.
Don't try to free a static string when checking ssh(1) host keys.
In regular (non-pf(4)) IP output code, defer the interface tests for hardware IPsec and checksum capability until after pf_test(), since pf might drop the packet, or send it to a different interface.
Make pf(4)-routed packets check the target interface for hardware IPsec and checksum capability.
Fix a memory leak when carp(4) fails to put the interface into promiscuous mode.
Add a missing check in IPv6 carp(4) for an interface on its way down.
Backout recent wdc(4) reset, identify and mode detection changes, they are breaking things.
Fix pf(4) binat for incoming connections when a netblock (not just a single address) is used as the rule source (PR#3535). [Applied to stable]
RELIABILITY FIX: A user with write permission to httpd.conf or a .htaccess file can crash httpd(8) or potentially run arbitrary code as the user www (although it is believed that ProPolice will prevent code execution). A source code patch is available. [Applied to stable]
Do a better job of finding the proper partition in growfs(8).
Evaluate dependencies earlier in pkg_delete(1), and if the check fails just give a list of the required removals and quit.
Don't die if getsockopt(..., TCP_NODELAY, ...) fails in ssh(1).
In wdc(4), add a pause between a drive reset and an IDENTIFY command, to allow for units that are sick just after a reset.
Don't do ATA mode detection for SATA drives, some drives really don't like it.
Set the skew properly when rescheduling carp(4) advertisements.
Reduce the amount of logging spamd(8) does by default. The new -v option does verbose logging.
Have privilege-separated syslogd(8) call setgroups when changing dropping privileges, in line with the same change in newly-separated pflogd(8).
Fix a panic when traversing a corrupt msdos filesystem. From NetBSD. [Applied to stable]
Implement privilege separation in pflogd(8). Requires creation of _pflogd user and group.
Add locking and write-filtering to bpf(4), so programs running as non-root can hold bpf descriptors without being able to write whatever they like at the link layer or issue dangerous ioctl(2)s.
Fix dc(1)'s J operator with the new extended comparisons.
Have tip(1) return the terminal to a sensible state on fatal errors.
Change malloc(3) so that it aborts the process on any error other than running out of memory. This is different to the 'A' malloc.conf switch that aborts on any error.
More randomness for temporary directories created by ssh-agent(1) and sshd(8).
Switch on the ssh(1) DNS fingerprint (sshfp) lookup code, previously not build by default. Still needs switched on in the config file.
Make e.g. 'MAKEDEV tty08 - tty7f' work.
Only endian-flip the fragment offset once on IPv6 input.
Do a hardware receive checksum in sk(4) too, working around the fact that sometimes the hardware gets it wrong.
On em(4) devices that support it, offload receive checksum calculation to the hardware. From FreeBSD.
Update timezone files again, this time to tzcode2003d.
Bring bge(4) and brgphy(4) more in line with updates in FreeBSD and NetBSD, both bug fixes and additional device support.
Remember the filename given when using ^X^W in mg(1).
Make shmat(2) under Linux compat work as expected.
Fix a buffer overflow in timedc(8). Found by FreeBSD, fixed differently here.
Allow multiple RCPTs in spamd(8), and stop looping on invalid commands.
Bring in a number of pipe(2) stability fixes from FreeBSD.
Fix httpd(8)'s handling of SSLCertificateChainFile under the chroot.
sshd(8) usage output now dumps the OpenSSL version too.
Don't try to send incomplete IPv4 fragments in the ENOBUFS case. Note that this is a behaviour change from 4.4BSD and applies to output from bridge(4) and pf(4) as well as vanilla IP output.
A couple of endianness fixes when setting the IPv4 output fragment offset.
A couple of minor malloc(3) fixes related to recursive calls and debugging.
Clean up IPv6 flowlabel handling.
New IPv6 ID and flowlabel generation code using arc4random(9).
Remove a bad m_cat(9) call when fragmenting outbound IPv6 packets.
Add a missing initialisation in pflog(4) that allowed kernel stack garbage to leak into .pcap files.
Have the libc stack protector code use the kernel __sysctl() call directly instead of using the libc sysctl(3) interface.
Stop reading ~/.signature to pre-fill the Organisation: field in sendbug(1) (PR#3499).
POSIX and interoperability fixes for bc(1) and dc(1),
SECURITY FIX: The use of certain ASN.1 encodings or malformed public keys may allow an attacker to mount a denial of service attack against applications linked with ssl(3). This does not affect OpenSSH. A source code patch is available. [Applied to stable]
Properly free resources on fxp(4) attach failures.
More ssh(1) buffer management fixes (CAN-2003-0682).
Further EDD detection improvements on i386.
Properly flush the ssh(1) RSA1 public key from memory when its output file cannot be opened (OpenSSH bugzilla #662).
Correct a double-free in the ssh(1) buffer management code (OpenSSH PR#660).
Fix the ssh(1) ConnectTimeout option (OpenSSH PR#656).
On i386, try harder to boot from removable media by allowing for their removal and insertion.
Updated and better-commented openbsd-proto.mc for sendmail(8).
Upgrade sendmail(8) to version 8.12.10. The address parsing security fix went into 3.4 and -stable, but not the full version update.
3.4 -> 3.4-current.
This list mentions mostly platform-independent changes. For a list of changes
made in a particular platform, please check the page for that platform. If you
find them not listed there, the changes are either (1) not being documented or
(2) are documented here.