FreeBSD Security Advisory FreeBSD-SA-04:13.linux
-----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-----