FreeBSD The Power to Serve

FreeBSD 8.1-RELEASE Release Notes

The FreeBSD Project

$FreeBSD: stable/8/release/doc/en_US.ISO8859-1/relnotes/article.sgml 210449 2010-07-24 17:44:31Z hrs $

FreeBSD is a registered trademark of the FreeBSD Foundation.

IBM, AIX, EtherJet, Netfinity, OS/2, PowerPC, PS/2, S/390, and ThinkPad are trademarks of International Business Machines Corporation in the United States, other countries, or both.

IEEE, POSIX, and 802 are registered trademarks of Institute of Electrical and Electronics Engineers, Inc. in the United States.

Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

SPARC, SPARC64, SPARCengine, and UltraSPARC are trademarks of SPARC International, Inc in the United States and other countries. SPARC International, Inc owns all of the SPARC trademarks and under licensing agreements allows the proper use of these trademarks by its members.

Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the “™” or the “®” symbol.

The release notes for FreeBSD 8.1-RELEASE contain a summary of the changes made to the FreeBSD base system on the 8-STABLE development line. This document lists applicable security advisories that were issued since the last release, as well as significant changes to the FreeBSD kernel and userland. Some brief remarks on upgrading are also presented.

1 Introduction

This document contains the release notes for FreeBSD 8.1-RELEASE. It describes recently added, changed, or deleted features of FreeBSD. It also provides some notes on upgrading from previous versions of FreeBSD.

This distribution of FreeBSD 8.1-RELEASE is a release distribution. It can be found at or any of its mirrors. More information on obtaining this (or other) release distributions of FreeBSD can be found in the “Obtaining FreeBSD” appendix to the FreeBSD Handbook.

All users are encouraged to consult the release errata before installing FreeBSD. The errata document is updated with “late-breaking” information discovered late in the release cycle or after the release. Typically, it contains information on known bugs, security advisories, and corrections to documentation. An up-to-date copy of the errata for FreeBSD 8.1-RELEASE can be found on the FreeBSD Web site.

2 What's New

This section describes the most user-visible new or changed features in FreeBSD since 8.0-RELEASE.

Typical release note items document recent security advisories issued after 8.0-RELEASE, new drivers or hardware support, new commands or options, major bug fixes, or contributed software upgrades. They may also list changes to major ports/packages or release engineering practices. Clearly the release notes cannot list every single change made to FreeBSD between releases; this document focuses primarily on security advisories, user-visible changes, and major architectural improvements.

2.1 Security Advisories

Problems described in the following security advisories have been fixed. For more information, consult the individual advisories available from

Advisory Date Topic
SA-09:15.ssl 3 Dec 2009

SSL protocol flaw

SA-09:16.rtld 3 Dec 2009

Improper environment sanitization in rtld(1)

SA-09:17.freebsd-update 3 Dec 2009

Inappropriate directory permissions in freebsd-update(8)

SA-10:01.bind 6 Jan 2010

BIND named(8) cache poisoning with DNSSEC validation

SA-10:02.ntpd 6 Jan 2010

ntpd mode 7 denial of service

SA-10:03.zfs 6 Jan 2010

ZFS ZIL playback with insecure permissions

SA-10:04.jail 27 May 2010

Insufficient environment sanitization in jail(8)

SA-10:05.opie 27 May 2010

OPIE off-by-one stack overflow

SA-10:06.nfsclient 27 May 2010

Unvalidated input in nfsclient

SA-10:07.mbuf 13 July 2010

Lost mbuf flag resulting in data corruption

2.2 Kernel Changes

The ddb(4) debugger has been improved:

  • It now supports show ifnets and show ifnet struct ifnet * commands to print a list of “ifnet *” of each virtual network stack and fields of specified fip, respectively.

  • It now supports show all lltables, show lltable struct lltable *, and show llentry struct llentry * commands to print a list of “lltable *” of each virtual network stack, fields of specified structures respectively.

  • The show mount command now prints active string mount options.

  • It now supports show vnetrcrs command to dump the whole log of distinctive curvnet recursion events.

  • It now supports show vnet_sysinit and show vnet_unsysinit commands to print ordered call lists.

A new kernel thread called “deadlock resolver” has been added. This can be used to detect possible deadlock by using information of thread state and heuristic analysis. This is not enabled by default. To enable this, an option option DEADLKRES in kernel configuration file and recompilation of the kernel.

The default devfs(5) rules now expose the upper 256 of pty(4) device nodes.

Two commands to enable/disable read-ahead have been added to fcntl(2) system call:

  • F_READAHEAD specifies the amount for sequential access. The amount is specified in bytes and is rounded up to nearest block size.

  • F_RDAHEAD is a Darwin compatible version that use 128KB as the sequential access size.

