Add EN-17:05 and SA-17:03.

This commit is contained in:
Xin LI 2017-04-12 06:43:19 +00:00
parent 7bcfa78d69
commit 664d397bd6
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=50153
12 changed files with 822 additions and 0 deletions

View file

@ -0,0 +1,177 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
=============================================================================
FreeBSD-EN-17:05.xen Errata Notice
The FreeBSD Project
Topic: Xen migration enhancements
Category: core
Module: xen
Announced: 2017-04-12
Credits: Citrix Systems R&D, Huawei Technologies
Affects: All supported versions of FreeBSD.
Corrected: 2017-03-21 08:38:12 UTC (stable/11, 11.0-STABLE)
2017-04-12 06:24:35 UTC (releng/11.0, 11.0-RELEASE-p9)
2017-03-29 17:11:41 UTC (stable/10, 10.3-STABLE)
2017-04-12 06:24:35 UTC (releng/10.3, 10.3-RELEASE-p18)
For general information regarding FreeBSD Errata Notices and Security
Advisories, including descriptions of the fields above, security
branches, and the following sections, please visit
<URL:https://security.FreeBSD.org/>.
I. Background
FreeBSD when running as a Xen guest supports live-migration, that means being
able to move from one physical Xen host to another without interruption of
service.
Due to the lack of ordering during the resume procedure devices might try to
use the Xen PV timer before it's correctly resumed, leading to unexpected
results.
II. Problem Description
There are three issues that currently prevent FreeBSD from working reliably under
heavy live-migration stress:
1. FreeBSD cannot recover from a failed live migration. It is a Xen feature to
fail a live migration, which means the VM will continue running on the same
host. FreeBSD was not capable of coping with this situation.
[This is https://reviews.freebsd.org/D9635]
2. User-space processes that make use of the xenstore device
(/dev/xen/xenstore) might manage to lock-up the resume procedure, preventing
the kernel from resuming correctly after a live-migration.
[This is https://reviews.freebsd.org/D9638]
3. The Xen PV timer is attached to the xenpv bus on FreeBSD 11.0, and the xenpv
bus itself is attached after the PCI bus and other buses. This means that the
Xen PV timer is also resume quite late, and device drivers might try to use the
timer before it's resumed correctly, leading to erratic behavior or lockups.
III. Impact
FreeBSD 10.3 and 11.0 are affected by the 1. and 2. issues when being migrated
as a Xen guest.
Only FreeBSD 11.0 is affected when live-migrated as a Xen guest.
IV. Workaround
Not attempting to use live-migration when running as a Xen guest will prevent
those issues.
Not having user-space processes will prevent issue 2. from happening.
For issue 3, the administrator can switch to a different timer, like the TSC, if
there is plan to migrate the VM:
# sysctl -a | grep timecounter.choice
kern.timecounter.choice: XENTIMER(950) ACPI-safe(850) i8254(0) TSC-low(-100) dummy(-1000000)
# sysctl -w kern.timecounter.hardware=TSC-low
V. Solution
Issue 1. has been solved by adding the proper logic in FreeBSD in order to
recover from failed live migrations.
Issue 2. has been resolved by adding xenstore locking around the suspend
procedure, in order to make sure no user-space process is holding the xenstore
lock when going into suspension.
Issue 3. has been solved by marking the Xen PV timer as not safe for suspension
until the order issues can be solved.
Perform one of the following:
1) Upgrade your system to a supported FreeBSD stable or release / security
branch (releng) dated after the correction date.
A reboot is required.
2) To update your system via a binary patch:
Systems running a RELEASE version of FreeBSD on the i386 or amd64
platforms can be updated via the freebsd-update(8) utility:
# freebsd-update fetch
# freebsd-update install
A reboot is required.
3) To update your system via a source code patch:
The following patches have been verified to apply to the applicable
FreeBSD release branches.
a) Download the relevant patch from the location below, and verify the
detached PGP signature using your PGP utility.
[FreeBSD 11.0]
# fetch https://security.FreeBSD.org/patches/EN-17:05/xen-11.0.patch
# fetch https://security.FreeBSD.org/patches/EN-17:05/xen-11.0.patch.asc
# gpg --verify xen-11.0.patch.asc
[FreeBSD 10.3]
# fetch https://security.FreeBSD.org/patches/EN-17:05/xen-10.3.patch
# fetch https://security.FreeBSD.org/patches/EN-17:05/xen-10.3.patch.asc
# gpg --verify xen-10.3.patch.asc
b) Apply the patch. Execute the following commands as root:
# cd /usr/src
# patch < /path/to/patch
c) Recompile your kernel as described in
<URL:https://www.FreeBSD.org/handbook/kernelconfig.html> and reboot the
system.
VI. Correction details
The following list contains the correction revision numbers for each
affected branch.
Branch/path Revision
- -------------------------------------------------------------------------
stable/10/ r316170
releng/10.3/ r316722
stable/11/ r315668
releng/11.0/ r316722
- -------------------------------------------------------------------------
To see which files were modified by a particular revision, run the
following command, replacing NNNNNN with the revision number, on a
machine with Subversion installed:
# svn diff -cNNNNNN --summarize svn://svn.freebsd.org/base
Or visit the following URL, replacing NNNNNN with the revision number:
<URL:https://svnweb.freebsd.org/base?view=revision&revision=NNNNNN>
VII. References
The latest revision of this advisory is available at
<URL:https://security.FreeBSD.org/advisories/FreeBSD-EN-17:05.xen.asc>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.1.19 (FreeBSD)
iQIzBAEBCgAdFiEEHPf/b631yp++G4yy7Wfs1l3PaucFAljtyccACgkQ7Wfs1l3P
aucjmxAAtLQLh+Xjlue/pTN4OQFSlfS4drkk2ufnQqJON7qe+P6MUcOJaZPb730C
uFNX4XbRbUxsAx04N2LAygTungvl79LgacHAOL4UYC9z055qFISMY8/fPZN35k1G
rDAJ5C0O7/YLCA7Uxcars1FfPFxNuLBK78tjvpP6PHXbI/jm6CO8NRgnlZRjRIAg
088M5Fqc4ucM6qfesG6cjpsb3QgwJz7ZP8ioLIJpdCsrmCSsW4+ceD9bfCxzIPHJ
Gsb2nDw++n/QZEU0Ely6CjlNh9Y7oRDC7xcOzCyYGhUASATfqjfqSGOFUFpUD8PB
IcGNXew4IxTU0hhpkKO42bdi5jORzJy4EVCHOrjPeecZ6NL5Cmj9Yvnd2SEV8ura
Zm2+gpVmsL4hBTLg4cxjjGApzH11289imUfHCEhv2ehxLXEwSziDzAAcKaWdrTOU
KQ3HSIaitxynWP8YhmYDgNP2599iuXSnJvUwLtYJ03zEUILV+NTvEKqTMqLzxA90
lYYjq+vsF3G+A31TWKwIWR1VU+CBec6NHvZd7nxWb236hfxHNJPrrqUDCqhOfHaG
q6Lf//VPGTHAeLIQ5NPRr5/FwgsAHZCnyslg6bMQyqyql/3j/fMWKu4vOtI554mP
0GCTyEidEHxm3pXYCiv/RnTmnbiu7hQyZUFwgVISHlmnk+HWXSI=
=xLET
-----END PGP SIGNATURE-----

