Files
twx-linux/drivers/char
Hugh Dickins faa309e7b9 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>
Signed-off-by: Adrian Bunk <bunk@stusta.de>
2007-01-23 16:46:22 +01:00
..
2006-02-03 08:32:10 -08:00
2006-11-17 17:44:46 +01:00
2006-05-20 15:00:32 -07:00
2007-01-09 03:23:31 +01:00
2006-01-10 08:01:59 -08:00
2006-02-14 10:01:39 -08:00
2006-12-18 00:39:11 +01:00
2006-01-10 08:01:59 -08:00
2006-02-03 08:32:10 -08:00
2006-12-04 14:06:36 +01:00
2006-01-10 08:01:59 -08:00
2006-04-07 09:44:28 -07:00
2007-01-23 16:46:22 +01:00
2006-01-10 08:01:59 -08:00
2006-01-10 08:01:59 -08:00
2006-01-10 08:01:59 -08:00
2006-01-10 08:01:59 -08:00
2006-01-14 10:41:42 -08:00
2006-02-03 08:31:59 -08:00
2007-01-09 03:23:35 +01:00
2006-01-12 09:09:00 -08:00
2006-01-10 08:01:59 -08:00
2006-02-27 08:18:04 -08:00
2006-01-14 10:41:42 -08:00
2006-01-10 13:39:07 +00:00
2006-05-01 12:03:42 -07:00
2006-08-27 03:36:58 +02:00
2006-01-10 08:01:59 -08:00