linux/drivers/char
Hugh Dickins 5fcf7bb73f [PATCH] read_zero_pagealigned() locking fix
Ramiro Voicu hits the BUG_ON(!pte_none(*pte)) in zeromap_pte_range: kernel
bugzilla 7645.  Right: read_zero_pagealigned uses down_read of mmap_sem,
but another thread's racing read of /dev/zero, or a normal fault, can
easily set that pte again, in between zap_page_range and zeromap_page_range
getting there.  It's been wrong ever since 2.4.3.

The simple fix is to use down_write instead, but that would serialize reads
of /dev/zero more than at present: perhaps some app would be badly
affected.  So instead let zeromap_page_range return the error instead of
BUG_ON, and read_zero_pagealigned break to the slower clear_user loop in
that case - there's no need to optimize for it.

Use -EEXIST for when a pte is found: BUG_ON in mmap_zero (the other user of
zeromap_page_range), though it really isn't interesting there.  And since
mmap_zero wants -EAGAIN for out-of-memory, the zeromaps better return that
than -ENOMEM.

Signed-off-by: Hugh Dickins <hugh@veritas.com>
Cc: Ramiro Voicu: <Ramiro.Voicu@cern.ch>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-12-10 09:55:39 -08:00
..
agp [PATCH] agp-amd64: section mismatches with HOTPLUG=n 2006-12-07 08:39:40 -08:00
drm Merge branch 'drm-patches' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6 2006-12-09 12:26:37 -08:00
hw_random [PATCH] allow hwrandom core to be a module 2006-12-07 08:39:39 -08:00
ip2 [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
ipmi [PATCH] struct path: convert ipmi 2006-12-08 08:28:46 -08:00
mwave IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
pcmcia [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
rio [PATCH] ioremap balanced with iounmap for drivers/char/rio/rio_linux.c 2006-12-07 08:39:30 -08:00
tpm [PATCH] Correct misc_register return code handling in several drivers 2006-12-07 08:39:35 -08:00
watchdog Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2006-12-07 15:40:39 -08:00
.gitignore [MIPS] Remove IT8172-based platforms, ITE 8172G and Globespan IVR support. 2006-10-03 17:59:17 +01:00
amiserial.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
applicom.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
applicom.h
briq_panel.c Remove all inclusions of <linux/config.h> 2006-10-04 03:38:54 -04:00
cd1865.h
ChangeLog
consolemap.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
cp437.uni
cs5535_gpio.c [PATCH] struct path: convert char-drivers 2006-12-08 08:28:44 -08:00
cyclades.c [PATCH] Char: cyclades, fix warnings 2006-12-08 08:29:01 -08:00
decserial.c [PATCH] dz: Fixes to make it work 2006-12-07 08:39:41 -08:00
defkeymap.c_shipped
defkeymap.map
digi1.h [PATCH] Clean up the old digi support and rescue it 2005-09-07 16:57:20 -07:00
digi.h
digiFep1.h [PATCH] Clean up the old digi support and rescue it 2005-09-07 16:57:20 -07:00
digiPCI.h
ds1286.c [PATCH] proper flags type of spin_lock_irqsave() 2006-10-01 00:39:21 -07:00
ds1302.c [PATCH] make more file_operation structs static 2006-07-03 15:26:59 -07:00
ds1620.c [PATCH] make more file_operation structs static 2006-07-03 15:26:59 -07:00
dsp56k.c [PATCH] struct path: convert char-drivers 2006-12-08 08:28:44 -08:00
dtlk.c [PATCH] struct path: convert char-drivers 2006-12-08 08:28:44 -08:00
ec3104_keyb.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
efirtc.c [PATCH] make more file_operation structs static 2006-07-03 15:26:59 -07:00
epca.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
epca.h [PATCH] char: kill unneeded memsets 2006-10-04 07:55:13 -07:00
epcaconfig.h
esp.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
generic_nvram.c [PATCH] powerpc: Kill _machine and hard-coded platform numbers 2006-03-28 23:15:54 +11:00
generic_serial.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
genrtc.c WorkStruct: make allyesconfig 2006-11-22 14:57:56 +00:00
hangcheck-timer.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
hpet.c [PATCH] severing poll.h -> mm.h 2006-12-04 02:00:36 -05:00
hvc_console.c [PATCH] Add include/linux/freezer.h and move definitions from sched.h 2006-12-07 08:39:27 -08:00
hvc_console.h [POWERPC] Make the hvc_console output buffer size settable 2006-07-13 18:53:32 +10:00
hvc_iseries.c Merge branch 'master' of git://oak/home/sfr/kernels/iseries/work 2006-10-04 15:02:27 +10:00
hvc_rtas.c [POWERPC] Make the hvc_console output buffer size settable 2006-07-13 18:53:32 +10:00
hvc_vio.c [POWERPC] The two vio HVC backends clash 2006-09-25 13:30:51 +10:00
hvcs.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
hvsi.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
i8k.c [PATCH] make more file_operation structs static 2006-07-03 15:26:59 -07:00
ip27-rtc.c [PATCH] make more file_operation structs static 2006-07-03 15:26:59 -07:00
isicom.c [PATCH] Char: isicom, fix tty index check 2006-12-08 08:28:58 -08:00
istallion.c [PATCH] Char: istallion, use mod_timer 2006-12-08 08:29:00 -08:00
Kconfig [PATCH] mxser: make an experimental clone 2006-12-08 08:28:53 -08:00
keyboard.c Input: drivers/char/keyboard.c - small cleanup in k_cur() 2006-11-04 22:09:08 -05:00
lcd.c [PATCH] make more file_operation structs static 2006-07-03 15:26:59 -07:00
lcd.h Resurrect Cobalt support for 2.6. 2005-10-29 19:30:42 +01:00
lp.c [PATCH] struct path: convert char-drivers 2006-12-08 08:28:44 -08:00
Makefile [PATCH] mxser: make an experimental clone 2006-12-08 08:28:53 -08:00
mbcs.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
mbcs.h
mem.c [PATCH] read_zero_pagealigned() locking fix 2006-12-10 09:55:39 -08:00
misc.c [PATCH] Correct misc_register return code handling in several drivers 2006-12-07 08:39:35 -08:00
mmtimer.c [PATCH] Correct misc_register return code handling in several drivers 2006-12-07 08:39:35 -08:00
moxa.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
mspec.c [PATCH] mspec driver build fix 2006-11-13 07:40:42 -08:00
mxser_new.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
mxser_new.h [PATCH] Char: mxser_new, rework to allow dynamic structs 2006-12-08 08:28:53 -08:00
mxser.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
mxser.h [PATCH] Typo fixes 2006-03-28 09:16:08 -08:00
n_hdlc.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
n_r3964.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
n_tty.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
nsc_gpio.c [PATCH] struct path: convert char-drivers 2006-12-08 08:28:44 -08:00
nvram.c [PATCH] make more file_operation structs static 2006-07-03 15:26:59 -07:00
nwbutton.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
nwbutton.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
nwflash.c [PATCH] make more file_operation structs static 2006-07-03 15:26:59 -07:00
pc8736x_gpio.c [PATCH] drivers/char/pc8736x_gpio.c: remove unused static functions 2006-09-29 09:18:05 -07:00
ppdev.c [PATCH] struct path: convert char-drivers 2006-12-08 08:28:44 -08:00
pty.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
random.c [PATCH] struct path: convert char-drivers 2006-12-08 08:28:44 -08:00
raw.c [PATCH] struct path: convert char-drivers 2006-12-08 08:28:44 -08:00
riscom8_reg.h
riscom8.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
riscom8.h
rocket_int.h
rocket.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
rocket.h
rtc.c [RTC] Consistently use of tabs for formatting. 2006-10-09 23:20:47 +01:00
scan_keyb.c
scan_keyb.h
scc.h [PATCH] m68k: static vs. extern in scc.h 2006-01-12 09:09:00 -08:00
scx200_gpio.c [PATCH] scx200_gpio export cleanups 2006-09-29 09:18:06 -07:00
selection.c [PATCH] tty locking on resize 2006-09-29 09:18:12 -07:00
ser_a2232.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
ser_a2232.h
ser_a2232fw.ax
ser_a2232fw.h
serial167.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
snsc_event.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
snsc.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
snsc.h [IA64-SGI] Handle SC env. powerdown events 2006-01-26 13:32:26 -08:00
sonypi.c [PATCH] struct path: convert char-drivers 2006-12-08 08:28:44 -08:00
specialix_io8.h
specialix.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
stallion.c [PATCH] Char: stallion, use dynamic dev 2006-12-08 08:28:59 -08:00
sx.c [PATCH] Char: sx, request regions 2006-12-08 08:28:59 -08:00
sx.h [PATCH] Char: sx, request regions 2006-12-08 08:28:59 -08:00
sxboards.h
sxwindow.h
synclink_gt.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
synclink.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
synclinkmp.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
sysrq.c [PATCH] SysRq-X: show blocked tasks 2006-12-07 08:39:32 -08:00
tb0219.c [PATCH] struct path: convert char-drivers 2006-12-08 08:28:44 -08:00
tipar.c [PATCH] struct path: convert char-drivers 2006-12-08 08:28:44 -08:00
tlclk.c [PATCH] tlclk: fix platform_device_register_simple() error check 2006-11-25 13:28:34 -08:00
toshiba.c [PATCH] export toshiba SMM support for neofb module 2006-12-07 08:39:40 -08:00
tty_io.c [PATCH] tty: switch to ktermios and new framework 2006-12-08 08:28:56 -08:00
tty_ioctl.c [PATCH] tty_ioctl: use termios for the old structure and termios2 for the new 2006-12-08 08:28:57 -08:00
vc_screen.c [PATCH] struct path: convert char-drivers 2006-12-08 08:28:44 -08:00
viocons.c [POWERPC] Fix viocons for irq breakage 2006-10-07 10:10:27 +10:00
viotape.c [PATCH] struct path: convert char-drivers 2006-12-08 08:28:44 -08:00
vme_scc.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
vr41xx_giu.c [PATCH] struct path: convert char-drivers 2006-12-08 08:28:44 -08:00
vt_ioctl.c [PATCH] vt: Make vt_pid a struct pid (making it pid wrap around safe). 2006-10-02 07:57:14 -07:00
vt.c [PATCH] add return value checking of get_user() in set_vesa_blanking() 2006-12-07 08:39:40 -08:00