Note that the read-ahead amount is also limited by sysctl variable vfs.read_max, which may need to be raised in order to better utilize this feature.

The lindev(4) driver has been added. This is for supporting various Linux-specific pseudo devices such as /dev/full. Note that this is not included in GENERIC kernel.

A POSIX function pselect(3) has been reimplemented as a system call pselect(2) to eliminate race condition.

A kernel option option INCLUDE_CONFIG_FILE has been added to GENERIC kernel by default.

A bug in the sched_4bsd(4) scheduler that the timestamp for the sleeping operation is not cleaned up on the wakeup has been fixed.

A race condition in the sched_4bsd(4) scheduler has been fixed.

A bug in the sched_ule(4) scheduler which prevented process usage (%CPU) from working correctly has been fixed.

New SDT (Statically Defined Tracing) probes such as ones for opencrypto and vnet have been added to FreeBSD dtrace(1) subsystem.

[powerpc] FreeBSD now supports SMP in PowerPC G5 systems. Note that SMP support on FreeBSD/powerpc is disabled by default in GENERIC kernel.

[sparc64] FreeBSD now supports UltraSPARC IV, IV+, and SPARC64 V CPUs.

The syscons(4) driver has been improved. The history buffer can be fully saved/restored in the VESA mode switching via a loader tunable

A bug in the tty(4) driver that TIOCSTI did not work has been fixed. This affects applications like mail(1).

[amd64, i386] An x86 real mode emulator based on OpenBSD's x86emu implementation has been added to improve real mode BIOS call support on both i386 and amd64. The atkbdc(4), dpms(4), vesa(4), vga(4) driver now use this emulator and work on the both platforms.

The VIMAGE jail(8) virtualization container can work with sctp(4) now. Note that the VIMAGE is not enabled by default in GENERIC kernel.

The VIMAGE jail(8) now supports ip4.saddrsel, ip4.nosaddrsel, ip6.saddrsel, and ip6.nosaddrsel to control whether to use source address selection or the primary jail address for unbound outgoing connections. The default value is to use source address selection.

2.2.1 Boot Loader Changes

[pc98] The boot2 bootcode has been reimplemented based on the i386 counterpart. It now supports ELF binary, UFS2 file system, and larger number of slices.

[ia64] The EFI loader program now supports a command-line option -dev currdev to specify the default value of currdev. This option can be set by the EFI boot manager.

[powerpc] The loader(8) program now supports U-Boot storage.

[i386] The algorithm the loader(8) uses has been improved to choose a memory range for its heap when using a range above 1MB. This fixes a symptom that the loader fails to load a kernel.

A kernel environment variable vfs.root.mountfrom now supports multiple elements for root file system in a space-separated list. Each list element will be tried in order and the first available one will be mounted.

The zfsloader has been added. This is a separate zfs(8) enabled loader. Note that a ZFS bootcode (zfsboot or gptzfsboot) need to be installed to use this new loader.

The zfsboot and gptzfsboot bootcode now fully support 64-bit LBAs for disk addresses. This allows booting from large volumes.

2.2.2 Hardware Support

[powerpc] The adb driver now supports for interpreting taps on ADB touchpads as a button click.

The amdsbwd(4) driver for AMD SB600/SB7xx watchdog timer has been added.

[powerpc] The apt driver for the Apple Touchpad present on MacBook has been added to GENERIC kernel.

[sparc64] The epic(4) driver for the front panel LEDs in Sun Fire V215/V245 has been added.

A bug in the ipmi(4) driver that caused incorrect watchdog timer setting has been fixed.

[sparc64] The pci(4) driver now supports a JBus to PCIe bridge (called as “Fire”) found in the Sun Fire V215/V245 and Sun Ultra 25/45 machines.

[powerpc] The smu(4) driver now provides thermal management and monitoring features. This allows fan control and thermal monitoring on SMU-based Apple G5 machines, as well as an led(4) interface to control the sleep LED.

The tnt4882(4) driver for IEEE-488 (GPIB) bus now supports National Instruments TNT5004 chip.

The uart(4) driver now supports NetMos NM9865 family of Serial/Parallel ports.

The uep(4) driver for USB onscreen touch panel from eGalax has been added. This driver is supported by x11-drivers/xf86-input-egalax.

A bug in the uftdi(4) driver that can allow to send a zero length packet has been fixed.

The usb(4) subsystem now reports devd(8) notify events with the device properties instead of attach events. The following is an example entry of devd.conf(5) to match a umass(4) device with a SCSI subclass and BBB protocol:

