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 9.1-RELEASE contain a summary of the changes made
to the FreeBSD base system on the 9.1-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.

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

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 9.1-RELEASE can be found on the FreeBSD Web site.

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

Typical release note items document recent security advisories issued after
9.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.

The FreeBSD Jail subsystem now supports mounting devfs(5), nullfs(5), and
ZFS filesystem inside a jail. New jail(8)
parameters allow.mount.devfs, allow.mount.nullfs, and allow.mount.zfs to control the per-jail capabilities have
been added. All of them are disabled by default.[r232728]

A new loader(8)
tunable kern.eventtimer.activetick has been added.
This tunable specifies whether each hardclock tick should be run on every
active CPU or only one. By setting it to 0, the total
number of interrupts can be reduced on SMP machines. The default value is 1.[r234167]

The posix_fadvise(2)
system call has been implemented. This is a function similar to madvise(2)
except that it operates on a file descriptor instead of a memory region.[r229723]

The filemon(4)
pseudo-device has been added. This allows a process to collect file operations
data of its children.[r237795]

The sysctl(8)
variable kern.stop_scheduler_on_panic is now set to
1 by default.[r235413]

[powerpc] FreeBSD/powerpc64 now supports kernel profiling by using kgmon(8).[r231907]

The FreeBSD Linux ABI compatibility layer now supports the linux_fadvise64() and linux_fadvise64_64() system calls.[r231145]

The default value of the loader(8)
tunable hw.memtest.tests is now automatically set
to 0 when FreeBSD is running on a virtual machine.[r230266]

A new loader(8)
tunable kern.msgbuf_show_timestamp has been added.
When it is enabled, a timestamp is added to each line of the system message
buffer. The default value is 0 (disabled).[r234075]

The FreeBSD sched_ule(4)
scheduler has been improved for CPU load balancing on SMT (Simultaneous
MultiThreading) CPUs. It gives a 10-15% performance improvement when the number
of threads is lesser than the number of logical CPUs.[r233599]

[sparc64] The PREEMPTION kernel option is now enabled in
the GENERIC kernel.[r235992]

A new sysctl(8)
variable security.bsd.unprivileged_idprio has been
added. This variable controls whether non-root users can set an idle priority
or not. This is disabled by default.[r230039]

The boot0cfg(8)
utility now supports configuration of PXE boot via the boot0 boot block temporarily on the next boot. The slice
number 6 or a keyword PXE can be
specified to enable PXE boot using the -s option.[r230065]

The FreeBSD boot(8) block
now supports /boot/config in addition to /boot.config as the boot block parameter file. When both of
them exist, the former will be used.[r231287]

The gptboot boot block now reads the backup GPT header
from the last LBA only when the primary GPT header and tables are invalid. This
mitigates interoperability issues with some geom(4)
providers like MIRROR which use the last LBA for the
metadata.[r234693]

The zfsboot boot block and zfsloader support filesystems within a ZFS storage pool. In
zfsloader, the ZFS device name format is now zfs:pool/fs and the fully qualified file path format is
zfs:pool/fs:/path/to/file. The zfsboot boot block accepts the kernel/loader name in the
format pool:fs:path/to/file
or, as before, pool:path/to/file. In the latter case a default
filesystem is used (the pool root or a filesystem with the bootfs property). The zfsboot boot
block passes the GUIDs of the selected storage pool and dataset to zfsloader to be used as its defaults.[r237766]

[sparc64] FreeBSD/sparc64 now supports booting from ZFS via the zfsboot boot block and zfsloader.
For example, the following commands create a mirrored storage pool rpool consisting of da0a and da0b and configure the storage pool as the root filesystem:[r236076]

[powerpc] The abtn(4)
driver, which supports ADB keyboards found on Apple laptops, has been added.[r230751]

[amd64] A workaround for Erratum 721 for AMD Processor Family 10h and 12h has
been implemented. Under a highly specific and detailed set of internal timing
conditions, the processor may incorrectly update the stack pointer after a long
series of push and/or near-call instructions, or a long series of pop and/or
near-return instructions.[r233798]

[powerpc] The atibl(4) driver, which supports backlight control of ATI graphics
chips on PowerBooks and iBooks, has been added.[r232677]

The pcf8563(4) driver for the NXP (Philips) PCF8563 RTC has been added.[r236078]

[powerpc] FreeBSD/powerpc now supports the PWM-controlled fans found on the
PowerMac SMU (System Management Unit).[r233471]

[arm] FreeBSD/arm now supports the Atmel SAM9XE family of microcontrollers.[r236081]

The following sysctl(8)
variables have been added: kern.proc.env for
environment strings, kern.proc.auxv for ELF auxiliary
vectors from a process's stack, kern.proc.groups for
process groups, kern.proc.rlimit for process resource
limits, kern.proc.ps_strings for the ps_strings
location, and kern.proc.osrel for the osreldate of the
process's binary.[r230754, r233950]