View file

@ -0,0 +1,163 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
=============================================================================
FreeBSD-SA-17:03.ntp Security Advisory
The FreeBSD Project
Topic: Multiple vulnerabilities of ntp
Category: contrib
Module: ntp
Announced: 2017-04-12
Credits: Network Time Foundation
Affects: All supported versions of FreeBSD.
Corrected: 2017-03-28 04:48:17 UTC (stable/11, 11.0-STABLE)
2017-04-12 06:24:35 UTC (releng/11.0, 11.0-RELEASE-p9)
2017-03-28 04:48:55 UTC (stable/10, 10.3-STABLE)
2017-04-12 06:24:35 UTC (releng/10.3, 10.3-RELEASE-p18)
CVE Name: CVE-2017-6464, CVE-2017-6462, CVE-2017-6463, CVE-2016-9042
For general information regarding FreeBSD Security Advisories,
including descriptions of the fields above, security branches, and the
following sections, please visit <URL:https://security.FreeBSD.org/>.
I. Background
The ntpd(8) daemon is an implementation of the Network Time Protocol (NTP)
used to synchronize the time of a computer system to a reference time
source.
II. Problem Description
A vulnerability was discovered in the NTP server's parsing of configuration
directives. [CVE-2017-6464]
A vulnerability was found in NTP, in the parsing of packets from the
DPTS Clock. [CVE-2017-6462]
A vulnerability was discovered in the NTP server's parsing of configuration
directives. [CVE-2017-6463]
A vulnerability was found in NTP, affecting the origin timestamp check
function. [CVE-2016-9042]
III. Impact
A remote, authenticated attacker could cause ntpd to crash by sending a
crafted message. [CVE-2017-6463, CVE-2017-6464]
A malicious device could send crafted messages, causing ntpd to crash.
[CVE-2017-6462]
An attacker able to spoof messages from all of the configured peers
could send crafted packets to ntpd, causing later replies from those
peers to be discarded, resulting in denial of service. [CVE-2016-9042]
IV. Workaround
No workaround is available, but systems not running ntpd(8) are not
affected. Network administrators are advised to implement BCP-38,
which helps to reduce the risk associated with these attacks.
V. Solution
Perform one of the following:
1) Upgrade your vulnerable system to a supported FreeBSD stable or
release / security branch (releng) dated after the correction date.
The ntpd service has to be restarted after the update. A reboot is
recommended but not required.
2) To update your vulnerable system via a binary patch:
Systems running a RELEASE version of FreeBSD on the i386 or amd64
platforms can be updated via the freebsd-update(8) utility:
# freebsd-update fetch
# freebsd-update install
The ntpd service has to be restarted after the update. A reboot is
recommended but not required.
3) To update your vulnerable system via a source code patch:
The following patches have been verified to apply to the applicable
FreeBSD release branches.
a) Download the relevant patch from the location below, and verify the
detached PGP signature using your PGP utility.
[FreeBSD 11.0]
# fetch https://security.FreeBSD.org/patches/SA-17:03/ntp-11.0.patch.xz
# fetch https://security.FreeBSD.org/patches/SA-17:03/ntp-11.0.patch.xz.asc
# gpg --verify ntp-11.0.patch.xz.asc
[FreeBSD 10.3]
# fetch https://security.FreeBSD.org/patches/SA-17:03/ntp-10.3.patch.xz
# fetch https://security.FreeBSD.org/patches/SA-17:03/ntp-10.3.patch.xz.asc
# gpg --verify ntp-10.3.patch.xz.asc
b) Apply the patch. Execute the following commands as root:
# cd /usr/src
# patch < /path/to/patch
c) Recompile the operating system using buildworld and installworld as
described in <URL:https://www.FreeBSD.org/handbook/makeworld.html>.
Restart the applicable daemons, or reboot the system.
VI. Correction details
The following list contains the correction revision numbers for each
affected branch.
Branch/path Revision
- -------------------------------------------------------------------------
stable/10/ r316069
releng/10.3/ r316722
stable/11/ r316068
releng/11.0/ r316722
- -------------------------------------------------------------------------
To see which files were modified by a particular revision, run the
following command, replacing NNNNNN with the revision number, on a
machine with Subversion installed:
# svn diff -cNNNNNN --summarize svn://svn.freebsd.org/base
Or visit the following URL, replacing NNNNNN with the revision number:
<URL:https://svnweb.freebsd.org/base?view=revision&revision=NNNNNN>
VII. References
<URL:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-9042>
<URL:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-6462>
<URL:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-6463>
<URL:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-6464>
The latest revision of this advisory is available at
<URL:https://security.FreeBSD.org/advisories/FreeBSD-SA-17:03.ntp.asc>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.1.19 (FreeBSD)
iQIzBAEBCgAdFiEEHPf/b631yp++G4yy7Wfs1l3PaucFAljty+gACgkQ7Wfs1l3P
audFpxAA30Po/44RV8x98fcopL+/qX0bKhs2yORCcYs/ebrPaDW6ghdqPAPyNDen
qJSoEU6FFZxU508reu6mcJIze0YzSC2D4Xe+BjtVjTUhgZ1mUlfx+0Dqa6DsmyPE
wreYZ0+aPJPSg82P4pOR+Oo4Omh0BHXw/Yu+uJxd+VSGAWg9zJk9QcRyy3QKsPFn
YbMYjAsMk1x2i/q6GzRnoJXAFT9c1QsKRP1QU3JivDEQEYwreqKxkG7Ex9OkUOmL
CIPVG19K7iddnMfiQPjhPhyAOFWrtKMm1rjcg1vSEMUQ24MtVotGOgNkKXEf0vjT
eVX91sIRYGgy9utg6Mg4pnDT7m94PMh7mORgfphHg7l7LFVGYKAbHF7khIMtrs4k
/ZU5i7xZqKR6xNm4oWtaBC9EipkWfjnXjBRG30t3kdD2r7ElJ+Y3mvPdalFsxd+U
gP2Wgn//byToXVUGFLChR7KSWDOjUpdiGu3UUDG4LmG/U4whDsSobPgOF3SzbALF
mx8f7OWkOYCnQ9WuhI3PVvCdLncjZ5UdLaQ5nP53pn3rGk9C4MJpGlTI2iS1gwFV
n09mE5zXueI3jVJm+An2X2Z3C8fTCRHb7n3Sej2wnrgiXk8z/8ftX6VJcUxdgW+A
OYFztl0iKgjgEXix33FZ5baivohQVhAT5rUQRQ/+gcrvL8rbJQg=
=58Te
-----END PGP SIGNATURE-----