notify 100 {
    match "system"      "USB";
    match "subsystem"   "INTERFACE";
    match "type"        "ATTACH";
    match "intclass"    "0x08";
    match "intsubclass" "0x06";
    match "intprotocol" "0x50";
    action "/path/to/command -flag";
}; Multimedia Support

The acpi_video(4) driver now supports LCD brightness control notify handler.

The acpi_sony(4) helper driver now supports default display brightness, wired LAN power, and bass gain.

The agp(4) driver has been improved. It includes a fix for aperture size calculation issue which prevents some graphics cards from working.

The snd_hda(4) driver now allows AD1981HD codecs to use playback mixer.

The snd_hda(4) driver now supports multichannel (4.0 and 7.1) playback support. The 5.1 mode support is disabled now due to unidentified synchronization problem. Devices which supports the 7.1 mode can handle the 5.1 operation via software upmix done by sound(4). Note that stereo stream is no longer duplicated to all ports. Network Interface Support

The ath(4) driver now supports Atheros AR9285-based devices.

A bug in the ath(4) driver which causes a problem of AR5416-based chipsets including AR9285 has been fixed.

The bge(4) driver now supports BCM5761, BCM5784, and BCM57780-based devices.

The bge(4) driver now supports TSO (TCP Segmentation Offloading) on BCM5755 or newer controllers.

A long-standing bug in the bge(4) driver which was related to ASF heartbeat sending has been fixed.

A long-standing stability issue of the bce(4) and bge(4) driver due to a hardware bug in its DMA handling when the system has more than 4GB memory has been fixed. This applies to BCM5714, BCM5715, and BCM5708 controllers.

A bug in the bge(4) driver that incorrectly enabled TSO on BCM5754/BCM5754M controllers has been fixed.

A bug in the if_bridge(4) driver has been fixed. The MTU was set based on the firstly-added member even if the addition failed.

The if_bridge(4) driver now supports SIOCSIFMTU ioctl. For example, ifconfig bridge0 mtu 1280 can change the MTU of bridge0 to 1280. Changing the MTU is allowed only when all members have the same MTU value.

The bwn(4) driver for Broadcom BCM43xx chipsets has been added.

The cxgb(4) driver has been updated to T3 firmware 7.8.0.

The cxgb(4) driver now supports hardware filtering based on inspection of L2/L3/L4 headers. Filtering based on source IP address, destination IP address, source port number, destination port number, 802.1q VLAN frame tag, UDP, TCP, and MAC address is possible. The configuration can be done by the cxgbtool(8) utility. Note that cxgbtool(8) is in src/usr.sbin/cxgbtool but not compiled by default.

The em(4) driver has been updated to version 7.0.5.

The et(4) driver now supports MSI and Tx checksum offloading of IPv4, TCP, and UDP.

The fxp(4) driver now exports the hardware MAC statistics via sysctl variables.

The igb(4) driver has been updated to version 1.9.5.

The iwn(4) driver has been updated. This includes various improvements and bugfixes regarding RF switch, bgscan support, suspend/resume support, locking issue, and more. The line device iwnfw in the kernel configuration file will include all firmware images.

The ixgbe(4) driver has been updated to version 2.2.0.

The msk(4) driver has been improved:

  • It now supports Marvell Yukon 88E8042, 88E8057, 88E8059 (Yukon Optima) devices and DGE-560SX (Yukon XL).

  • A rudimentary interrupt moderation with programmable countdown timer register has been implemented. The default parameter of the holdoff time is 100us and this can be changed via sysctl variable dev.mskc.0.int_holdoff. Note that the interrupt moderation is shared resource on a dual-port controllers and it is impossible to use separate interrupt moderation values for each port.

  • A stability issue has been fixed. A heavy RX traffic while rebooting is in progress could prevent the system from working.

The mxge(4) driver has been updated to firmware version 1.4.50 from Myricom.

The re(4) driver no longer performs an unnecessary interface up/down during getting IP address via DHCP.

The re(4) driver now uses 2048 as PCIe Maximum Read Request Size. This improves bulk transfer performance.

The run(4) driver for Ralink RT2700U/RT2800U/RT3000U USB 802.11agn devices has been added.

The sge(4) driver for Silicon Integrated Systems SiS190/191 Fast/Gigabit Ethernet has been added. This supports TSO and TSO over VLAN.

The ste(4) driver has been improved:

  • The DMA handling has been improved.

  • Wake-On-LAN is now supported.

  • Unnecessary reinitialization of the interfaces has been eliminated.

  • RX interrupt moderation with single shot timer has been implemented. The default parameter of the moderation time is 150us and this can be changed via sysctl variable dev.ste.0.int_rx_mod. Setting it 0 effectively disables the RX interrupt moderation feature.

