Red Hat Bugzilla – Bug 156145
kernel may oops if more than 4k worth of string data returned in /proc/devices
Last modified: 2007-11-30 17:07:17 EST
+++ This bug was initially created as a clone of Bug #156029 +++
Description of problem:
the read routine for /proc/devices is missing a length check routine.
Consequently, if the number of block and char devices in a system totals more
than 4096 bytes of string data between their names and major/minor numbers, the
read routine will sprintf the data off the end of the page and oops the kernel.
other proc files that are part of proc_misc.c protect against this with a length
check that truncates the file if it goes over a page, but this check is missing
from get_device_list and get_blkdev_list.
Version-Release number of selected component (if applicable):
Steps to Reproduce:
1. register sufficient char/block devices in a system to create > 4096 bytes of
string data for /proc/devices
2. cat /proc/devices
system will oops on a page fault
system should truncate file to 4096 bytes.
Created attachment 113865 [details]
RHEL4 patch to fix /proc/devices buffer overrun
This is the patch posted to RHKL
This shouldn't block on the 2.1 version of this bug.
Created attachment 128155 [details]
backport of latest upstream version of /proc/devices patch
committed in stream U4 build 34.24. A test kernel with this patch is available
patch reverted due to kabi issues.
Created attachment 128516 [details]
patch to prevent /proc/devices buffer overflow
same patch as before, but added __GENKSYMS__ macro around seq_file.h include to
prevent abi breakage. posted to rhkl
committed in stream U4 build 35.1. A test kernel with this patch is available
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on the solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.