View file

@ -0,0 +1,214 @@
--- sys/dev/xen/blkfront/blkfront.c.orig
+++ sys/dev/xen/blkfront/blkfront.c
@@ -1503,6 +1503,11 @@
{
struct xbd_softc *sc = device_get_softc(dev);
+ if (xen_suspend_cancelled) {
+ sc->xbd_state = XBD_STATE_CONNECTED;
+ return (0);
+ }
+
DPRINTK("xbd_resume: %s\n", xenbus_get_node(dev));
xbd_free(sc);
--- sys/dev/xen/control/control.c.orig
+++ sys/dev/xen/control/control.c
@@ -151,6 +151,7 @@
#include <machine/xen/xenvar.h>
#include <machine/xen/xenfunc.h>
+bool xen_suspend_cancelled;
/*--------------------------- Forward Declarations --------------------------*/
/** Function signature for shutdown event handlers. */
typedef void (xctrl_shutdown_handler_t)(void);
@@ -341,8 +342,11 @@
#ifdef SMP
cpuset_t cpu_suspend_map;
#endif
- int suspend_cancelled;
+ EVENTHANDLER_INVOKE(power_suspend_early);
+ xs_lock();
+ stop_all_proc();
+ xs_unlock();
EVENTHANDLER_INVOKE(power_suspend);
if (smp_started) {
@@ -392,16 +396,20 @@
intr_suspend();
xen_hvm_suspend();
- suspend_cancelled = HYPERVISOR_suspend(0);
+ xen_suspend_cancelled = !!HYPERVISOR_suspend(0);
- xen_hvm_resume(suspend_cancelled != 0);
- intr_resume(suspend_cancelled != 0);
+ if (!xen_suspend_cancelled) {
+ xen_hvm_resume(false);
+ }
+ intr_resume(xen_suspend_cancelled != 0);
enable_intr();
/*
* Reset grant table info.
*/
- gnttab_resume();
+ if (!xen_suspend_cancelled) {
+ gnttab_resume();
+ }
#ifdef SMP
/* Send an IPI_BITMAP in case there are pending bitmap IPIs. */
@@ -429,6 +437,8 @@
thread_unlock(curthread);
}
+ resume_all_proc();
+
EVENTHANDLER_INVOKE(power_resume);
if (bootverbose)
--- sys/dev/xen/netfront/netfront.c.orig
+++ sys/dev/xen/netfront/netfront.c
@@ -509,6 +509,15 @@
{
struct netfront_info *info = device_get_softc(dev);
+ if (xen_suspend_cancelled) {
+ XN_RX_LOCK(info);
+ XN_TX_LOCK(info);
+ netfront_carrier_on(info);
+ XN_TX_UNLOCK(info);
+ XN_RX_UNLOCK(info);
+ return (0);
+ }
+
info->xn_resume = true;
netif_disconnect_backend(info);
return (0);
@@ -796,6 +805,45 @@
}
static void
+netif_release_rx_bufs_copy(struct netfront_info *np)
+{
+ struct mbuf *m;
+ grant_ref_t ref;
+ unsigned int i, busy, inuse;
+
+ XN_RX_LOCK(np);
+
+ for (busy = inuse = i = 0; i < NET_RX_RING_SIZE; i++) {
+ ref = np->grant_rx_ref[i];
+
+ if (ref == GRANT_REF_INVALID)
+ continue;
+
+ inuse++;
+
+ m = np->rx_mbufs[i];
+
+ if (!gnttab_end_foreign_access_ref(ref)) {
+ busy++;
+ continue;
+ }
+
+ gnttab_release_grant_reference(&np->gref_rx_head, ref);
+ np->grant_rx_ref[i] = GRANT_REF_INVALID;
+ add_id_to_freelist(np->rx_mbufs, i);
+
+ m_freem(m);
+ }
+
+ if (busy != 0)
+ device_printf(np->xbdev,
+ "Unable to release %u of %u in use grant references out of %zu total.\n",
+ busy, inuse, NET_RX_RING_SIZE);
+
+ XN_RX_UNLOCK(np);
+}
+
+static void
network_alloc_rx_buffers(struct netfront_info *sc)
{
int otherend_id = xenbus_get_otherend_id(sc->xbdev);
@@ -2190,6 +2238,12 @@
info->xn_ifp = NULL;
}
ifmedia_removeall(&info->sc_media);
+ netif_release_tx_bufs(info);
+ if (info->copying_receiver)
+ netif_release_rx_bufs_copy(info);
+
+ gnttab_free_grant_references(info->gref_tx_head);
+ gnttab_free_grant_references(info->gref_rx_head);
}
static void
--- sys/xen/xen-os.h.orig
+++ sys/xen/xen-os.h
@@ -57,6 +57,8 @@
extern int xen_disable_pv_nics;
#endif
+extern bool xen_suspend_cancelled;
+
enum xen_domain_type {
XEN_NATIVE, /* running on bare hardware */
XEN_PV_DOMAIN, /* running in a PV domain */
--- sys/xen/xenbus/xenbusb.c.orig
+++ sys/xen/xenbus/xenbusb.c
@@ -791,6 +791,11 @@
if (device_get_state(kids[i]) == DS_NOTPRESENT)
continue;
+ if (xen_suspend_cancelled) {
+ DEVICE_RESUME(kids[i]);
+ continue;
+ }
+
ivars = device_get_ivars(kids[i]);
xs_unregister_watch(&ivars->xd_otherend_watch);
--- sys/xen/xenstore/xenstore.c.orig
+++ sys/xen/xenstore/xenstore.c
@@ -1657,3 +1657,20 @@
sx_xunlock(&xs.xenwatch_mutex);
}
}
+
+void
+xs_lock(void)
+{
+
+ sx_xlock(&xs.request_mutex);
+ return;
+}
+
+void
+xs_unlock(void)
+{
+
+ sx_xunlock(&xs.request_mutex);
+ return;
+}
+
--- sys/xen/xenstore/xenstorevar.h.orig
+++ sys/xen/xenstore/xenstorevar.h
@@ -338,4 +338,15 @@
*/
struct sbuf *xs_join(const char *, const char *);
+/**
+ * Lock the xenstore request mutex.
+ */
+void xs_lock(void);
+
+/**
+ * Unlock the xenstore request mutex.
+ */
+void xs_unlock(void);
+
#endif /* _XEN_XENSTORE_XENSTOREVAR_H */
+