The usb(4) driver
now handles suspend and resume correctly with no need to reload the kernel
module.[r229100, r229369]

A bug in the xhci(4) (USB
3.0) driver has been fixed. It did not work with USB 3.0 hubs.[r230302]

The viawd(4) driver,
which supports the watchdog timer found in VIA south bridges (VT8251, CX700,
VX800, VX855, VX900), has been added.[r229927]

The wbwd(4) driver,
which supports the watchdog timer found in Winbond Super I/O chips, has been
added.[r235926]

The drm2(4) Intel GPU driver, which supports GEM and KMS and works with new
generations of GPUs such as IronLake, SandyBridge, and IvyBridge, has been
added. The agp(4) driver
now supports SandyBridge and IvyBridge CPU northbridges.[r236926, r236927, r239965]

The snd_hda(4)
driver has been updated. It now supports and provides HDMI, new volume control,
automatic recording source selection, runtime reconfiguration, more then 4
PCM devices on a controller, multichannel recording, additional playback/record
streams, higher bandwidth, and more informative device names.[r232798]

The snd_hdspe(4)
driver has been added. This supports RME HDSPe AIO and RayDAT sound cards.[r233165]

A bug has been fixed which could prevent IPMI from working when the
interface was marked as down.[r236216]

It now supports remote PHYs, which allow the controller to perform MDIO type
accesses to a remote transceiver by using message pages defined
through MRBE (MultiRate Backplane Ethernet). This is found on
machines such as the Dell PowerEdge M610 Blade.[r235818]

A bug which could prevent DMA functionality from working correctly has been
fixed.[r229350]

It now works with a PCI-X BCM 5704 controller that is connected to AMD-8131
PCI-X bridge.[r233495]

It now supports the BCM 5720 and BCM 5720C PHY, and the BCM 57780 1000BASE-T
media interface.[r229357, r229867, r232134]

It now supports a loader(8)
tunable dev.bge.N.msi to control the use of MSI. The
default value is 1 (enabled).[r231734]

The cxgbe(4) and
cxgb(4) drivers
have been updated to firmware version 1.5.2.0. They now support device
configuration via a plain text configuration file, IPv6 hardware checksumming,
IPv6 TSO and LRO, a loadfw command in the
cxgbetool(8) utility which allows installing a firmware to the card, and sysctl(8)
variables under dev.t4nex.N.misc for various information.[r231093, r237925]

The dc(4) driver now
supports NVIDIA (ULi) M5261/M5263 PCI FastEthernet controllers, which are
found on the ULi M1563 South Bridge and M1689 Bridge.[r229334]

The et(4) driver
now works on all platforms. A bug which could prevent altq(4) support
from working has been fixed. A new sysctl(8)
variable under dev.et.N.stats has been added for hardware MAC
statistics.[r229711, r229717, r229720]

The igb(4) driver
has been updated to version 2.3.4. It now supports newer i210/i211
devices.[r238262]

The miibus(4) bus
driver now supports device hints hint.miibus.N.phymask for PHY addresses being probed.
This is useful to manually probe PHYs which do not implement basic the register set
of IEEE 802.3. Also, the miibus(4) driver
has been changed to a hinted bus, allowing to add child devices via hints and
to set their attach arguments in addition to automatically-probed PHYs.[r230709]

An IPv6 default route configured via Router Advertisement messages is now
reinstalled correctly when the default route is manually removed and then another
RA message is received for the same route.[r230604]

A bug which could return an incorrect value for the IPV6_MULTICASE_HOPS socket option has been fixed.[r227885]

A new sysctl(3) name
NET_RT_IFLISTL has been added. This queries the
address list and works on extended and extensible structures if_msghdrl and ifa_msghdrl
without breaking the ABI.[r231768]

The FreeBSD sctp(4) protocol
stack now supports a new sysctl(8)
variable net.inet.sctp.blackhole. If this is set
to 1, no ABORT is sent back in
response to an incoming INIT. If this is set to 2, no ABORT is sent back in response
to an out-of-the-blue packet. If set to 0 (the
default), ABORTs are sent.[r231045]

A bug which could cause a system panic when SCTP_RECVINFO or SCTP_NXTINFO is
specified to the getsockopt(2)
system call has been fixed.[r231049]

The ahci(4) driver
now supports a new loader(8)
tunable hw.ahci.force. This controls whether it
attempts to attach an AHCI-capable device even if it is configured to use legacy
emulation. This is enabled by default.[r229291]

The new cam(4)-based ata(4)
driver now supports old loader(8)
tunables hw.ata.ata_dma and hw.ata.atapi_dma, for backward compatibility.[r231251]

