diff options
author | Ian Campbell <ian.campbell@citrix.com> | 2011-03-04 12:38:21 -0500 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2011-03-09 19:59:10 -0500 |
commit | dc4972a4e2f3fee1663bd0670dfc4cd798d5f9b2 (patch) | |
tree | ef9c352dbe4b7db8fc11af2bd5e583f447b6f026 | |
parent | f4ee4af447b67135de7eb8a6615811c13ce938e2 (diff) |
xen/p2m/m2p/gnttab: do not add failed grant maps to m2p override
The caller will not undo a mapping which failed and therefore the
override will not be removed.
This is especially bad in the case of GNTMAP_contains_pte mapping type
mappings where m2p_add_override will destroy the kernel mapping of the
page.
This was observed via a failure of map_grant_pages in gntdev_mmap (due
to userspace using a bad grant reference), which left the page in
question unmapped (because it was a GNTMAP_contains_pte mapping) which
led to a crash later on.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: Daniel De Graaf <dgdegra@tycho.nsa.gov>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
-rw-r--r-- | drivers/xen/grant-table.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c index 9428ced04807..3745a318defc 100644 --- a/drivers/xen/grant-table.c +++ b/drivers/xen/grant-table.c | |||
@@ -462,6 +462,10 @@ int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops, | |||
462 | return ret; | 462 | return ret; |
463 | 463 | ||
464 | for (i = 0; i < count; i++) { | 464 | for (i = 0; i < count; i++) { |
465 | /* Do not add to override if the map failed. */ | ||
466 | if (map_ops[i].status) | ||
467 | continue; | ||
468 | |||
465 | /* m2p override only supported for GNTMAP_contains_pte mappings */ | 469 | /* m2p override only supported for GNTMAP_contains_pte mappings */ |
466 | if (!(map_ops[i].flags & GNTMAP_contains_pte)) | 470 | if (!(map_ops[i].flags & GNTMAP_contains_pte)) |
467 | continue; | 471 | continue; |