View file

@ -0,0 +1,17 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.1.19 (FreeBSD)
iQIzBAABCgAdFiEEHPf/b631yp++G4yy7Wfs1l3PaucFAljtydAACgkQ7Wfs1l3P
audxcBAA1yPLFy9chiDWxOhsJZxiAL5r7ferseaUBWyAupmECLy7eiZU25W8T2Bc
zqQXbuqSFpq+LCQ6mIqbd0F9JIQxEkG1VVT3vVIiiuuqsZrO5kZfrHLtB3G9IHbD
Wrp5NQ4VPQp9ur5oqPKVolAKLtW+XNfu0kMPrK2n2GiyLJyP3uGanCFfQrhsjktS
a9rXQrYyqk7yx/JXsz3GO2YeUaQUY8Y8B0jxox4pK70WZWvua2OwXdSZadVCzLIx
7gmCdu8foMGaG2MBlTQf8e2SLQM5TS0RQcmw0WFRwaDUMiUhRP+QB4pdolqHr+G6
o8WiwsOp65ow7hlbsg2MaWPkF9dKf6dWjX8b4/dw2budlpeMV+SMiDqOiG2U6cdA
/9I1ZHBBAgOEyUh/X8PPp9snGKHkbNIRCFbJr02SVYy7LXjVrTZiAuEQCTQpMUTy
hFQ1gF2hgFL3h0DcJ907/lmE5SGFU37m5oC9pRL7tT7EpyiMdSifjukMl0EiWEPp
MhbZJM71zcTZXqg9KAghTm9gBd1iQcqmBsvC8T6lRQwDShNgIZ7a4J3PVNNG2vQ5
9clK9eszKRciMpWfuB1IK0JlTUmOAKrkGI/ZBOsvRhRrfpcCAOTKNmDWwDnKR7w1
w2TZFqsNVdySpR88V2vFK0SgjJzMlrOa1r92bx6AcHcdX0WkFDA=
=SW3x
-----END PGP SIGNATURE-----