The tsec(4) driver now supports altq(4).

The u3g(4) driver has been improved and now works with ZTE MF636, Option Gi0322, Globetrotter GE40x, and Novatel MC950D.

The uhso(4) driver for Option HSDPA USB devices has been added. A new uhsoctl(1) userland utility can be used to initiate and close the WAN connection.

The vge(4) driver has been improved:

  • The DMA handling has been improved.

  • Wake-On-LAN is now supported.

  • Unnecessary reinitialization of the interfaces has been eliminated.

  • Hardware MAC statistics are now supported via sysctl variables dev.vge.0.stats.

  • Interrupt moderation with single shot timer and scheme supported by VT61xx controllers have been implemented. The default parameters are tuned to generate interrupt less than 8k per second, and these parameters can be changed via sysctl variables dev.vge.0.int_holdoff, dev.vge.0.rx_coal_pkt, and dev.vge.0.tx_coal_pkt. Note that an up/down cycle is needed to make a parameter change take effect.

The urtw(4) driver has been improved and now supports RTL8187B-based devices.

The FreeBSD Xen netfront driver has been improved in stability and performance.

2.2.3 Network Protocols

FreeBSD flowtable now supports IPv6. This is for per-CPU caching flows as a means of accelerating L3 and L2 lookups as well as providing stateful load balancing when ECMP (Equal-Cost Multi-Path routing) is enabled by option RADIX_MPATH.

A new capability flag LINKSTATE has been added to struct ifnet.if_capabilities. This indicates if the interface can check the link state or not. The ifconfig(8) utility now shows this flag if supported.

A new event handler iflladdr_event has been added. This signals that the L2 address on an interface has changed, and lets stacked interfaces such as vlan(4) detect that their lower interface has changed and adjust things in order to keep working. This fixes an issue of lagg(4) and vlan(4) configuration.

IPcomp (IP Payload Compression Protocol defined in RFC 2393) protocol is now enabled by default. Note that this requires option IPSEC in the kernel configuration file and GENERIC kernel does not include it. This functionality can be disabled by using a sysctl variable net.inet.ipcomp.ipcomp_enable.

The ipfw(4) subsystem including dummynet(4) has been updated to “ipfw3” and various bugs have been fixed:

  • The major enhancement is a completely restructured version of dummynet(4), with support for different packet scheduling algorithms (loadable at runtime), faster queue/pipe lookup, and a much cleaner internal architecture and kernel/userland ABI which simplifies future extensions.

  • All of O(N) sequences in the firewall rule evaluation removed from the kernel critical sections. The worst case is now O(log N).

  • It now supports ipfw0 pseudo interface for logging similar to pflog(4). A sysctl net.inet.ip.fw.verbose=0 enables logging to ipfw0, and net.inet.ip.fw.verbose=1 sends logging to syslog(3) as before.

  • The me keyword in the ipfw(4) rule now matches any IPv6 addresses configured on an interface as well as IPv4 ones.

  • A bug that keep-alive rule did not work for IPv6 packets has been fixed.

  • The lookup match option has been added.

    lookup {dst-ip|src-ip|dst-port|src-port|uid|jail} N

    This searches the specified field in table N and sets tablearg accordingly. With dst-ip or src-ip the option replicates two existing options. When used with other arguments, the option can be useful to quickly dispatch traffic based on other fields.

  • A bug in the sysctl(8) variable ip.fw.one_pass handling has been fixed. A packet which comes from a pipe without being delayed incorrectly ignored this variable.

A memory alignment issue in the ng_ksocket(4) and ng_ppp(4), Netgraph node drivers have been fixed. This fixes kernel panics due to the misalignment.

The ng_bridge(4) and ng_hub(4) Netgraph node drivers now supports a flag persistent. It disables automatic node shutdown when the last hook gets disconnected. The new control messages NGM_BRIDGE_SET_PERSISTENT and NGM_HUB_SET_PERSISTENT have been added for the flag.

The pf(4) subsystem now supports sloppy keyword to enable a TCP state machine for tracking TCP connections with no sequence number check. This feature is in the latest version of pf.

The pfil(9) framework for packet filtering in FreeBSD kernel now supports separate packet filtering instances like ipfw(4) for each VIMAGE jail.

A bug that proxy ARP entries cannot be added over point-to-point link types has been fixed.

The tap(4) pseudo interface now reports the link state properly by updating if_link_state variable in the kernel.

The vlan(4) pseudo interface has been added to GENERIC kernel.

