summaryrefslogtreecommitdiffstats
path: root/mm/pdflush.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2005-08-01 11:14:49 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2005-08-01 11:14:49 -0700
commit4ceb5db9757aaeadcf8fbbf97d76bd42aa4df0d6 (patch)
tree6a3108ceea457c21130838d49736f5e9de3badc3 /mm/pdflush.c
parent8d894c47975f7222c5537e450e71310b395488c7 (diff)
downloadop-kernel-dev-4ceb5db9757aaeadcf8fbbf97d76bd42aa4df0d6.zip
op-kernel-dev-4ceb5db9757aaeadcf8fbbf97d76bd42aa4df0d6.tar.gz
Fix get_user_pages() race for write access
There's no real guarantee that handle_mm_fault() will always be able to break a COW situation - if an update from another thread ends up modifying the page table some way, handle_mm_fault() may end up requiring us to re-try the operation. That's normally fine, but get_user_pages() ended up re-trying it as a read, and thus a write access could in theory end up losing the dirty bit or be done on a page that had not been properly COW'ed. This makes get_user_pages() always retry write accesses as write accesses by making "follow_page()" require that a writable follow has the dirty bit set. That simplifies the code and solves the race: if the COW break fails for some reason, we'll just loop around and try again. Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'mm/pdflush.c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud