-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

=============================================================================
FreeBSD-SA-04:13.linux                                      Security Advisory
                                                          The FreeBSD Project

Topic:          Linux binary compatibility mode input validation error

Category:       core
Module:         kernel
Announced:      2004-06-30
Credits:        Tim Robbins
Affects:        All 4.x and 5.x releases
Corrected:      2004-06-30 17:31:44 UTC (RELENG_4)
                2004-06-30 17:34:38 UTC (RELENG_5_2, 5.2.1-RELEASE-p9)
                2004-06-30 17:33:59 UTC (RELENG_4_10, 4.10-RELEASE-p2)
                2004-06-30 17:33:24 UTC (RELENG_4_9, 4.9-RELEASE-p11)
                2004-06-30 17:32:24 UTC (RELENG_4_8, 4.8-RELEASE-p24)
CVE Name:       CAN-2004-0602
FreeBSD only:   YES

For general information regarding FreeBSD Security Advisories,
including descriptions of the fields above, security branches, and the
following sections, please visit
<URL:http://www.freebsd.org/security/>.

I.   Background

FreeBSD is binary-compatible with the Linux operating system through a
loadable kernel module/optional kernel component.

II.  Problem Description

A programming error in the handling of some Linux system calls may
result in memory locations being accessed without proper validation.

III. Impact

It may be possible for a local attacker to read and/or overwrite
portions of kernel memory, resulting in disclosure of sensitive
information or potential privilege escalation.  A local attacker can
cause a system panic.

IV.  Workaround

The only known workaround is to disable the linux binary compatibility 
layer and prevent it from being (re)loaded.  Note that step (a) must be
performed before step (b).

a) To prevent the linux compatibility layer being (re)loaded, remove the
/boot/kernel/linux.ko file (on FreeBSD 5.x) or the /modules/linux.ko
file (on FreeBSD 4.x), and add or change the following line in
/etc/rc.conf:

linux_enable="NO"       # Linux binary compatibility loaded at startup (or NO).

Add or change the following lines in /boot/loader.conf:

linux_load="NO"                 # Linux emulation
linprocfs_load="NO"

In addition, remove any linprocfs file system listed in /etc/fstab.

b) To disable the linux binary compatibility layer, first determine if
it is loaded:

# kldstat -v | grep linuxelf

If no output is produced, the linux compatibility layer is not loaded;
stop here.

If the linux compatibility layer is loaded, determine if it is compiled
into the kernel or loaded as a module:

# kldstat | grep linux.ko

If no output is produced, the linux compatibility layer is compiled
into the kernel.  Remove the line

options         COMPAT_LINUX

from your kernel configuration file and recompile the kernel as
described in 
<URL:http://www.freebsd.org/handbook/kernelconfig.html> and reboot the
system.

If output is produced, then the linux compatibility layer is loaded as
a kernel module.  If the module is not currently being used (by a
process running under linux emulation, for example) then it may be
possible to unload it:

# kldunload linux
# kldstat | grep linux.ko

If this does not successfully unload the module, reboot the system.

V.   Solution

Perform one of the following:

1) Upgrade your vulnerable system to 4-STABLE; or to the RELENG_5_2,
RELENG_4_10, RELENG_4_9, or RELENG_4_8 security branch dated after the
correction date.

2) To patch your present system:

The following patches have been verified to apply to FreeBSD 4.8, 4.9,
4.10 and 5.2 systems.

a) Download the relevant patch from the location below, and verify the
detached PGP signature using your PGP utility.

[FreeBSD 5.2]
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-04:13/linux5.patch
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-04:13/linux5.patch.asc

[FreeBSD 4.8, 4.9, 4.10]
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-04:13/linux4.patch
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-04:13/linux4.patch.asc

b) Apply the patch.

# cd /usr/src
# patch < /path/to/patch

c) Recompile your kernel as described in
<URL:http://www.freebsd.org/handbook/kernelconfig.html> and reboot the
system.

VI.  Correction details

The following list contains the revision numbers of each file that was
corrected in FreeBSD.

Branch                                                           Revision
  Path
- -------------------------------------------------------------------------
RELENG_4
  src/sys/compat/linux/linux_ioctl.c                            1.55.2.13
RELENG_5_2
  src/UPDATING                                                 1.282.2.17
  src/sys/compat/linux/linux_ioctl.c                            1.112.2.1
  src/sys/conf/newvers.sh                                       1.56.2.16
RELENG_4_10
  src/UPDATING                                              1.73.2.90.2.3
  src/sys/compat/linux/linux_ioctl.c                        1.55.2.12.4.1
  src/sys/conf/newvers.sh                                   1.44.2.34.2.4
RELENG_4_9
  src/UPDATING                                             1.73.2.89.2.12
  src/sys/compat/linux/linux_ioctl.c                        1.55.2.12.2.1
  src/sys/conf/newvers.sh                                  1.44.2.32.2.12
RELENG_4_8
  src/UPDATING                                             1.73.2.80.2.27
  src/sys/compat/linux/linux_ioctl.c                        1.55.2.10.6.1
  src/sys/conf/newvers.sh                                  1.44.2.29.2.25
- -------------------------------------------------------------------------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (FreeBSD)

iD8DBQFA48FqFdaIBMps37IRArpeAKCP1G1bFmYiD0v3Qdg8pq5zkV7JywCcDUHn
dz5yJTOovQSmIaLVD/Ei8Xw=
=SVrJ
-----END PGP SIGNATURE-----