The vlan(4) pseudo interface now supports TSO (TCP Segmentation Offloading). The capability flag is named as IFCAP_VLAN_HWTSO and it is separated from IFCAP_VLAN_HWTAGGING. The age(4), alc(4), ale(4), bce(4), bge(4), cxgb(4), jme(4), re(4), and mxge(4) driver support this feature.

The vlan(4) pseudo interface for IEEE 802.1Q VLAN now ignore renaming of the parent's interface name. The configured VLAN interfaces continue to work with the new name while previously the configurations were removed as the renaming happens.

2.2.4 Disks and Storage

The ada(4) driver now supports BIO_DELETE. For SSDs this uses TRIM feature of DATA SET MANAGEMENT command, as defined by ACS-2 specification working draft. For Compact Flash use CFA ERASE command, same as ad(4) does. This change realizes restoring write speed of SSDs which supports TRIM command by doing newfs -E /dev/ada1, for example.

The ahci(4) driver now supports SATA part of Marvell 88SE912x controllers.

The ahci(4) driver now supports FIS-based (Frame Information Structure) switching of port multiplier on supported controllers.

The ahd(4) driver now supports three separated error counters for correctable, uncorrectable, and fatal, in sysctl(8) MIB.

A new kernel option option ATA_CAM has been added. This turns ata(4) controller drivers into cam(4) interface modules. When enabled, this option deprecates all ata(4) peripheral drivers and interfaces such as ad and acd, and allows cam(4) drivers ada, and cd and interfaces to be natively used instead. Note that this is not enabled by default in the GENERIC kernel.

A bug in the ata(4) driver which can lead to interrupt storms and command timeouts has been fixed.

USB mass storage device support in the ata(4) driver has been removed. Note that this was not used in GENERIC kernel and the umass(4) driver supports such devices for a long time.

FreeBSD cam(3) SCSI framework has been improved:

  • SATA and PATA support has been improved and it now recognizes more detail device capabilities. For example, the ahci(4) and siis(4) driver now reports maximum tag number to the framework to optimize the NCQ handling.

  • A loader tunable has been added. This controls the delay time before cam(3) probes the attached devices.

  • SCSI error recovery for devices on buses without automatic sense reporting has been improved. Typical devices are on ATAPI and USB. For example, this allows cam(3) to wait, while CD drive loads disk, instead of immediately return error status.

  • The cam(4) ATA transport layer now supports Power-Up In Stand-by (PUIS). The PUIS is a configuration of SATA or PATA drives to prevent them from automatic spin-up when power is applied. A typical application is staggered spin-up.

  • The cam(4) ATA transport layer now supports negotiating and enabling additional SATA features such as device initiated power management, Automatic Partial to Slumber mode transition, and DMA auto-activation.

A livelock issue of the ciss(4) driver under a high load has been fixed.

A bug in the fdc(4) driver which prevents the kernel module from unloading has been fixed.

The glabel(8) now supports the following sysctl variables for each label type to enable the labeling itself:


Note that all of them are also loader tunables. They are enabled (set as 1) by default.

geom(8) providers including complex ones such as gconcat(8), gmirror(8), graid3(8), gstripe(8), and some hardware RAID device drivers like twa(4) now inform its optimal access block size to the upper layer.

The gmirror(8) utility now supports configure -p priority command to change the providers priority.

The balancing mode algorithm load used in the gmirror(8) utility has been changed and it is now the default one instead of split:

  • Instead of measuring last request execution time for each drive and choosing one with smallest time, use averaged number of requests, running on each drive. This information is more accurate and timely. It allows to distribute load between drives in more even and predictable way.

  • For each drive track offset of the last submitted request. If new request offset matches previous one or close for some drive, prefer that drive. It allows to significantly speedup simultaneous sequential reads.

The gmultipath(8) utility now supports destroy, rotate, getactive commands.

A bug in the graid3(8) which causes a panic when a large request arrives has been fixed. This happens when MAXPHYS is set as larger than 128k.

The default block size of gstripe(8) has been increased from 4k to 64k.

The GEOM_SCHED module has been added. This supports scheduling disk I/O requests in a device independent manner. A supported algorithm is an anticipatory scheduler gsched_rr which gives very nice performance improvements in presence of competing random access patterns. See also gsched(8) manual page for more details.

