[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2] x86/p2m: fix xenmem_add_to_physmap_one double page removal


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Roger Pau Monne <roger.pau@xxxxxxxxxx>
  • Date: Wed, 15 Sep 2021 10:03:42 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=aGqy4nQE3HdDQKTl4mOJt2/JdDVwHm0kVMcZrpQQVcs=; b=QZyWV/qDICjutggGo8ipksRBO1WltzasKUOst1cM1S5cId9bTBdC3LJ7Ub0zNtl6VzGoJ4csMiZa0OZLFK5eoe/i9SK9cLWjsD/JMhjQ/fmmLR8VUhInF/g9P3AAgo/8+xURV7Ab8SKXjZ9yc+6oQ6gcqIMTfmLbOW5D0uhL8o/IPlBfwBNACN/uDAx0ewABKOTESclDUyExvfgyi40Alp8mlmstdQmK7NSEB6MgVfYw6iF03Gvx1xyzu9nIVW7teVxIVtD+v5VJVyXmDTVVHNb5DBHLpHxinZ5h/mkPqYre+tBo3JtucDVi3Xtj/o9RR+h9geYznIACzcNJJ25vZw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dgUPpPy/Puj5IkCcKEKeP+RpArtBF5TM3gjJaXUYqDHFXMC/3HWXBIPUY+7L3UAh4uc8GgbrzQh9MfOYWnv05fDxWaDRGg4zmZxpeQdHjUmQbfVnMqlAEmgyC2fQuTNoSYz3E6B54SDphrnc3Xj/6CJyAU5QFi6FtgDDiJ8P0jdJsxC6/J6/2VRJfwz/yDTmvTVp+INPjYKyP0jmMXsfBo/CnbIu4O8TLO0k8W/RakMEAuiIQyBh5fJwvdAgSFH6tMrMTIg8HQc5LGRvufilkkBhvYdV0pb2ej6+a/pPCjitY+33O5jH7RqXEkyE7ryYlbqVhDKOUp/Aw7ExO69E9Q==
  • Authentication-results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
  • Cc: Roger Pau Monne <roger.pau@xxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>
  • Delivery-date: Wed, 15 Sep 2021 08:05:03 +0000
  • Ironport-data: A9a23:nN1NIah/3uJyoh+VSTqfLh7rX161XhcKZh0ujC45NGQN5FlHY01je htvWGHXa6reZGLxcoh0Ptm+pE0AsMXVz4BjSAI9ry1gRC4b9cadCdqndUqhZCn6wu8v7a5EA 2fyTvGacajYm1eF/k/F3oAMKRCQ7InQLlbGILes1htZGEk0FU/NtTo5w7Rg2t8x3IDja++wk YiaT/P3aQfNNwFcagr424rbwP+4lK2v0N+wlgVWicFj5DcypVFMZH4sDfjZw0/DaptVBoaHq 9Prl9lVyI97EyAFUbtJmp6jGqEDryW70QKm0hK6UID66vROS7BbPg/W+5PwZG8O4whlkeydx /1RrbiyCj4FBpH2kdoQeRkBKAh7P45JreqvzXiX6aR/zmXDenrohf5vEFs3LcsT/eMf7WNmr KJCbmpXN1ba2rzwkOnTpupE36zPKOHxO4wSoDd4xCzxBvc6W5HTBa7N4Le02R9t3J8TRa6HO KL1bxI+SzX7SBR9a25HJ7cetbyZvXz8TTxx/Qf9Sa0fvDGIkV0ZPKLWGMXRUsyHQ4NShEnwj mDM8nn9AxoaHMeC0jfD+XWp7sffkCW+VI8MGbmQ8v9xnEbV1mEVEAcRV1awvb++kEHWZj5EA xVKoGx09/F0rRH1CImmN/GlnJKalgIEf9gTKsEC1DuE9Kf+41+iL20GbTEUPbTKq/QKqSwWO k6hxo2yXGE+7+LLEBpx5Z/P8mjjYnF9wXsqIHZeFFpbuYGLTJQb00qXJuuPBpJZmTEc9dvY+ DmMsCF2rLEal8djO06TrA2f3m7ESnQkSGcICuTrsoCNtVgRiG2NPdXABb3nARBodtjxor6p5 iRspiRmxLpSZaxhbQTUKAn3IF1M2xpjGGeN6bKIN8J6nwlBBlb5JdwAiN2ADB4xb67ohgMFk GeM4FgMtfe/zVOBbLNtYpLZNijZ5fG7TrzYugTvRoMWOPBZLVbflAk3PBL49z29wSAEzPBkU b/GIJnEMJrvIfk+pNZAb7xGiuFDK+FX7T67eK0XODz8jePFNSLKEOxcWLZMB8hghJ65TMzu2 483H+OByglFUf24ZS/S8IUJKksNI2R9Dpfzw/G7vMbaSua/MG1+WfLX3507fIlpw/ZcmuvSp ynvUU5E0lvvw3bALFzSOHxkbbruW7d5rG46YnNwbQr5hSB7bNb99robers2YaIjqL5pw8lrQ qRXYM6HGPlOFGjKomxPcZnnoYV+Xx23ngbSbTG9aT0ycsc4FQzE89PpZCX18ywKAnblvMcyu eT4hAjaXYACV0JpC8OPMKCjyFa4vH48nuNuXhSXfokPKRu0qIUzcn7/lP46Jc0IOC7v/DrC2 lbEGwocqMnMv5QxrIvDi5ebotr7COB5BEdbQTXWtO7kKSnA82O/6oZcS+LULyvFXWb59aj+N +VYy/bwbK8OkFpQ6tcuFr9qyeQ15sf1pq8cxQNhRS2ZY1OuA7JmA3+HwcgQ6fEdmu4H4VO7C hCV591XGbSVI8e0QlceKT0sYvmHyfxJyCLZ6u44IRmi6SJ6lFZdvZ6+4/VYZPRhEYZI
  • Ironport-hdrordr: A9a23:qnp/LK9lUvKu2s++UZ5uk+E9db1zdoMgy1knxilNoENuHfBwxv rDoB1E73LJYVYqOU3Jmbi7Sc29qBTnhORICOgqTMyftWzd1ldAQ7sSi7cKrweQeREWldQtqp uIEZIOceEYZGIS5a2RgHjaYqgdKbG8gdyVbIzlvhBQpG9RGsRdB1ATMHfnLqQ6fngMObMJUL 6nouZXrTupfnoaKuy9G3k+RuDG4/nGjojvbxIqDwMurFDmt0Lk1JfKVzyjmjsOWTJGxrkvtU DDjgzC/62m99W20AXV2WP/54lf3PHh1txALsqRjdV9EESnti+YIKBaH5GStjE8p++irH4sjd n3uh8le/9+7nvAF1vF1yfF6k3F6nID+nXiwViXjT/IusriXg83DMJHmMZwbgbZw1BIhqAz7I t7m0ai87ZHBxLJmyrwo/LSUQtxq0ayqX0+1cYOkn1kV5cEYrM5l/1RwKpsKuZBIMvG0vFlLA E3Z/uspsq+MGnqI0wxh1MfgeBFBR8Ib1K7qktrgL3j79EZpgE886O0rPZv7Evoz6hNO6Ws0d 60RpiApIs+P/P+UpgNd9vpOfHHclAlYSi8eV56cm6XXJ3uBRr22uvKCfMOlaaXRKA=
  • Ironport-sdr: dYo5ACvcKxygtG2bTpTTtE31Gdykrtcf3FYMQbzc+vKIvFPrdaMJMU5CqGAE9+NkovO4FPdzio dmzaoH0ISIlwXpRG6kNbqF1tMNrngCGW/6yppHSU/AF9FWgtETrnGeR3QaCXAsLvBOc69R0v+f IMXZINmGWZRu51fxd+FBa3vDow1aq03aT4wC+c/PowKMR2dRBFENU71NPdzNFtcmpPIz5EiuZ/ 8NDwMLIkOOGjPZ1xqiTtbw6Pnt+EF/5cuiUd+3Tlu6SuVNh/DEEWe7hLYSbEdLYROTZONsJI6c z7qhJ3fLUCWRJqJ8mZBcQGxm
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

If the new gfn matches the previous one (ie: gpfn == old_gpfn)
xenmem_add_to_physmap_one will issue a duplicated call to
guest_physmap_remove_page with the same guest frame number, because
the get_gpfn_from_mfn call has been moved by commit f8582da041 to be
performed before the original page is removed. This leads to the
second guest_physmap_remove_page failing, which was not the case
before commit f8582da041.

Add a shortcut to skip modifying the p2m if the mapping is already as
requested.

Fixes: f8582da041 ('x86/mm: pull a sanity check earlier in 
xenmem_add_to_physmap_one()')
Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
Changes since v1:
 - Short circuit and skip modifying the p2m.
---
 xen/arch/x86/mm/p2m.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
index 674a6f4fe9..bcdc5c7014 100644
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -2799,6 +2799,13 @@ int xenmem_add_to_physmap_one(
         goto put_all;
     }
 
+    if ( gfn_eq(_gfn(old_gpfn), gpfn) )
+    {
+        /* Nothing to do, mapping is already as requested. */
+        ASSERT(mfn_eq(prev_mfn, mfn));
+        goto put_all;
+    }
+
     /* Remove previously mapped page if it was present. */
     if ( p2mt == p2m_mmio_direct )
         rc = -EPERM;
-- 
2.33.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.