The cam(4) driver
now supports SEMB (SATA Enclosure Management Bridge) devices, which are
equivalent to the SCSI SES/SAF-TE devices.[r236778]

A new sysctl(8)
variable kern.cam.pmp.hide_special has been added.
This controls whether special PMP ports such as PMP (Port MultiPlier)
configuration or SEMB (SATA Enclosure Management Bridge) will be exposed or hidden.
The default value is 1 (hidden).[r236765]

The cd(4) driver now
supports Audio CDs in the same way as acd(4) did. It
will report a 2352-byte sector size to the geom(4)
subsystem and use the READ CD command for reading the
data. This fixes an interoperability issue with multimedia/vlc.[r230014]

The da(4) driver now
supports BIO_DELETE. To select the method, a new sysctl(8)
variable kern.cam.da.N.delete_method has been added for each
device instance. The following values are supported:[r236677]

Value

Method

NONE

no provisioning support reported by the device

DISABLE

provisioning support was disabled because of errors

ZERO

WRITE SAME (10) command to write zeroes

WS10

WRITE SAME (10) command with UNMAP bit set

WS16

use WRITE SAME (16) command with UNMAP bit set

UNMAP

use UNMAP command (equivalent of the ATA DSM TRIM command)

When it was NONE, the device did not report logical
block provisioning support via respective VPD pages. One can set a specific method
for testing and it will be disabled automatically when not supported on the
device.

The MIRRORgeom(4) class
now supports BIO_DELETE. This means the TRIM command will be issued on supported devices when deleting
data.[r238500]

The MULTIPATHgeom(4) class
has been updated. It now supports Active/Active mode, Active/Read mode as
hybrid of Active/Active and Active/Passive, keeping a failed path without removing
the geom provider, manual configuration without on-disk metadata, and add, remove, fail, restore, configure subcommands in the gmultipath(8)
utility to manage the configured paths.[r229303, r234916]

The PART_LDMgeom(4) class
has been added. This partition scheme has support for Logical Disk Manager,
which is also known as dynamic volumes in Microsoft Windows NT. Note that JBOD,
RAID0, and RAID5 volumes are not supported yet.[r234406]

The PART_MBRgeom(4) class
now allows a primary or extended Linux swap partition to be used as the system dump
device.[r230763]

[amd64, i386] The RAIDgeom(4) class is
now included in the GENERIC kernel.[r235877]

The RAIDgeom(4) class
now supports disks with over 2TB capacity for the Intel metadata format.[r230244]

The RAIDgeom(4) class
now supports the DDF metadata format, which is defined in the SNIA Common RAID Disk
Data Format Specification v2.0.[r235874]

It now supports a timeout on positive name cache entries on the client side. A
new mount option nametimeo has been added and
set to 60 (in seconds) by default.[r233326]

A memory leak when a ZFS volume is exported via the FreeBSD NFS server has been
fixed.[r234740]

A bug has been fixed. When a process writes to an mmap-backed file on an NFS
filesystem, flushing changes to the data could fail under some circumstances
such as errors due to permission mismatch, and this failure could not be detected
as an error. A new sysctl(8)
variable vfs.nfs.nfs_keep_dirty_on_error has
been added to control the behavior on the client side related to this issue. When
this is set to 1, the pages where a write operation
failed are kept dirty. The default value is set to 0.[r233730]

The nfsv4(4)
filesystem now supports a sysctl(8)
variable vfs.nfsd.disable_checkutf8. This
disables the check for UTF-8 compliance in filenames. This is disabled by default.
Note that enabling this may help wht some interoperability issues but results
in an NFSv4 server that is not RFC 3530 compliant.[r229799]

The tmpfs(5)
filesystem is not an experimental implementation anymore.[r234511]

The tmpfs(5)
filesystem now supports a sysctl(8)
variable vfs.tmpfs.memory_reserved to set the amount
of required free pages when tmpfs(5)
attempts to allocate a new node.[r234849]

FreeBSD's ZFS filesystem has been updated by merging improvements from the
illumos project. The following changes are made:[r229578, r232328]

The zfs(8)destroy command now reports an estimate of the space which
would be reclaimed, when -n is specified.

The zfs(8)get command now supports the -t type flag to specify the data type.

A simple script zfsboottest.sh has been added to the
source tree. This checks if the system is configured correctly when using ZFS
as the root filesystem. The script is located at /usr/src/tools/tools/zfsboottest.sh and it uses the zfsboottest binary program in the same directory.[r227705]

The binary program can be built and installed by the following command:

# cd /usr/src/tools/tools/zfsboottest
# make
# make install

After that, the following command can be used to check the system. poolname is the ZFS storage pool name to boot:

# sh /usr/src/tools/tools/zfsboottest/zfsboottest.sh poolname

The sysctl(8)
variable vfs.zfs.txg.timeout has been changed from
read-only to writable.