The HAST (Highly Available STorage) framework has been added:

  • This is a framework to allow transparently storing data on two physically separated machines connected over the TCP/IP network. HAST works in Primary-Secondary (Master-Backup, Master-Slave) configuration, which means that only one of the cluster nodes can be active at any given time. Only Primary node is able to handle I/O requests to HAST-managed devices. Currently HAST is limited to two cluster nodes in total.

  • This operates on block level; it provides disk-like devices in /dev/hast/ directory for use by file systems and/or applications. Working on block level makes it transparent for file systems and applications. There in no difference between using HAST-provided device and raw disk, partition, etc. All of them are just regular geom(8) providers in FreeBSD.

  • The userland part consists of hastd(8), hastctl(8), and hast.conf(5). More details can be found at

The isp(4) driver has been improved in stability.

The mvs(4) CAM ATA driver for Marvell 88SX50XX/88SX60XX/88SX70XX/SoC SATA controllers has been added. This driver supports same hardware as the ata(4) driver does, but provides many additional features, such as NCQ and PMP.

The siis(4) driver now enables MSI by default on SiI3124-based devices. This can be disabled by using a hint.siis.0.msi loader tunable.

The Max Read Request Size in the siis(4) driver for PCIe chips has been increased from 512 to 1024 bytes for better performance.

The twa(4) driver has been updated to the latest version from LSI.

2.2.5 File Systems

The msdosfs(5) subsystem is now MP-safe and a race condition when a force unmount happens has been fixed.

FreeBSD NFS subsystem now supports a timeout for the negative name cache entries in the client. This avoids a bogus negative name cache entry from persisting forever when another client creates an entry with the same name within the same NFS server time of day clock tick. The mount option negnametimeo can be used to override the default timeout interval (60 seconds) on a per-mount-point basis. a Setting negnametimeo to 0 disables negative name caching for the mount point.

A race condition in FreeBSD NFS subsystem that occurs when nfsiod(8) threads are being created has been fixed. This also fixes an interoperability issue found in combination of a FreeBSD NFS client and a Linux NFS server.

The inode number handling in ffs(7) file system is now unsigned. Previously some large inode numbers can be treated as negative, and this issue shows up at file systems with the size of more than 16Tb in 16k block case. The newfs(8) utility never create a file system with more than 2^32 inodes by cutting back on the number of inodes per cylinder group if necessary to stay under the limit.

The UFS file system ( ffs(7)) now supports NFSv4 ACL.

FreeBSD VFS(9) subsystem now supports a new sysctl variable vfs.vlru_allow_cache_src. This allow vnlru kernel thread to reclaim of the directory vnodes that are source of the namecache records. This is not enabled by default because for typical workload it would make namecache unusable, but large nested directory tree easily puts any process that accesses file system into one second wait for vnlru kernel thread.

The ZFS file system has been improved:

  • It now supports NFSv4 ACL.

  • The L2ARC code has been improved in stability and performance.

  • The zpool version has been updated to version 14. It is now possible to use zpools created on OpenSolaris 2009.06.

  • A sysctl variable vfs.zfs.txg.write_limit_override has been added. This can be used for tuning of ZFS write throttling.

  • ZFS prefetch statistics has been added as a sysctl variable kstat.zfs.misc.zfetchstats.

  • The zfs(8) zpool export command now supports -F flag. When exporting with this flag, zpool.cache remains untouched.

  • A data corruption issue of zfs send/receive between two different platforms has been fixed. Symbolic links could be broken in the previous releases.

  • A possible deadlock of zfs receive has been fixed.

  • Possible panics of zfs destroy and zfs rollback have been fixed.

  • A occasional failure of zfs rename due to a busy state has been fixed.

  • Bugs that zfs snapshot -r fails when the file system is busy, and zfs receive can fail with an E2BIG error, have been fixed.

2.3 Userland Changes

A bug in bsnmpd(1) program which leads to high CPU consumption on a loaded system has been fixed.

A bug in bzip2(1) utility which prevented it from working with multi-session bzip2 files has been fixed.

The camcontrol(8) utility now supports a -v flag in the subcommand identify. It displays whole of identify data block.

The camcontrol(8) utility now supports -d and -f flags in the subcommand cmd. They specify DMA protocol or FPDMA (NCQ) protocol to be used for ATA command, respectively.

The chgrp(1) and chown(8) now support a -x flag to make it not traverse across multiple mount points for the recursive operation.

The cp(1) now supports a -x flag to make it not traverse across multiple mount points for the recursive operation.

The cp(1), find(1), getfacl(1), mv(1), and setfacl(1) utilities now support NFSv4 ACL.

The diskinfo(8) now supports reporting disk stripe size and offset. This helps users to make file systems optimally aligned and tuned for better performance.

A bug in ee(1) utility which can crash the program has been fixed.

A bug in factor(6) utility which leads to performance degradation has been fixed.

The fetch(1) utility now supports HTTP digest authentication.

