pkgsrc-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[pkgsrc/trunk]: pkgsrc/sysutils Upgrade Xen 4.11 packages to 4.11.2. CHANGES ...
details: https://anonhg.NetBSD.org/pkgsrc/rev/1be6be24457f
branches: trunk
changeset: 400546:1be6be24457f
user: bouyer <bouyer%pkgsrc.org@localhost>
date: Fri Aug 30 13:16:27 2019 +0000
description:
Upgrade Xen 4.11 packages to 4.11.2. CHANGES since 4.11.1:
- include security patches up to and including XSA297
- various performances improvements, code cleanup and bug fixes
diffstat:
sysutils/xenkernel411/Makefile | 6 +-
sysutils/xenkernel411/distinfo | 21 +-
sysutils/xenkernel411/patches/patch-XSA284 | 33 --
sysutils/xenkernel411/patches/patch-XSA285 | 45 ---
sysutils/xenkernel411/patches/patch-XSA287 | 330 ---------------------------
sysutils/xenkernel411/patches/patch-XSA288 | 310 -------------------------
sysutils/xenkernel411/patches/patch-XSA290-1 | 239 -------------------
sysutils/xenkernel411/patches/patch-XSA290-2 | 73 -----
sysutils/xenkernel411/patches/patch-XSA291 | 55 ----
sysutils/xenkernel411/patches/patch-XSA292 | 97 -------
sysutils/xenkernel411/patches/patch-XSA293-1 | 319 --------------------------
sysutils/xenkernel411/patches/patch-XSA293-2 | 262 ---------------------
sysutils/xenkernel411/patches/patch-XSA294 | 73 -----
sysutils/xentools411/Makefile | 7 +-
sysutils/xentools411/distinfo | 10 +-
15 files changed, 16 insertions(+), 1864 deletions(-)
diffs (truncated from 1967 to 300 lines):
diff -r 8c26f5898b46 -r 1be6be24457f sysutils/xenkernel411/Makefile
--- a/sysutils/xenkernel411/Makefile Fri Aug 30 13:00:56 2019 +0000
+++ b/sysutils/xenkernel411/Makefile Fri Aug 30 13:16:27 2019 +0000
@@ -1,7 +1,7 @@
-# $NetBSD: Makefile,v 1.7 2019/07/15 16:24:18 nia Exp $
+# $NetBSD: Makefile,v 1.8 2019/08/30 13:16:27 bouyer Exp $
-VERSION= 4.11.1
-PKGREVISION= 3
+VERSION= 4.11.2
+#PKGREVISION= 0
DISTNAME= xen-${VERSION}
PKGNAME= xenkernel411-${VERSION}
CATEGORIES= sysutils
diff -r 8c26f5898b46 -r 1be6be24457f sysutils/xenkernel411/distinfo
--- a/sysutils/xenkernel411/distinfo Fri Aug 30 13:00:56 2019 +0000
+++ b/sysutils/xenkernel411/distinfo Fri Aug 30 13:16:27 2019 +0000
@@ -1,21 +1,10 @@
-$NetBSD: distinfo,v 1.4 2019/03/25 15:28:13 bouyer Exp $
+$NetBSD: distinfo,v 1.5 2019/08/30 13:16:27 bouyer Exp $
-SHA1 (xen411/xen-4.11.1.tar.gz) = aeb45f3b05aaa73dd2ef3a0c533a975495b58c17
-RMD160 (xen411/xen-4.11.1.tar.gz) = c0eaf57cfbd4f762e8367bcf88e99912d2089084
-SHA512 (xen411/xen-4.11.1.tar.gz) = c1655c5decdaed95a2b9a99652318cfc72f6cfdae957cfe60d635f7787e8850f33e8fafc4c4b8d61fb579c9b9d93028a6382903e71808a0418b931e76d72a649
-Size (xen411/xen-4.11.1.tar.gz) = 25152217 bytes
+SHA1 (xen411/xen-4.11.2.tar.gz) = 82766db0eca7ce65962732af8a31bb5cce1eb7ce
+RMD160 (xen411/xen-4.11.2.tar.gz) = 6dcb1ac3e72381474912607b30b59fa55d87d38b
+SHA512 (xen411/xen-4.11.2.tar.gz) = 48d3d926d35eb56c79c06d0abc6e6be2564fadb43367cc7f46881c669a75016707672179c2cca1c4cfb14af2cefd46e2e7f99470cddf7df2886d8435a2de814e
+Size (xen411/xen-4.11.2.tar.gz) = 25164925 bytes
SHA1 (patch-Config.mk) = 9372a09efd05c9fbdbc06f8121e411fcb7c7ba65
-SHA1 (patch-XSA284) = dfab3d5f51cef2ac2e201988e2c8ffbe6066ad89
-SHA1 (patch-XSA285) = 99b2864579d7a09b2d3c911f2d4f4bae23f9e42e
-SHA1 (patch-XSA287) = 834156c50c47d683e64793a5e6874a21b2999b94
-SHA1 (patch-XSA288) = 8551dc11ecb1a3912b5708b0db65533038f60390
-SHA1 (patch-XSA290-1) = 21bcc513e9ff1aa10fa62fcf1aca1e5f3558622c
-SHA1 (patch-XSA290-2) = be394879eeb98917690d284c10e04ee432e83df3
-SHA1 (patch-XSA291) = 00b2949e1d2567e5d9bf823bdd69c31be2300800
-SHA1 (patch-XSA292) = a887098d4b38567d0c8ab3170c15a08b47cbe835
-SHA1 (patch-XSA293-1) = 7e46dab8b44cc1b129e5717502e26094f96e67b9
-SHA1 (patch-XSA293-2) = 02eeb9533fa22ee99699319cc0194045fa26fef5
-SHA1 (patch-XSA294) = 8f7dd8ba100c3b93cb6f48c72b403a3cf43c09e7
SHA1 (patch-xen_Makefile) = 465388d80de414ca3bb84faefa0f52d817e423a6
SHA1 (patch-xen_Rules.mk) = c743dc63f51fc280d529a7d9e08650292c171dac
SHA1 (patch-xen_arch_x86_Rules.mk) = 0bedfc53a128a87b6a249ae04fbdf6a053bfb70b
diff -r 8c26f5898b46 -r 1be6be24457f sysutils/xenkernel411/patches/patch-XSA284
--- a/sysutils/xenkernel411/patches/patch-XSA284 Fri Aug 30 13:00:56 2019 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-$NetBSD: patch-XSA284,v 1.1 2019/03/07 11:13:26 bouyer Exp $
-
-From: Jan Beulich <jbeulich%suse.com@localhost>
-Subject: gnttab: set page refcount for copy-on-grant-transfer
-
-Commit 5cc77f9098 ("32-on-64: Fix domain address-size clamping,
-implement"), which introduced this functionality, took care of clearing
-the old page's PGC_allocated, but failed to set the bit (and install the
-associated reference) on the newly allocated one. Furthermore the "mfn"
-local variable was never updated, and hence the wrong MFN was passed to
-guest_physmap_add_page() (and back to the destination domain) in this
-case, leading to an IOMMU mapping into an unowned page.
-
-Ideally the code would use assign_pages(), but the call to
-gnttab_prepare_for_transfer() sits in the middle of the actions
-mirroring that function.
-
-This is XSA-284.
-
-Signed-off-by: Jan Beulich <jbeulich%suse.com@localhost>
-Acked-by: George Dunlap <george.dunlap%citrix.com@localhost>
-
---- xen/common/grant_table.c.orig
-+++ xen/common/grant_table.c
-@@ -2183,6 +2183,8 @@ gnttab_transfer(
- page->count_info &= ~(PGC_count_mask|PGC_allocated);
- free_domheap_page(page);
- page = new_page;
-+ page->count_info = PGC_allocated | 1;
-+ mfn = page_to_mfn(page);
- }
-
- spin_lock(&e->page_alloc_lock);
diff -r 8c26f5898b46 -r 1be6be24457f sysutils/xenkernel411/patches/patch-XSA285
--- a/sysutils/xenkernel411/patches/patch-XSA285 Fri Aug 30 13:00:56 2019 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-$NetBSD: patch-XSA285,v 1.1 2019/03/07 11:13:26 bouyer Exp $
-
-From: Jan Beulich <jbeulich%suse.com@localhost>
-Subject: IOMMU/x86: fix type ref-counting race upon IOMMU page table construction
-
-When arch_iommu_populate_page_table() gets invoked for an already
-running guest, simply looking at page types once isn't enough, as they
-may change at any time. Add logic to re-check the type after having
-mapped the page, unmapping it again if needed.
-
-This is XSA-285.
-
-Signed-off-by: Jan Beulich <jbeulich%suse.com@localhost>
-Tentatively-Acked-by: Andrew Cooper <andrew.cooper3%citrix.com@localhost>
-
---- xen/drivers/passthrough/x86/iommu.c.orig
-+++ xen/drivers/passthrough/x86/iommu.c
-@@ -68,6 +68,27 @@ int arch_iommu_populate_page_table(struct domain *d)
- rc = hd->platform_ops->map_page(d, gfn, mfn,
- IOMMUF_readable |
- IOMMUF_writable);
-+
-+ /*
-+ * We may be working behind the back of a running guest, which
-+ * may change the type of a page at any time. We can't prevent
-+ * this (for instance, by bumping the type count while mapping
-+ * the page) without causing legitimate guest type-change
-+ * operations to fail. So after adding the page to the IOMMU,
-+ * check again to make sure this is still valid. NB that the
-+ * writable entry in the iommu is harmless until later, when
-+ * the actual device gets assigned.
-+ */
-+ if ( !rc && !is_hvm_domain(d) &&
-+ ((page->u.inuse.type_info & PGT_type_mask) !=
-+ PGT_writable_page) )
-+ {
-+ rc = hd->platform_ops->unmap_page(d, gfn);
-+ /* If the type changed yet again, simply force a retry. */
-+ if ( !rc && ((page->u.inuse.type_info & PGT_type_mask) ==
-+ PGT_writable_page) )
-+ rc = -ERESTART;
-+ }
- }
- if ( rc )
- {
diff -r 8c26f5898b46 -r 1be6be24457f sysutils/xenkernel411/patches/patch-XSA287
--- a/sysutils/xenkernel411/patches/patch-XSA287 Fri Aug 30 13:00:56 2019 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,330 +0,0 @@
-$NetBSD: patch-XSA287,v 1.1 2019/03/07 11:13:26 bouyer Exp $
-
-From 67620c1ccb13f7b58645f48248ba1f408b021fdc Mon Sep 17 00:00:00 2001
-From: George Dunlap <george.dunlap%citrix.com@localhost>
-Date: Fri, 18 Jan 2019 15:00:34 +0000
-Subject: [PATCH] steal_page: Get rid of bogus struct page states
-
-The original rules for `struct page` required the following invariants
-at all times:
-
-- refcount > 0 implies owner != NULL
-- PGC_allocated implies refcount > 0
-
-steal_page, in a misguided attempt to protect against unknown races,
-violates both of these rules, thus introducing other races:
-
-- Temporarily, the count_info has the refcount go to 0 while
- PGC_allocated is set
-
-- It explicitly returns the page PGC_allocated set, but owner == NULL
- and page not on the page_list.
-
-The second one meant that page_get_owner_and_reference() could return
-NULL even after having successfully grabbed a reference on the page,
-leading the caller to leak the reference (since "couldn't get ref" and
-"got ref but no owner" look the same).
-
-Furthermore, rather than grabbing a page reference to ensure that the
-owner doesn't change under its feet, it appears to rely on holding
-d->page_alloc lock to prevent this.
-
-Unfortunately, this is ineffective: page->owner remains non-NULL for
-some time after the count has been set to 0; meaning that it would be
-entirely possible for the page to be freed and re-allocated to a
-different domain between the page_get_owner() check and the count_info
-check.
-
-Modify steal_page to instead follow the appropriate access discipline,
-taking the page through series of states similar to being freed and
-then re-allocated with MEMF_no_owner:
-
-- Grab an extra reference to make sure we don't race with anyone else
- freeing the page
-
-- Drop both references and PGC_allocated atomically, so that (if
-successful), anyone else trying to grab a reference will fail
-
-- Attempt to reset Xen's mappings
-
-- Reset the rest of the state.
-
-Then, modify the two callers appropriately:
-
-- Leave count_info alone (it's already been cleared)
-- Call free_domheap_page() directly if appropriate
-- Call assign_pages() rather than open-coding a partial assign
-
-With all callers to assign_pages() now passing in pages with the
-type_info field clear, tighten the respective assertion there.
-
-This is XSA-287.
-
-Signed-off-by: George Dunlap <george.dunlap%citrix.com@localhost>
-Signed-off-by: Jan Beulich <jbeulich%suse.com@localhost>
----
- xen/arch/x86/mm.c | 84 ++++++++++++++++++++++++++++------------
- xen/common/grant_table.c | 20 +++++-----
- xen/common/memory.c | 19 +++++----
- xen/common/page_alloc.c | 2 +-
- 4 files changed, 83 insertions(+), 42 deletions(-)
-
-diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
-index 6509035a5c..d8ff58c901 100644
---- xen/arch/x86/mm.c.orig
-+++ xen/arch/x86/mm.c
-@@ -3966,70 +3966,106 @@ int donate_page(
- return -EINVAL;
- }
-
-+/*
-+ * Steal page will attempt to remove `page` from domain `d`. Upon
-+ * return, `page` will be in a state similar to the state of a page
-+ * returned from alloc_domheap_page() with MEMF_no_owner set:
-+ * - refcount 0
-+ * - type count cleared
-+ * - owner NULL
-+ * - page caching attributes cleaned up
-+ * - removed from the domain's page_list
-+ *
-+ * If MEMF_no_refcount is not set, the domain's tot_pages will be
-+ * adjusted. If this results in the page count falling to 0,
-+ * put_domain() will be called.
-+ *
-+ * The caller should either call free_domheap_page() to free the
-+ * page, or assign_pages() to put it back on some domain's page list.
-+ */
- int steal_page(
- struct domain *d, struct page_info *page, unsigned int memflags)
- {
- unsigned long x, y;
- bool drop_dom_ref = false;
-- const struct domain *owner = dom_xen;
-+ const struct domain *owner;
-+ int rc;
-
- if ( paging_mode_external(d) )
- return -EOPNOTSUPP;
-
-- spin_lock(&d->page_alloc_lock);
--
-- if ( is_xen_heap_page(page) || ((owner = page_get_owner(page)) != d) )
-+ /* Grab a reference to make sure the page doesn't change under our feet */
-+ rc = -EINVAL;
-+ if ( !(owner = page_get_owner_and_reference(page)) )
- goto fail;
-
-+ if ( owner != d || is_xen_heap_page(page) )
-+ goto fail_put;
-+
- /*
-- * We require there is just one reference (PGC_allocated). We temporarily
-- * drop this reference now so that we can safely swizzle the owner.
-+ * We require there are exactly two references -- the one we just
-+ * took, and PGC_allocated. We temporarily drop both these
-+ * references so that the page becomes effectively non-"live" for
-+ * the domain.
- */
- y = page->count_info;
- do {
- x = y;
-- if ( (x & (PGC_count_mask|PGC_allocated)) != (1 | PGC_allocated) )
-- goto fail;
-- y = cmpxchg(&page->count_info, x, x & ~PGC_count_mask);
-+ if ( (x & (PGC_count_mask|PGC_allocated)) != (2 | PGC_allocated) )
-+ goto fail_put;
-+ y = cmpxchg(&page->count_info, x, x & ~(PGC_count_mask|PGC_allocated));
- } while ( y != x );
-
- /*
-- * With the sole reference dropped temporarily, no-one can update type
-- * information. Type count also needs to be zero in this case, but e.g.
-- * PGT_seg_desc_page may still have PGT_validated set, which we need to
-- * clear before transferring ownership (as validation criteria vary
-- * depending on domain type).
-+ * NB this is safe even if the page ends up being given back to
-+ * the domain, because the count is zero: subsequent mappings will
-+ * cause the cache attributes to be re-instated inside
-+ * get_page_from_l1e().
-+ */
-+ if ( (rc = cleanup_page_cacheattr(page)) )
-+ {
-+ /*
-+ * Couldn't fixup Xen's mappings; put things the way we found
-+ * it and return an error
-+ */
-+ page->count_info |= PGC_allocated | 1;
-+ goto fail;
-+ }
-+
-+ /*
-+ * With the reference count now zero, nobody can grab references
-+ * to do anything else with the page. Return the page to a state
-+ * that it might be upon return from alloc_domheap_pages with
-+ * MEMF_no_owner set.
- */
-+ spin_lock(&d->page_alloc_lock);
Home |
Main Index |
Thread Index |
Old Index