The camcontrol(8)
utility now supports a fwdownload subcommand for firmware
update on SCSI devices from Hitachi, HP, IBM, Plextor, Quantum, and Seagate.
This subcommand will reprogram the firmware on devices connected over an ATA/SATA
transport.[r237740]

The dhclient(8)
utility now supports domain-search (option number 119,
described in RFC 3397). This allows a DHCP server to publish a list of implicit
domain suffixes used during name lookup. If this option is specified, a search keyword will be added to /etc/resolv.conf.[r230597]

The dump(8) utility
now uses 53 characters for the device names in /etc/dumpdates. This was previously limited to 32
characters.[r230047]

The fetch(1) utility
now correctly supports a percent-encoded user and password part in a URL.[r235253]

The fdlopen(3)
function has been implemented. This is an interface for rtld(1) to load
a shared object by file descriptor.[r230410]

The fopen(3)
function now supports the x (an exclusive
create-and-open mode) option in the ISO/IEC 9899:2011 and C11 standards.[r229845]

A bug in the gcc(1) compiler
has been fixed. It could lead to incorrect calculations when -ffast-math is specified.[r234023]

The kdump(1) utility
now supports a -p pid option to accept either a process ID or a
thread ID.[r237789]

The kenv(1) utility
now supports a -v flag to display an entry in name=value format, and a -N flag to
display only the name.[r236118]

The kldload(8)
utility now supports a -n flag to ignore the error
status when the specified module is already loaded.[r233560]

libedit has been updated to a NetBSD snapshot as of 28
December, 2009.[r237738]

libmap.conf(5)
now supports include and includedir directives. They allow to include specified files
for the configuration.[r236523]

Lock handling performance in the libthr pthread
library has been improved. It now works 10 times faster especially under the
condition that a mutex is heavily contested.[r234372]

A new C++ stack has been imported. This consists of libcxxrt, originally developed by a FreeBSD developer under
contract by PathScale and open sourced by the FreeBSD and NetBSD foundations, and
libc++ from the LLVM project. libcxxrt is a drop-in replacement for GNU libsupc++, which implements the C++ runtime support for
features such as run-time type information, dynamic casting, thread-safe static
initializer, and exceptions. libc++ implements the
C++11 standard library, and will replace GNU libstdc++ in
a future release. In 9.1-RELEASE, libstdc++ is still
installed as standard and now dynamically links against libsupc++. This allows libraries linking libstdc++ and libc++ to both be
used in the same program, to aid migration.[r235798]

The limits(1)
utility now supports a -P pid option to control limits for the
specified process.[r230919]

The pciconf(8)
utility now supports a -e flag to display PCI error
details in listing mode. When this is specified, the status of any error bits
in the PCI status register and PCI-express device status register will be displayed.
It also lists any errors indicated by version 1 of PCI-express Advanced Error
Reporting (AER).[r237731]

The procstat(1)
utility now supports an -e flag to display process
environment variables, an -x flag to display ELF
auxiliary vectors, and an -l flag to display resource
limits.[r230917, r230918]

A bug in the remquo(3)
functions where the quotient did not always have the correct sign when the
remainder was 0, and another bug that the remainder and
quotient were both off by a bit in certain cases involving subnormal remainders,
have been fixed. Note that these bugs affected all platforms except amd64 and
i386.[r234535]

The rtld(1) run-time
linker now supports GCC's RELRO (RElocation Read-Only). This prevents the GOT
(Global Offset Table) from being overwritten.[r231579]

The rtld(1) run-time
linker now supports a GNU hash section (DT_GNU_HASH),
which is a replacement of optional ELF hash section.[r235396]

The setbuf(1)
utility and libstdbuf library have been added. This
controls the default buffering behavior of standard stdio streams.[r235139]

The top(1) utility
now correctly supports per-thread I/O statistics of ZFS in the -m io option.[r227702]

The xlocale(3) API
has been implemented. This consists of _l-suffixed
versions of various standard library functions that use the global locale,
making them take an explicit locale parameter and allowing thread-safe extended
locale support. Most of these APIs are required for IEEE Std 1003.1-2008
(POSIX.1-2008 or ISO/IEC 9945:2009) compatibility, and are required by libc++ and recent versions of GNOME. This implementation also supports several extensions
for compatibility with Apple Darwin.[r235785]

[amd64, i386] Beginning with FreeBSD 6.2-RELEASE, binary 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 an unmodified
GENERIC kernel, distributed as a part of an official
FreeBSD release. The freebsd-update(8) utility requires that the host
being upgraded have Internet connectivity.

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

FreeBSD 9.0 and later have several incompatibilities in system configuration
which you might want to know before upgrading your system. Please read this section and the Upgrading Section in 9.0-RELEASE Release Notes carefully before
submitting a problem report and/or posting a question to the FreeBSD mailing
lists.