A bug in fetch(1) utility which incorrectly evaluates a variable NO_PROXY has been fixed.

A bug in find(1) utility has been fixed. An option -newerXB was interpreted as the same as -newerXm.

A bug in the fnmatch(3) function has been fixed. The flag FNM_PERIOD did not work correctly when * characters were included in the string and FNM_PATHNAME was specified.

A bug in the fsck_ffs(8) utility which causes the last cylinder group of a UFS1 file system is always reported as broken even after it is fixed.

The gcore(1) utility now recognizes threads in the process and handles dumps on a thread scope.

The ifconfig(8) utility now supports manipulation of NDP flags handled by ndp(8).

The ifconfig(8) utility now supports a description value command to add a description value to the specified interface.

The indent(1) utility now supports a -ta flag to treat all _t-suffixed identifiers as types.

The liblzma library for LZMA2 lossless data compression algorithm and the userland utilities xz(1), xzdec(1), lzma(1), and lzmainfo(1). has been imported. When the old system is upgraded to 8.1-RELEASE, deinstalling a version found in the Ports Collection (archivers/xz) and recompilation of the packages which depend on it may be required.

[amd64, i386] The libz library has been improved in performance. For FreeBSD/i386, note that this improvement uses instructions only on i686-class CPU and they are disabled by default. Specifying CPUTYPE=pentium4 in /etc/make.conf enables them.

The ln(1) utility now reports an error correctly when a -f flag and two same file entries were specified in the command line option. It removed the file first and then reported a “not found” error.

The ln(1) utility now removes trailing slash characters when creating a link to a directory. The following command sequence reported an error in the previous releases:

% mkdir test1 test2
% ln -s ../test2/ test1

The mount_nfs(8) utility now supports [ipaddr]:path notation in addition to the existing one. This allows IPv6 address in the address field, and a path including “:” to be mounted.

A bug in the netstat(1) utility that prevents netstat -f netgraph from working has been fixed.

The netstat(1) utility now supports ARP information in statistics shown by the -s flag.

The netstat(1) utility now supports a -q number option to specify the number of outputs. This is used in conjunction with -w option.

The newfs_msdos(8) utility now uses NO_NAME as the default volume label and BSD4.4 as the OEM String.

The newsyslog(8) utility does not consider non-existence of a PID file as an error now. A new flag -P reverts it to the old behavior.

The ntpd(8) program no longer tries to bind to an IPv6 anycast address.

The pam_krb5(8) PAM module now supports no_user_check option. This allows to authorize a user not known to the local system.

The pathchk(1) utility now supports a -P flag defined in POSIX-1.2008. This checks for empty pathnames and components starting with “-”.

A variable daily_clean_tmps_ignore which is used in the periodic(8) daily script now has /tmp/.snap. This prevents /tmp/.snap from being removed.

The procstat(1) utility now supports two new flags -i and -j to display information about signal disposition and pending/blocked status for signals.

The pwait(1) utility has been added. This is similar to the Solaris utility of the same name, and waits for any process to terminate.

A bug in the restore(8) utility which caused short reads when a option -P was used has been fixed.

The rtsold(8) -a flag now excludes the interfaces which IPv6 or accepting ICMPv6 Router Advertisement message is disabled from the auto-probed interface list.

The scandir(3) and alphasort(3) functions has been updated to conform POSIX.1-2008 (IEEE Std 1003.1-2008).

The sed(1) utility now supports a -r flag which means exactly the same as a -E flag. This is for compatibility with the GNU version.

The service name database services(5) (usually in /etc/services) now also supports a db(3) style database for better lookup performance. The following entry in /etc/nsswitch.conf enables use of the binary database file:

services: db

Note that the db(3) style database can be created by services_mkdb(8) at /var/db/service.db.

The sighold(2), sigignore(2), sigpause(2), sigrelse(2), and sigset(2) functions have been implemented for making porting software from System V-like systems easy. Note that these are defined in POSIX.1-2008 XSI (IEEE Std 1003.1-2008, X/Open System Interface) but now obsolete. Since FreeBSD already has another sigpause(3) function derived from 4.2BSD, a version of the XSI interface is implemented as xsi_sigpause().

The sshd(8), cron(8), inetd(8), and syslogd(8) programs now set MADV_PROTECT memory flag onto themselves to protect from being terminated by the FreeBSD kernel when available memory becomes short. This kind of process termination happens in a swap-intensive workload.

The stat(1) utility now supports %Sf output specifier to display the file flags symbolically.

The strsignal(3) function is now thread-safe.