View file

@ -0,0 +1,176 @@
--- sys/dev/xen/blkfront/blkfront.c.orig
+++ sys/dev/xen/blkfront/blkfront.c
@@ -1529,6 +1529,11 @@
{
struct xbd_softc *sc = device_get_softc(dev);
+ if (xen_suspend_cancelled) {
+ sc->xbd_state = XBD_STATE_CONNECTED;
+ return (0);
+ }
+
DPRINTK("xbd_resume: %s\n", xenbus_get_node(dev));
xbd_free(sc);
--- sys/dev/xen/control/control.c.orig
+++ sys/dev/xen/control/control.c
@@ -148,6 +148,7 @@
#include <xen/xenbus/xenbusvar.h>
+bool xen_suspend_cancelled;
/*--------------------------- Forward Declarations --------------------------*/
/** Function signature for shutdown event handlers. */
typedef void (xctrl_shutdown_handler_t)(void);
@@ -196,10 +197,11 @@
#ifdef SMP
cpuset_t cpu_suspend_map;
#endif
- int suspend_cancelled;
EVENTHANDLER_INVOKE(power_suspend_early);
+ xs_lock();
stop_all_proc();
+ xs_unlock();
EVENTHANDLER_INVOKE(power_suspend);
#ifdef EARLY_AP_STARTUP
@@ -267,16 +269,20 @@
intr_suspend();
xen_hvm_suspend();
- suspend_cancelled = HYPERVISOR_suspend(0);
+ xen_suspend_cancelled = !!HYPERVISOR_suspend(0);
- xen_hvm_resume(suspend_cancelled != 0);
- intr_resume(suspend_cancelled != 0);
+ if (!xen_suspend_cancelled) {
+ xen_hvm_resume(false);
+ }
+ intr_resume(xen_suspend_cancelled != 0);
enable_intr();
/*
* Reset grant table info.
*/
- gnttab_resume(NULL);
+ if (!xen_suspend_cancelled) {
+ gnttab_resume(NULL);
+ }
#ifdef SMP
if (!CPU_EMPTY(&cpu_suspend_map)) {
--- sys/dev/xen/netfront/netfront.c.orig
+++ sys/dev/xen/netfront/netfront.c
@@ -458,7 +458,21 @@
netfront_resume(device_t dev)
{
struct netfront_info *info = device_get_softc(dev);
+ u_int i;
+ if (xen_suspend_cancelled) {
+ for (i = 0; i < info->num_queues; i++) {
+ XN_RX_LOCK(&info->rxq[i]);
+ XN_TX_LOCK(&info->txq[i]);
+ }
+ netfront_carrier_on(info);
+ for (i = 0; i < info->num_queues; i++) {
+ XN_RX_UNLOCK(&info->rxq[i]);
+ XN_TX_UNLOCK(&info->txq[i]);
+ }
+ return (0);
+ }
+
netif_disconnect_backend(info);
return (0);
}
--- sys/dev/xen/timer/timer.c.orig
+++ sys/dev/xen/timer/timer.c
@@ -417,8 +417,20 @@
/* Register the timecounter. */
sc->tc.tc_name = "XENTIMER";
sc->tc.tc_quality = XENTIMER_QUALITY;
- sc->tc.tc_flags = TC_FLAGS_SUSPEND_SAFE;
/*
+ * FIXME: due to the lack of ordering during resume, FreeBSD cannot
+ * guarantee that the Xen PV timer is resumed before any other device
+ * attempts to make use of it, so mark it as not safe for suspension
+ * (ie: remove the TC_FLAGS_SUSPEND_SAFE flag).
+ *
+ * NB: This was not a problem in previous FreeBSD versions because the
+ * timer was directly attached to the nexus, but it is an issue now
+ * that the timer is attached to the xenpv bus, and thus resumed
+ * later.
+ *
+ * sc->tc.tc_flags = TC_FLAGS_SUSPEND_SAFE;
+ */
+ /*
* The underlying resolution is in nanoseconds, since the timer info
* scales TSC frequencies using a fraction that represents time in
* terms of nanoseconds.
--- sys/dev/xen/xenstore/xenstore.c.orig
+++ sys/dev/xen/xenstore/xenstore.c
@@ -1699,3 +1699,20 @@
sx_xunlock(&xs.xenwatch_mutex);
}
}
+
+void
+xs_lock(void)
+{
+
+ sx_xlock(&xs.request_mutex);
+ return;
+}
+
+void
+xs_unlock(void)
+{
+
+ sx_xunlock(&xs.request_mutex);
+ return;
+}
+
--- sys/xen/xen-os.h.orig
+++ sys/xen/xen-os.h
@@ -56,6 +56,8 @@
extern int xen_disable_pv_disks;
extern int xen_disable_pv_nics;
+extern bool xen_suspend_cancelled;
+
enum xen_domain_type {
XEN_NATIVE, /* running on bare hardware */
XEN_PV_DOMAIN, /* running in a PV domain */
--- sys/xen/xenbus/xenbusb.c.orig
+++ sys/xen/xenbus/xenbusb.c
@@ -791,6 +791,11 @@
if (device_get_state(kids[i]) == DS_NOTPRESENT)
continue;
+ if (xen_suspend_cancelled) {
+ DEVICE_RESUME(kids[i]);
+ continue;
+ }
+
ivars = device_get_ivars(kids[i]);
xs_unregister_watch(&ivars->xd_otherend_watch);
--- sys/xen/xenstore/xenstorevar.h.orig
+++ sys/xen/xenstore/xenstorevar.h
@@ -338,4 +338,15 @@
*/
struct sbuf *xs_join(const char *, const char *);
+/**
+ * Lock the xenstore request mutex.
+ */
+void xs_lock(void);
+
+/**
+ * Unlock the xenstore request mutex.
+ */
+void xs_unlock(void);
+
#endif /* _XEN_XENSTORE_XENSTOREVAR_H */
+

View file

@ -0,0 +1,17 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.1.19 (FreeBSD)
iQIzBAABCgAdFiEEHPf/b631yp++G4yy7Wfs1l3PaucFAljtydAACgkQ7Wfs1l3P
auc88A/+OR7nEKgcAvEQgW8gx/LiVXvBIxjVXf7zZ6YgddZiDjkT9kOVgMMkpX3g
4v0FJ+LHcWcUGtOAncdPox5Her/Vh6p63/sbeAghxoAO1G11gwT06y1GJCOVnUcg
DcwqrpAinv+96aKY0XNio+VHPLPTmXS/G/0GSaI2zcmwkTKTAojVTIm5XDs+urba
w/BgiIJn9uUOHWLW2WvUwQLpOZZi+97atH1+pz6m/GTxOy+X8CXL2FClxvsaKZKV
XLrq/nNrtO2kAqu3CSy6SxJcOR1n+hPf58yGr/km9Zz1RVMGiS5UiPos4FkF6bDN
O1F6PwfBtHLvKFI0ufNrLAd2fJp73MwzPG1p3rJA+86ijZz5ngqpnDOG/ApAhbyM
p8oBWM8nKbbVy1ISAFi3M0xUREwxbk4Dg3GjM0MGf3h4p6T3eYh9EBiFSBGKlaQj
XEejk8FfwV2nDZB/LSBnhw6FCKMQnTjKa1oXxLyVGxhBbDgRdHu87vfRfdaXhjBE
icDHn1u9pYAR6wrXCDm+VhMv18Lo3jCg6t00r6kjroC6A8V0jqm0EOjIF7WbgA4u
v0h7w9h+5bZCeY2xlybVoafk32PyzLqKPHO47XiSDFBeZbMXdfamDcTbhxKotuuX
mtqQ8jntfyuMPA1QkzagbWDi3ytmMPNw+IgUCY8beuOEgDT3C+I=
=SJ6Q
-----END PGP SIGNATURE-----

Binary file not shown.

View file

@ -0,0 +1,17 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.1.19 (FreeBSD)
iQIzBAABCgAdFiEEHPf/b631yp++G4yy7Wfs1l3PaucFAljty/QACgkQ7Wfs1l3P
audZTA//VWVCVJG3oXcNaA0f1pnwMFWbMk0cioRPNPiZSZtPr/PaAFzQlCb233rh
VqI1rJQGcQEmDcCTIdq1dhLHj5g5Wpd3wsa1Rmzcsaal0Cz2XFhsYN0kiZbpI4nE
fOFVYng0+BE4VYY/zKIuSH1uhIJm1luAvPx6T09y/IBcATeqYbJkm1E7Bb80CpJz
c9+eC+o9ZGoR+5Vs5tD9ex/4w1ukq3A3lzxpvbpuXCgpZhP0stFeHPGg8fc/RUFR
0JBXyfIcjpUDF4x7osxzCkDBmzTPQyhQ3IPRvvYEdX0sDK9Id7FS3fGNmBF0hz6A
q95I5UF7EVgaeab4xeMc+Z4XqbozKkgZ15Cy0l3oDJ6ETU/GL2cYYEggOaMiHY0+
djKv8D3+ipvOMbjE73UymbQDNYDQb04VVV5Gjv4rfrvwzPpbmi63pR7FQLcgSWfY
F9fc6T6EPuZHkpR7RdNo52YSeVWBC5ICiPySMDV0g/fEZIjdoU1QrT/5dmWtFGTR
pwQbwOHYdSRXNMsYvhyecsBTQdEFE6w9zgt/85rYfwjmz5nAO9oEn9FdCv2W7PsE
PbPJ3P/8bEvoA1VjZ46bGz9IuK/0Z9p832pB1K3ppN1rbHLmHK9tPuhIW2EQEgJI
v4KOeNOzcIIFkfh5EMsZx2LVr1CV9OJ+Krl8oEA5dXjluqigYuk=
=cXVX
-----END PGP SIGNATURE-----

Binary file not shown.

View file

@ -0,0 +1,17 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.1.19 (FreeBSD)
iQIzBAABCgAdFiEEHPf/b631yp++G4yy7Wfs1l3PaucFAljty/QACgkQ7Wfs1l3P
audFIQ//e9QSmpTDaJ7kvmMdSlJEWH3NFdVVTa37HDLVp4Xf8KQHtOIkEogViuwy
xIRc/NRhJL8Y0lzyeuG/23GooUN27CaKXNFs3saZMS8DCQmo40/dnefa8kuwf9UZ
9ZeCJhDacGvbEhygPhRXUUgH8DVY1Er2UM5icPI2dmXVplIHGs1RNyPYsAqCXoDc
5dhlCxXTfDaHO1igX9m/rAhJP4R2anp9oCPzlGFL3+0TJq0hNvD9Z0CutbrfnhId
ypiV8dNgaTElWTt1VLe+xRZPvhcqkVWjMulqiixc9yRYDJejDwhGkKIi/hY7tvT4
XhXQqqh8svYiRZ+2Gi/tNeHRT8Rv5nddf0hsikXFvpP/ipHohCpVKlPEWmFp3uSy
A3L+coguwwTXWiq4Kp/kp9Qad7W9+W1pPFxGjxofQvK9eVJV3iiyM6X0wouXwfaX
j9GFjDZIdZH/uCGADq6YNn+Pjqmzv9lHblYwXIhAr+MKbhuw4oJIcMa6u/yw8xs8
nlAzgPzmdkzo3j8Q7cKl+6rInAi3N6JJo42XJsf+L8Rqk0aNdW6C3HDG5omt2Qqa
r25rr3MC2BPnSoUcPSlSXCgy7i1/LprBISNNbIwtBrhLW0nmcJZAeutPMkOPbVXx
ng0uXU0XUD3IDiZ9PaKAPTIVvjDAh9f5OC3m3+VEz01yL8teNvg=
=L1P6
-----END PGP SIGNATURE-----

View file

@ -7,6 +7,18 @@
<year>
<name>2017</name>
<month>
<name>4</name>
<day>
<name>12</name>
<advisory>
<name>FreeBSD-SA-17:03.ntp</name>
</advisory>
</day>
</month>
<month>
<name>2</name>

View file

@ -7,6 +7,18 @@
<year>
<name>2017</name>
<month>
<name>4</name>
<day>
<name>12</name>
<notice>
<name>FreeBSD-EN-17:05.xen</name>
</notice>
</day>
</month>
<month>
<name>2</name>