The sysctl(8) utility now supports a -i flag to ignore failures while retrieving individual OIDs. This allows the same list of OIDs to be passed to sysctl(8) across different systems where particular OIDs may not exist, and still get as much information as possible from them.

The traceroute(8) utility now performs source address selection correctly even in a VIMAGE jail(8) environment.

The unifdef(1) utility has been updated to version 1.188. It now supports a new -B flag to compress blank lines around a deleted section to prevent blank lines around paragraphs of code from getting doubled.

The unzip(1) utility now supports the rename query when a file with the same name as the one about to be extracted already exists.

The unzip(1) utility now supports -C, -c, -f, -p, and -v flags which are compatible with Info-ZIP.

The usbconfig(8) utility now supports a new flag -d to specify the ugen(4) device, and add_quirk and remove_quirk commands.

The whois(1) utility now supports searching IPv6 addresses just like IPv4 without specifying the ARIN server. A -d flag has been removed because it is now obsolete.

A new errno ENOTCAPABLE has been added. This is to be returned when a process requests an operation on a file descriptor that is not authorized by the descriptor's capability flags.

The zfs(8) command now supports a new flag receive -u to specify that the received ZFS should not be mounted automatically.

2.3.1 /etc/rc.d Scripts

The service(8) command has been added. This provides an easy command-line interface to the rc.d system.

The rc.d/ipfw script and /etc/rc.firewall now supports IPv6 and rc.d/ip6fw script and /etc/rc.firewall6 are obsolete. Note that ipv6_firewall_* variables in rc.conf(5) are replaced with firewall_client_net_ipv6, firewall_simple_iif_ipv6, firewall_simple_inet_ipv6, firewall_simple_oif_ipv6, firewall_simple_onet_ipv6.

A new rc.d script rc.d/rtsold has been added. This handles rtsold(8) daemon.

A new rc.d script rc.d/static_arp has been added. This allows the administrator to statically define mappings of MAC address to IPv4 at boot time. See also the rc.conf(5) manual page for more details.

The rc.d/tmp script now uses a unique directory name prefixed with /tmp/.diskless instead of /tmp/.diskless itself. This fixes an issue when /tmp/.diskless exists before the script runs.

A new rc.d script rc.d/ubthidhci has been added. This small script calls usbconfig(8) to change a USB Bluetooth controller from HID mode to HCI mode.

The rc.conf(5) now supports a firewall_coscripts variable. This should contain a list of commands which should be executed after firewall starts or stops.

The rc.conf(5) now supports configuring vlan(4) interfaces as child devices similar to wlan(4) interfaces. vlan(4) interfaces are listed via a new vlans_IF variable. If a VLAN interface is a number, then that number is treated as the VLAN tag for the interface and the interface will be named IF.tag. Otherwise, the VLAN tag must be provided via a VLAN parameter in a create_args_IF variable.

2.4 Contributed Software

The ACPI-CA has been updated to 20100304.

The awk has been updated from the 23 October 2007 release to the 26 November 2009 release.

ISC BIND has been updated to version 9.6.2-P2.

netcat has been updated to version 4.7.

OpenSSH has been updated from version 5.1p1 to version 5.4p1.

OpenSSL has been updated to version 0.9.8n.

sendmail has been updated to version 8.14.4.

The timezone database has been updated to the tzdata2010j release.

2.5 Release Engineering and Integration

The filename of ISO images for FreeBSD releases now has a FreeBSD- at the beginning.

The supported version of the GNOME desktop environment (x11/gnome2) has been updated to 2.28.2.

The supported version of the KDE desktop environment (x11/kde4) has been updated to 4.4.3.

3 Upgrading from previous releases of FreeBSD

[amd64, i386] Upgrades between RELEASE versions (and snapshots of the various security branches) are supported using the freebsd-update(8) utility. The binary upgrade procedure will update unmodified userland utilities, as well as unmodified GENERIC kernel distributed as a part of an official FreeBSD release. The freebsd-update(8) utility requires that the host being upgraded has Internet connectivity.

An older form of binary upgrade is supported through the Upgrade option from the main sysinstall(8) menu on CDROM distribution media. This type of binary upgrade may be useful on non-i386, non-amd64 machines or on systems with no Internet connectivity.

Source-based upgrades (those based on recompiling the FreeBSD base system from source code) from previous versions are supported, according to the instructions in /usr/src/UPDATING.

Important: Upgrading FreeBSD should, of course, only be attempted after backing up all data and configuration files.

This file, and other release-related documents, can be downloaded from

For questions about FreeBSD, read the documentation before contacting <>.

For questions about this documentation, e-mail <>.

Last modified on: May 15, 2021 by Allan Jude