Add EN-21:01 to EN-21:05, SA-21:01, and SA-21:02.
Approved by: so
This commit is contained in:
parent
a477da2013
commit
9030a72250
27 changed files with 3896 additions and 0 deletions
website
data/security
static/security
advisories
FreeBSD-EN-21:01.tzdata.ascFreeBSD-EN-21:02.extattr.ascFreeBSD-EN-21:03.vnet.ascFreeBSD-EN-21:04.zfs.ascFreeBSD-EN-21:05.libatomic.ascFreeBSD-SA-21:01.fsdisclosure.ascFreeBSD-SA-21:02.xenoom.asc
patches
EN-21:01
EN-21:02
EN-21:03
EN-21:04
EN-21:05
SA-21:01
SA-21:02
|
@ -1,6 +1,14 @@
|
|||
# Sort advisories by year, month and day
|
||||
# $FreeBSD$
|
||||
|
||||
[[advisories]]
|
||||
name = "FreeBSD-SA-21:02.xenoom"
|
||||
date = "2021-01-29"
|
||||
|
||||
[[advisories]]
|
||||
name = "FreeBSD-SA-21:01.fsdisclosure"
|
||||
date = "2021-01-29"
|
||||
|
||||
[[advisories]]
|
||||
name = "FreeBSD-SA-20:33.openssl"
|
||||
date = "2020-12-08"
|
||||
|
|
|
@ -1,6 +1,26 @@
|
|||
# Sort errata notices by year, month and day
|
||||
# $FreeBSD$
|
||||
|
||||
[[notices]]
|
||||
name = "FreeBSD-EN-21:05.libatomic"
|
||||
date = "2021-01-29"
|
||||
|
||||
[[notices]]
|
||||
name = "FreeBSD-EN-21:04.zfs"
|
||||
date = "2021-01-29"
|
||||
|
||||
[[notices]]
|
||||
name = "FreeBSD-EN-21:03.vnet"
|
||||
date = "2021-01-29"
|
||||
|
||||
[[notices]]
|
||||
name = "FreeBSD-EN-21:02.extattr"
|
||||
date = "2021-01-29"
|
||||
|
||||
[[notices]]
|
||||
name = "FreeBSD-EN-21:01.tzdata"
|
||||
date = "2021-01-29"
|
||||
|
||||
[[notices]]
|
||||
name = "FreeBSD-EN-20:22.callout"
|
||||
date = "2020-12-01"
|
||||
|
|
148
website/static/security/advisories/FreeBSD-EN-21:01.tzdata.asc
Normal file
148
website/static/security/advisories/FreeBSD-EN-21:01.tzdata.asc
Normal file
|
@ -0,0 +1,148 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-EN-21:01.tzdata Errata Notice
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: Timezone database information update
|
||||
|
||||
Category: contrib
|
||||
Module: zoneinfo
|
||||
Announced: 2021-01-29
|
||||
Affects: All supported versions of FreeBSD.
|
||||
Corrected: 2021-01-25 21:56:55 UTC (stable/12, 12.2-STABLE)
|
||||
2021-01-29 01:20:49 UTC (releng/12.2, 12.2-RELEASE-p3)
|
||||
2021-01-29 01:05:59 UTC (releng/12.1, 12.1-RELEASE-p13)
|
||||
2021-01-25 21:57:06 UTC (stable/11, 11.4-STABLE)
|
||||
2021-01-29 00:19:59 UTC (releng/11.4, 11.4-RELEASE-p7)
|
||||
|
||||
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
|
||||
|
||||
The tzsetup(8) program allows the user to specify the default local timezone.
|
||||
Based on the selected timezone, tzsetup(8) copies one of the files from
|
||||
/usr/share/zoneinfo to /etc/localtime. This file actually controls the
|
||||
conversion.
|
||||
|
||||
II. Problem Description
|
||||
|
||||
Several changes in Daylight Savings Time happened after previous FreeBSD
|
||||
releases were released that would affect many people who live in different
|
||||
countries. Because of these changes, the data in the zoneinfo files need to
|
||||
be updated, and if the local timezone on the running system is affected,
|
||||
tzsetup(8) needs to be run so the /etc/localtime is updated.
|
||||
|
||||
III. Impact
|
||||
|
||||
An incorrect time will be displayed on a system configured to use one of the
|
||||
affected timezones if the /usr/share/zoneinfo and /etc/localtime files are
|
||||
not updated, and all applications on the system that rely on the system time,
|
||||
such as cron(8) and syslog(8), will be affected.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
The system administrator can install an updated timezone database from the
|
||||
misc/zoneinfo port and run tzsetup(8) to get the timezone database corrected.
|
||||
|
||||
Applications that store and display times in Coordinated Universal Time (UTC)
|
||||
are not affected.
|
||||
|
||||
V. Solution
|
||||
|
||||
Please note that some third party software, for instance PHP, Ruby, Java and
|
||||
Perl, may be using different zoneinfo data source, in such cases this
|
||||
software must be updated separately. For software packages that is installed
|
||||
via binary packages, they can be upgraded by executing `pkg upgrade'.
|
||||
|
||||
Following the instructions in this Errata Notice will update all of the
|
||||
zoneinfo files to be the same as what was released with FreeBSD release.
|
||||
|
||||
Perform one of the following:
|
||||
|
||||
1) Upgrade your system to a supported FreeBSD stable or release / security
|
||||
branch (releng) dated after the correction date. Restart all the affected
|
||||
applications and daemons, or reboot the system.
|
||||
|
||||
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
|
||||
|
||||
Restart all the affected applications and daemons, or reboot the system.
|
||||
|
||||
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.
|
||||
|
||||
# fetch https://security.FreeBSD.org/patches/EN-21:01/tzdata-2021a.patch
|
||||
# fetch https://security.FreeBSD.org/patches/EN-21:01/tzdata-2021a.patch.asc
|
||||
# gpg --verify tzdata-2021a.patch.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 all the affected applications and daemons, or reboot the system.
|
||||
|
||||
VI. Correction details
|
||||
|
||||
The following list contains the correction revision numbers for each
|
||||
affected branch.
|
||||
|
||||
Branch/path Revision
|
||||
- -------------------------------------------------------------------------
|
||||
stable/12 r369143
|
||||
releng/12.2 r369171
|
||||
releng/12.1 r369162
|
||||
stable/11/ r369144
|
||||
releng/11.4/ r369153
|
||||
- -------------------------------------------------------------------------
|
||||
|
||||
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 hash:
|
||||
|
||||
<URL:https://cgit.freebsd.org/src/commit/?id=NNNNNN>
|
||||
|
||||
VII. References
|
||||
|
||||
The latest revision of this advisory is available at
|
||||
<URL:https://security.FreeBSD.org/advisories/FreeBSD-EN-21:01.tzdata.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAEBCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbfZfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cKOpA//Urdpqngx7TTrUYuIFijatPi+MWNWEgW04TPXfa7Vmp5bPFC/fJGJ0o2u
|
||||
lMUVwodrlfX5GUvPENwC/xVVxlzGCX4ljpFbocJIBWczA6LQ+P0u4ibdgSWuh9IS
|
||||
4Aj/MFrd6b+Ui7JY6LF+g0n9M6Tcprui9ZVef7AmcEAOcKQEdIA/kNEfOSnlBy8t
|
||||
HgSVQOmVRbsWYN9B7ZfrsztaiPzFwLfm4Wu62CyrN7H1uSGve9JLrz56W1t3t7u+
|
||||
pKaemOZM6g1efHWVYHUIJh7A7KPSNaLHY3tuQ5Sw6KetST9PCrGwwWVyn+0Cirwp
|
||||
kL/1tjBAB31hsBNJxpvw6NSAazsUfMmKwmtaO9+Gy11ay5neCD2CPUNLCIa7KbjC
|
||||
XT1PcrNnkodID0xdnNGy77toZwbjN81ADurLc+O63FycVugENB81ZtSJWTW7teIL
|
||||
sIfh4A6yf+0szPU9/TIOZx9Qhnp2+Az2C39bgqmeWiv4SwTJnxvYZ6gqGaimdHtX
|
||||
kIozG96X7qyBD4y1Zm45QRrABmb+3AbF1PyCj3pq1re/GpqFlm8ADog3VWE6FaWn
|
||||
f/TlgtQtbknMcnWtpqXlvajWFa6vvq/2o7M7TRGPInQr0SA4gk5K6U9OQtrdKRGe
|
||||
QugdkOMBRuJt1+RO/XAgtcTDpV7CI8QncCONWOItPq4+n5J7PyU=
|
||||
=irIL
|
||||
-----END PGP SIGNATURE-----
|
129
website/static/security/advisories/FreeBSD-EN-21:02.extattr.asc
Normal file
129
website/static/security/advisories/FreeBSD-EN-21:02.extattr.asc
Normal file
|
@ -0,0 +1,129 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-EN-21:02.extattr Errata Notice
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: UFS extattr corruption
|
||||
|
||||
Category: core
|
||||
Module: UFS
|
||||
Announced: 2021-01-29
|
||||
Affects: FreeBSD 11.4
|
||||
Corrected: 2021-01-18 18:54:32 UTC (stable/11, 11.4-STABLE)
|
||||
2021-01-29 19:20:02 UTC (releng/11.4, 11.4-RELEASE-p7)
|
||||
|
||||
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
|
||||
|
||||
Named extended attributes are meta-data associated with vnodes representing
|
||||
files and directories. They exist as "name=value" pairs within a set of
|
||||
namespaces. The UFS filesystem supports extended attributes.
|
||||
|
||||
II. Problem Description
|
||||
|
||||
Under certain conditions FreeBSD 11.x releases may produce a corrupt extattr
|
||||
file, and later attempts to access these extended attributes may result in
|
||||
system misbehavior. For example, lsextattr may spin at 100% CPU until the
|
||||
system is shut down.
|
||||
|
||||
The issue that results in corrupt extattr data is not present in supported
|
||||
FreeBSD 12.x versions.
|
||||
|
||||
III. Impact
|
||||
|
||||
The system may not function as required with extended attributes in use.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
No workaround is available. Systems not using extended attributes are not
|
||||
vulnerable.
|
||||
|
||||
V. Solution
|
||||
|
||||
Upgrade your system to a supported FreeBSD stable or release / security
|
||||
branch (releng) dated after the correction date, and reboot.
|
||||
|
||||
Perform one of the following:
|
||||
|
||||
1) 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
|
||||
# shutdown -r +10min "Rebooting for an errata update"
|
||||
|
||||
2) 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.4]
|
||||
# fetch https://security.FreeBSD.org/patches/EN-12:02/extattr.patch
|
||||
# fetch https://security.FreeBSD.org/patches/EN-12:02/extattr.patch.asc
|
||||
# gpg --verify extattr.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/11/ r369045
|
||||
releng/11.4/ r369154
|
||||
- -------------------------------------------------------------------------
|
||||
|
||||
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://bugs.freebsd.org/bugzilla/show_bug.cgi?id=244089>
|
||||
|
||||
The latest revision of this advisory is available at
|
||||
<URL:https://security.FreeBSD.org/advisories/FreeBSD-EN-21:02.extattr.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAEBCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbiRfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cKxMBAAjpesCOTrkqvjjKZmez8ACSUdaa7IYMLbJpeXW+0IbFVU/IQdK5/aq6r1
|
||||
j/LytAbQ0yDlzfEggCeIWKGkbvaNs0eUVCx/1AOjWdxWePvrlpJ2GQNsHGZeWzBc
|
||||
QUv9LEao0MQF9UGjd0JV81nTE2DT4a2F3WVdfuX2QfkWntfWwpXf3Uf3Cvi6Cpfy
|
||||
rbZTkFeBmFvfgJu13co4re1gur8eYvMyNqcp+FO9OttEr/Fg5D/okQfp+0uZ1uIl
|
||||
80WNZLwgnJG07FBVgcjbbVr/JJJqzVQh3opUa4+6UZaaHoRszs4jE4Mc22C0G4Ma
|
||||
8vtBp4Z/Ndznv04TvTNiAyS3aAe0ums4yotZJBJEuVr1rA1lC6YgRVT9+qfsPcWT
|
||||
SuVM16NS4VGVpN5SruptLbrbTHQARDAAWDbtP1fB8ccvBIonf0hh5AOcKFBxHHY3
|
||||
NoKHLV373zTauvxqy7RKRAtnB2oB0uMT4j0lwJmn7CM1h+lL1GcVy1PTDVQ4mk+N
|
||||
2/I51AcbURjmWqxTTORI6p8CgLsiwPfdsup5T2g/JPu2nc9COWL/WKCytP2pXji3
|
||||
+Lu+SJldxUCx8JiiCSFma7ZG/sjB+B1vOajzULqBWUgTH6YpX8gV78amDHmzRq20
|
||||
2is7fa+63ImVHtCZAIeSs/PGU2v+MDQ6eBNqFTccbgVvINEmMNE=
|
||||
=XIov
|
||||
-----END PGP SIGNATURE-----
|
130
website/static/security/advisories/FreeBSD-EN-21:03.vnet.asc
Normal file
130
website/static/security/advisories/FreeBSD-EN-21:03.vnet.asc
Normal file
|
@ -0,0 +1,130 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-EN-21:03.vnet Errata Notice
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: Panic when destroying VNET and epair simultaneously
|
||||
|
||||
Category: core
|
||||
Module: kernel
|
||||
Announced: 2021-01-29
|
||||
Affects: FreeBSD 12.1 and later.
|
||||
Corrected: 2020-12-15 15:33:28 UTC (stable/12, 12.2-STABLE)
|
||||
2021-01-29 01:20:52 UTC (releng/12.2, 12.2-RELEASE-p3)
|
||||
2021-01-29 01:06:03 UTC (releng/12.1, 12.1-RELEASE-p13)
|
||||
|
||||
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
|
||||
|
||||
VNET permits systems to be configured with multiple instances of the in-kernel
|
||||
network stack.
|
||||
|
||||
The epair(4) interface provides a pair of virtual back-to-back connected
|
||||
Ethernet interfaces.
|
||||
|
||||
II. Problem Description
|
||||
|
||||
Insufficient locking in the kernel meant that destroying an epair and a vnet
|
||||
jail at the same time often resulted in panics.
|
||||
|
||||
III. Impact
|
||||
|
||||
Users with root level access (or the PRIV_NET_IFCREATE privilege) can panic
|
||||
the system.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
The panic can be avoided by ensuring that epair interfaces are fully destroyed
|
||||
before the vnet jails containing them are destroyed.
|
||||
|
||||
Systems not using vnet jails are not affected.
|
||||
|
||||
V. Solution
|
||||
|
||||
Upgrade your system to a supported FreeBSD stable or release / security
|
||||
branch (releng) dated after the correction date and reboot.
|
||||
|
||||
Perform one of the following:
|
||||
|
||||
1) 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
|
||||
# shutdown -r +10min "Rebooting for an errata update"
|
||||
|
||||
2) 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.
|
||||
|
||||
# fetch https://security.FreeBSD.org/patches/EN-21:03/vnet.patch
|
||||
# fetch https://security.FreeBSD.org/patches/EN-21:03/vnet.patch.asc
|
||||
# gpg --verify vnet.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/12/ r368663
|
||||
releng/12.2/ r369172
|
||||
releng/12.1/ r369163
|
||||
- -------------------------------------------------------------------------
|
||||
|
||||
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://bugs.freebsd.org/bugzilla/show_bug.cgi?id=238870>
|
||||
|
||||
The latest revision of this advisory is available at
|
||||
<URL:https://security.FreeBSD.org/advisories/FreeBSD-EN-21:03.vnet.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAEBCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbipfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cKE3Q/+KQ96Grm2zOsWHVAl5Oz2TBdc7nGkIYSk59zFcmVMqduvKSjiJ3S1yLdX
|
||||
NsPm3KyFYeU7L/QM9Owsk1DTSnRrlwhbcM3/x+662bcgP1RWe3XL6n9fQ2V5eESO
|
||||
9wAKtwrkE5btGxp6WLNAZ1Ximb1rKtOi4hqLK1Rhqhl93ecw7gyp+Qs6ukj41cnT
|
||||
8+9AwHjvzYokrUDP7lIsKMQ4C29Fw4o2/0RwCCEmLlGRWLOWGM910RjgaFat02Gi
|
||||
nOLXXlI9mSApthMnlTun4cSn+rbzawyTXD8AIa/kwEd00yDej4IceBlqWXot8Sjw
|
||||
aXqJuix5qs0aVJcrQ2g9bkytnSMeO79EpCLyy/PDMJ1NUcQG8oaN/EcxNjb/U9p2
|
||||
sbjWSf4t1leTl76TWsGsNAWHkjUwMPYHDstG4jsRv+Y+m4sSWa6gYYitaOtK4paO
|
||||
wDDqpWHFJXOCEIrL3+HJcwOWr4hxhmZFgKNXeZN6l5WCKY/Xqjxqt7zBSpixiz01
|
||||
VEn3uNs1ePuEA80Ae+D8v4yzjjfuE5/MDfEsoaxtP6dalNtJlIaFhVgZYcsxpOfK
|
||||
xKC8dzdnEyq970+ZW/2ESYBxGTcnVQMxASI73QYuaKbRkcVqgW6XjHJHh+0tNLkV
|
||||
sPhgxy/eOkbsu9qcIOn+tTbNTo3CjW0/ZmdE0YX9XItgbGHFQvg=
|
||||
=1ekp
|
||||
-----END PGP SIGNATURE-----
|
130
website/static/security/advisories/FreeBSD-EN-21:04.zfs.asc
Normal file
130
website/static/security/advisories/FreeBSD-EN-21:04.zfs.asc
Normal file
|
@ -0,0 +1,130 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-EN-21:04.zfs Errata Notice
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: zfs recv fails to propagate snapshot deletion
|
||||
|
||||
Category: core
|
||||
Module: zfs
|
||||
Announced: 2021-01-29
|
||||
Affects: FreeBSD 12.2
|
||||
Corrected: 2020-12-01 08:15:18 UTC (stable/12, 12.2-STABLE)
|
||||
2021-01-29 01:20:55 UTC (releng/12.2, 12.2-RELEASE-p3)
|
||||
|
||||
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
|
||||
|
||||
The zfs send/receive commands are used to efficiently copy datasets from one
|
||||
location to another. With the -i or -I flags, zfs send can incrementally
|
||||
update an already-copied dataset. When using the -R flag with zfs send and the
|
||||
- -F flag with zfs receive, zfs receive will delete any snapshots on the
|
||||
destination that have already been deleted on the source.
|
||||
|
||||
II. Problem Description
|
||||
|
||||
A regression in FreeBSD 12.2 causes zfs receive to fail to delete snapshots
|
||||
that have been deleted on the source side.
|
||||
|
||||
III. Impact
|
||||
|
||||
Backup and replication systems based on ZFS send/receive that manage snapshots
|
||||
solely on the source side will fail to delete snapshots on the destination
|
||||
side. This may lead to out-of-space conditions on the destination.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
Errant snapshots can be manually removed from the destination with "zfs destroy".
|
||||
|
||||
Backup and replication systems that don't use the -R flag with zfs send will be
|
||||
unaffected. For example, sysutils/zrepl is unaffected.
|
||||
|
||||
V. Solution
|
||||
|
||||
Upgrade your system to a supported FreeBSD stable or release / security
|
||||
branch (releng) dated after the correction date.
|
||||
|
||||
Perform one of the following:
|
||||
|
||||
1) 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
|
||||
|
||||
2) 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.
|
||||
|
||||
# fetch https://security.FreeBSD.org/patches/EN-21:04/zfs.patch
|
||||
# fetch https://security.FreeBSD.org/patches/EN-21:04/zfs.patch.asc
|
||||
# gpg --verify zfs.patch.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 all daemons that link directly to libzfs.so. A restart is not required
|
||||
for daemons that invoke the zfs executable.
|
||||
|
||||
VI. Correction details
|
||||
|
||||
The following list contains the correction revision numbers for each
|
||||
affected branch.
|
||||
|
||||
Branch/path Revision
|
||||
- -------------------------------------------------------------------------
|
||||
stable/12/ r368233
|
||||
releng/12.2/ r369173
|
||||
- -------------------------------------------------------------------------
|
||||
|
||||
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://bugs.freebsd.org/bugzilla/show_bug.cgi?id=249438>
|
||||
|
||||
The latest revision of this advisory is available at
|
||||
<URL:https://security.FreeBSD.org/advisories/FreeBSD-EN-21:04.zfs.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAEBCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbipfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cJhhw//ajaGQV4/Ln4SmgsyYS01De9bXSI26dBcZlfGDUDL4l/W4qF1KnsTuPXx
|
||||
ubGoFDjAArT+AzAoTddQeKuty8VPR8UUCQfONgdWUvjlSZ3k1iLa6pTR/BHxSyZ3
|
||||
rh7olc8wSt13JBOoafCjGkuzRNLtz7oqP0qrGB/aKSbU3IzCW8fHSFnIFVaRK/Nh
|
||||
Zr9Lisp4mIBgBmAY3Oof50ONPrjoDEYff+G+52LSUSMIwGPVmEqFz1qrSzQ+SFO0
|
||||
kylegth1sBeEgPQZAuyXX6liJpsL/AEdYQvosykmBw3DGQqt9glo+hl6CU7/g2dn
|
||||
iA8O7tO0zgaHtWbAUQYdtHJKeqa5UbaDRKeDw3aXm6TwHmZN7BfQz6SWRK2QOhcc
|
||||
btn5yP6QhbpTFmWRkWtSehn+eISolDF4iCG9St664xpNV7l0AzSXm8saVrR2/Eix
|
||||
IPCK2nyhddyDyVCkkSaZw8rris5De8gAGsv0K+nvJqYhVMdbIyTnU62UzHrgPPXS
|
||||
kAe0Z/FnPmcQ7GXN/dSIzd17WMqKwGgsHMbLFw/BMP+kaM++mMY7ZdyPyx1gapB+
|
||||
qzvRhFoNKpNVGMaMK/y+BPB2Ak3OHj6lqPFptjd9HNlszVYuZ3Od25oQBO0dupQf
|
||||
jsTSler1ShPYyOwG8QE0sXjpMYVZhFgsZXiZVUrACkfunuDnXtI=
|
||||
=fhrM
|
||||
-----END PGP SIGNATURE-----
|
|
@ -0,0 +1,125 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-EN-21:05.libatomic Errata Notice
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: Addition of atomic and bswap functions to libcompiler_rt
|
||||
|
||||
Category: core
|
||||
Module: libcompiler_rt
|
||||
Announced: 2021-01-29
|
||||
Affects: FreeBSD 11.4
|
||||
Corrected: 2020-09-12 16:33:05 UTC (stable/11, 11.4-STABLE)
|
||||
2021-01-29 00:20:06 UTC (releng/11.4, 11.4-RELEASE-p7)
|
||||
|
||||
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
|
||||
|
||||
libcompiler_rt is a simple library that provides an implementation of low-level
|
||||
target-specific functionality required by the Clang compiler.
|
||||
|
||||
II. Problem Description
|
||||
|
||||
The FreeBSD build system does not include all source files of libcompiler_rt.
|
||||
In particular, it misses the atomic.c file, which implements atomic memory
|
||||
routines for the i386 architecture.
|
||||
|
||||
III. Impact
|
||||
|
||||
When compiling software that makes use of atomic functions, as well as __bswap*
|
||||
functions, the compiler emits calls to them expecting that these will be
|
||||
available from libcompiler_rt. Due to this, the linker fails to resolve
|
||||
mentioned functions and the build fails.
|
||||
|
||||
The problem occurs only when targeting the i386 platform.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
The problem can be worked around by using GCC compiler to build the software.
|
||||
|
||||
V. Solution
|
||||
|
||||
Upgrade your system to a supported FreeBSD stable or release / security
|
||||
branch (releng) dated after the correction date.
|
||||
|
||||
Perform one of the following:
|
||||
|
||||
1) 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
|
||||
|
||||
2) 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.
|
||||
|
||||
# fetch https://security.FreeBSD.org/patches/EN-21:05/libatomic.patch
|
||||
# fetch https://security.FreeBSD.org/patches/EN-21:05/libatomic.patch.asc
|
||||
# gpg --verify libatomic.patch.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 all daemons that use the library, or reboot the system.
|
||||
|
||||
VI. Correction details
|
||||
|
||||
The following list contains the correction revision numbers for each
|
||||
affected branch.
|
||||
|
||||
Branch/path Revision
|
||||
- -------------------------------------------------------------------------
|
||||
stable/11/ r365661
|
||||
releng/11.4/ r369155
|
||||
- -------------------------------------------------------------------------
|
||||
|
||||
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-21:05.libatomic.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAEBCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbipfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cKteBAAicm8nXlOWYeIu2qcgqKVEhWNwleLdfnAGPcs0ALuUEnSGZ2DIfsdl4J0
|
||||
eTOeIJC9ELpHrSoaAtlrM7huEkdtMDRHrLWfSlW7Zev3B7ZQ+v+GsdYAw1h86Erf
|
||||
uNt3iCvfhltDGVHVb0bGHQw2biIn9UD36CVOC9WqMhubLU/sjEy4FbjwRvVWUyRc
|
||||
UtR+WUf6W8IZnd3iJOlF/YnxDcEWclMPFnEdKMgBByl0dSoVuwIQfwuWm6Wl4WjA
|
||||
p1KUs+l/AUn5IJB7U7dLmB5tIGgvElzONwPb9S3M1BQaLDjS2+PLrE6/pxSpDNHS
|
||||
y/Oo2652ZaGG1OWAGzemKinpllLelkywPjbQwEEkjelqPnPoVMWzjM4UwmF0S5gj
|
||||
hnlB17BvH5qomMFnAiyVQO9cH85G4sKcKgVQSMU/gRzlrSMyqZ5ImLfltMOJi27H
|
||||
U3SQ36LljP6cu55bDlswBmAe6Ria748d5z4efSs/DGfgeFSYlSYF7zTLZtbw8wcP
|
||||
bXjeDVTMcAEGGjDFWjy2hU2zUhgQVBOSb1+IB3ziOHizUdOe9U5NaEZSoTA/S4rp
|
||||
Hrf8P8LKN5BgWh6j+jXI18RpwGtRNbL4Ev0wP0iG7SXth8cRkjymzq4qcGsIBMh/
|
||||
GjyNqC1CzzvQz4YDf6GqkOZWE3kAzUM+iyGyYpZIDdCx32Ir/e4=
|
||||
=RTBx
|
||||
-----END PGP SIGNATURE-----
|
|
@ -0,0 +1,150 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-SA-21:01.fsdisclosure Security Advisory
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: Uninitialized kernel stack leaks in several file systems
|
||||
|
||||
Category: core
|
||||
Module: fs
|
||||
Announced: 2021-01-29
|
||||
Credits: Syed Faraz Abrar
|
||||
Affects: All supported versions of FreeBSD.
|
||||
Corrected: 2021-01-06 14:58:41 UTC (stable/12, 12.2-STABLE)
|
||||
2021-01-29 01:20:59 UTC (releng/12.2, 12.2-RELEASE-p3)
|
||||
2021-01-29 01:06:09 UTC (releng/12.1, 12.1-RELEASE-p13)
|
||||
2021-01-18 19:16:24 UTC (stable/11, 11.4-STABLE)
|
||||
2021-01-29 00:20:09 UTC (releng/11.4, 11.4-RELEASE-p7)
|
||||
CVE Name: CVE-2020-25578, CVE-2020-25579
|
||||
|
||||
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 FreeBSD kernel exports file system directory entries to userspace
|
||||
using the generic "dirent" structure. Individual file systems implement
|
||||
VOP_READDIR to convert from the file system's internal directory entry
|
||||
layout to the generic form. dirent structures can be fetched from
|
||||
userspace using the getdirentries(2) system call.
|
||||
|
||||
II. Problem Description
|
||||
|
||||
Several file systems were not properly initializing the d_off field of
|
||||
the dirent structures returned by VOP_READDIR. In particular, tmpfs(5),
|
||||
smbfs(5), autofs(5) and mqueuefs(5) were failing to do so. As a result,
|
||||
eight uninitialized kernel stack bytes may be leaked to userspace by
|
||||
these file systems. This problem is not present in FreeBSD 11.
|
||||
|
||||
Additionally, msdosfs(5) was failing to zero-fill a pair of padding
|
||||
fields in the dirent structure, resulting in a leak of three
|
||||
uninitialized bytes.
|
||||
|
||||
III. Impact
|
||||
|
||||
Kernel stack disclosures may leak sensitive information which could be
|
||||
used to compromise the security of the system.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
Systems that do not have any of the affected file systems mounted are
|
||||
not affected. To trigger the leaks, an unprivileged user must have read
|
||||
access to a directory belonging to one of the mounted file systems.
|
||||
|
||||
V. Solution
|
||||
|
||||
Upgrade your vulnerable system to a supported FreeBSD stable or
|
||||
release / security branch (releng) dated after the correction date,
|
||||
and reboot.
|
||||
|
||||
Perform one of the following:
|
||||
|
||||
1) 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
|
||||
# shutdown -r +10min "Rebooting for a security update"
|
||||
|
||||
2) 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 12.x]
|
||||
# fetch https://security.FreeBSD.org/patches/SA-21:01/fsdisclosure.12.patch
|
||||
# fetch https://security.FreeBSD.org/patches/SA-21:01/fsdisclosure.12.patch.asc
|
||||
# gpg --verify fsdisclosure.12.patch.asc
|
||||
|
||||
[FreeBSD 11.x]
|
||||
# fetch https://security.FreeBSD.org/patches/SA-21:01/fsdisclosure.11.patch
|
||||
# fetch https://security.FreeBSD.org/patches/SA-21:01/fsdisclosure.11.patch.asc
|
||||
# gpg --verify fsdisclosure.11.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/12/ r368969
|
||||
releng/12.2/ r369175
|
||||
releng/12.1/ r369165
|
||||
stable/11/ r369047
|
||||
releng/11.4/ r369156
|
||||
- -------------------------------------------------------------------------
|
||||
|
||||
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-2020-25578>
|
||||
|
||||
<URL:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-25579>
|
||||
|
||||
The latest revision of this advisory is available at
|
||||
<URL:https://security.FreeBSD.org/advisories/FreeBSD-SA-21:01.fsdisclosure.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAEBCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbjNfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cJr9xAAkZz7B1xlb66yVYXmyIo8eFf2ZyYPXxoH9hIxx1N7PxY6l9MeU9xzcYrf
|
||||
tOYtsWyPxx+M+g0KZc2Q846zu3JySSBkGKT1Kx3aqMmfEqWMa6b2u/wM+rG/8NjR
|
||||
qzsU9SfnzgcBg0tu4m55en+7muuiO3JopCbQDdTSl0EgOFkMI6cuMXc2lm9BAEKj
|
||||
zpmKFbelSCIUjISpLASJzNKRfQV1UajpgyM/tWYSrlQwaejNkFOmBO1ylLBbigBo
|
||||
bqH5xCsttGGUC91QmsEdcrF3pSNuHEtW5nT8sbAlm6ue8bjY9AGhEB1fkV877KDG
|
||||
otN3sPe367uQA1AHWCq3qPseTgAV9pDW4Mctxi5VSz0P3tUzG+hqojtn+mDAvFob
|
||||
DnFWFJnMZC6mueunp555LXlgFzA79Vberjo15240kEvaf4B+PiCqVLr9baK/2KyW
|
||||
EEj3pn/ciGq/wBn5ZPoCDVk0hbcfVNxaXytHLDBZ7l/ti7ZC08SRyaPdhG8Tblbx
|
||||
ha/6+/viGbBHktuTU5Vz48cHja9RnDq0EUiTmplinUDhyouVyG4i2Yrn3anMnhd5
|
||||
atULlylJlEPGq1WNH0A7yiKqQa6Bu4OFMdJ69YIYskcn3FC2vjz0LpRb+soFOIAH
|
||||
2/o0UAMup9buG8CbPVLoCRPyPrEw0liaUJEUlxTVPDc3AJGM0xM=
|
||||
=gD1K
|
||||
-----END PGP SIGNATURE-----
|
142
website/static/security/advisories/FreeBSD-SA-21:02.xenoom.asc
Normal file
142
website/static/security/advisories/FreeBSD-SA-21:02.xenoom.asc
Normal file
|
@ -0,0 +1,142 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-SA-21:02.xenoom Security Advisory
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: Xen guests can triger backend Out Of Memory
|
||||
|
||||
Category: contrib
|
||||
Module: Xen
|
||||
Announced: 2021-01-29
|
||||
Credits: See Xen XSA-349 for details
|
||||
Affects: All supported versions of FreeBSD.
|
||||
Corrected: 2021-01-18 16:26:36 UTC (stable/12, 12.2-STABLE)
|
||||
2021-01-29 01:21:04 UTC (releng/12.2, 12.2-RELEASE-p3)
|
||||
2021-01-29 01:06:16 UTC (releng/12.1, 12.1-RELEASE-p13)
|
||||
2021-01-21 09:14:50 UTC (stable/11, 11.4-STABLE)
|
||||
2021-01-29 00:20:16 UTC (releng/11.4, 11.4-RELEASE-p7)
|
||||
CVE Name: CVE-2020-29568
|
||||
|
||||
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
|
||||
|
||||
Xen is a type-1 hypervisor which supports FreeBSD as a Dom0 (or host
|
||||
domain).
|
||||
|
||||
II. Problem Description
|
||||
|
||||
Some OSes (including Linux, FreeBSD, and NetBSD) are processing watch
|
||||
events using a single thread. If the events are received faster than
|
||||
the thread is able to handle, they will get queued.
|
||||
|
||||
As the queue is unbound, a guest may be able to trigger a OOM in
|
||||
the backend.
|
||||
|
||||
III. Impact
|
||||
|
||||
A malicious guest can trigger an OOM in backends.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
No workaround is available. FreeBSD systems not using Xen are not
|
||||
affected.
|
||||
|
||||
V. Solution
|
||||
|
||||
Upgrade your vulnerable system to a supported FreeBSD stable or
|
||||
release / security branch (releng) dated after the correction date,
|
||||
and reboot.
|
||||
|
||||
Perform one of the following:
|
||||
|
||||
1) 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
|
||||
# shutdown -r +10min "Rebooting for a security update"
|
||||
|
||||
2) 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 12.x]
|
||||
# fetch https://security.FreeBSD.org/patches/SA-21:02/xenoom.12.patch
|
||||
# fetch https://security.FreeBSD.org/patches/SA-21:02/xenoom.12.patch.asc
|
||||
# gpg --verify xenoom.12.patch.asc
|
||||
|
||||
[FreeBSD 11.x]
|
||||
# fetch https://security.FreeBSD.org/patches/SA-21:02/xenoom.11.patch
|
||||
# fetch https://security.FreeBSD.org/patches/SA-21:02/xenoom.11.patch.asc
|
||||
# gpg --verify xenoom.11.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/12/ r369038
|
||||
releng/12.2/ r369177
|
||||
releng/12.1/ r369167
|
||||
stable/11/ r369072
|
||||
releng/11.4/ r369158
|
||||
- -------------------------------------------------------------------------
|
||||
|
||||
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://xenbits.xen.org/xsa/advisory-349.html>
|
||||
|
||||
<URL:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-29568>
|
||||
|
||||
The latest revision of this advisory is available at
|
||||
<URL:https://security.FreeBSD.org/advisories/FreeBSD-SA-21:02.xenoom.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAEBCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbjNfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cJjmhAAloDel7j9rgyDK8Ozk5wPJQlUM/1Ddc4e5Q5vdzT29mNdWKfXjH5SEkGq
|
||||
Jx7w4fUronf8vsXn+bNXwn1u5PWGVTVX/Y4ljQ4JVwJ+NdxhxTuhNsbg7j2AZmdO
|
||||
PsfI+eFX1xq8wr3oDUl3GTHHcUI1Ol259tsOgJE7ISriazgbRk8/QVowMgS3jdHA
|
||||
OYJS8ADFWSO6d4TC2B5pvgC6NAiZjhgTDtjxzTnaWoUb0157JyhRh3Z2FQTBxoxU
|
||||
3OQcTj7x7KBtbsiAI/Iq8Qu7JXyxtscVQfbXsk4Jt1uOskgsr8n9F+UGiP+GRIKb
|
||||
0IsgNUlsPavINlNJjAwQWHtB8VJqH7LpG9t3/EMizUXjZAuRLxEjAFiHV8ju1U++
|
||||
O9Xf9nB9auVrBn1WMYgH23bZ5D15W1HosEywifBw64R7CLDliD/HpJ3QaDEe3lCn
|
||||
pB0jgxuoE5RCbTppgUZM7tLUrtwgih+lOiZcLcA5xS9hQo8TWBLIJNBf5rRjJA6q
|
||||
/3vh5lOv/w8AHyBgA5395QIkkgw9dxy2o+LbtuVhdD/NbLX4GnNVMkQDsTF79PMT
|
||||
8rl0Zn6Ldo0ypHAwPAVHektl+izuMftNQuQXSbEjkw/Xr1VCjIjllJET3K2e9X6z
|
||||
4nPmq6t/0kuHWYSSDQAKdq/8Dosn3HLw1uQdst4ka7wf1Eon7Ow=
|
||||
=3L3L
|
||||
-----END PGP SIGNATURE-----
|
1498
website/static/security/patches/EN-21:01/tzdata-2021a.patch
Normal file
1498
website/static/security/patches/EN-21:01/tzdata-2021a.patch
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,18 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAABCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbgVfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cL0kQ//RYNiBRCzjAawttj9Wz6ryKf1rTERp1FJ17NpLRzRHp/WnjTKZ4uyEqGn
|
||||
pb4VWPbhVjiiCCyA0zvwGAOF5Yviv1UR79i5U+G0ErxVPdQKapqoQ240CY09eObG
|
||||
rqKGLJIhdXIyEEPK9YrYYDUb0kAwOzpnvt3xgPH1sph0QT8fga0bffnr2sDthDu7
|
||||
b5NOKMA51JkB1G2tlevHGUXrTnh+gZntXApSYVZ8/c8jKqnzAdcm9Co80hb8oVuC
|
||||
yWwEM7s2v/HTF0NUPPIz3PfAETLWCzVHGb0ZjXdZO6rd1BV6Zm1TIZ4wRoNOzl5n
|
||||
4PQGmEQckxojDcDIUImF9EDS+8SxxnP3cDUyN3vIqmTKUkVjAIStqqq5AfFZBs0+
|
||||
CjvkX9v0LgaCNHfPPknUuldeORO4YLTc/6dj4Ern7gocHRE9/feBcHdV58XGQLB/
|
||||
jI92wckBD0G738TCKQg74rX21A3564h/cbThmsGUP05C2D1vW+jT+v9DJy15LpG6
|
||||
CIF9zU8IwLFKlzI28Oc8vLekgU/6E8z7V0+ObmpboRIVJTXetkRCN61SyIKSnJT+
|
||||
nZgIgvd22jTFXJh6j18SmQS6cN2kEq22AtYLimNKEgrsGcT7uMrWyTJQ6vJiooqc
|
||||
a5txbMB2R4uRNv810IpMl0li2J0kshNBsnmsv0UxNQcAVyORBm8=
|
||||
=ynES
|
||||
-----END PGP SIGNATURE-----
|
11
website/static/security/patches/EN-21:02/extattr.patch
Normal file
11
website/static/security/patches/EN-21:02/extattr.patch
Normal file
|
@ -0,0 +1,11 @@
|
|||
--- sys/ufs/ffs/ffs_vnops.c.orig
|
||||
+++ sys/ufs/ffs/ffs_vnops.c
|
||||
@@ -1663,7 +1663,7 @@
|
||||
*p++ = ap->a_attrnamespace;
|
||||
*p++ = eapad2;
|
||||
*p++ = strlen(ap->a_name);
|
||||
- strcpy(p, ap->a_name);
|
||||
+ memcpy(p, ap->a_name, strlen(ap->a_name));
|
||||
p += strlen(ap->a_name);
|
||||
bzero(p, eapad1);
|
||||
p += eapad1;
|
18
website/static/security/patches/EN-21:02/extattr.patch.asc
Normal file
18
website/static/security/patches/EN-21:02/extattr.patch.asc
Normal file
|
@ -0,0 +1,18 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAABCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbilfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cLRwQ//cPFjEPuSDNSMa6NcQnDKo7pZ+0jYON5t8CSMj9CqxKs3V/wa6F9rB78l
|
||||
px6lkasBBFClmXH/lnVBrg8KTTD699Q8q7SHbydC7cG3XVB73QJnDjJrm6XgdcFt
|
||||
RKF546+h50JQBXqlW5JRpCCzqMzqzdqa5eFGjJfPI16TjbAuz8ywOez1PHTuTmuS
|
||||
lSJaT+UN78s5tD2D2WgQzzTG/o8umuJXisfCGFLsK7RI3p7c9N8QcrIGikrose9R
|
||||
yu/NFpfs/5iIE40VtTb6J/4PcOBlzfdjDv4EgAyRKzhTkFxPDgh3cgfh/gtJg9CV
|
||||
AZtf5K0qOufD79l1PA25znU3nf761VFQIyPv/sIT5nuhITm1WkPtV4mvHlN+bb9C
|
||||
tVF4HkLx6raghE5XnIAg0cFndVlS+zwAmzety/75W0h0AUqofrn4jbdcmeFGogG+
|
||||
BAtaPE39xWGJMT4R9zXMnF+mojX2GOqSKOyfshBrolsnkT9oEQQAVGb0N3ZxRT/2
|
||||
tmvV2Q01d5NORvtBlD0yvJ/qkihiF0UrfG+I9GJ2+gMjibpU/iZik8y0msboBYIB
|
||||
2zjf3DdNZY/n+hSN8cxN32maU0ZYl+he394rmMt0Lj1Ff7EuUz5RsKtzHoYPHoWm
|
||||
mTnXK/PUrJTEdvYxUzMbOsfM41Pqq476XYl/7B6bU4ZnSNlTxNM=
|
||||
=ntJx
|
||||
-----END PGP SIGNATURE-----
|
291
website/static/security/patches/EN-21:03/vnet.patch
Normal file
291
website/static/security/patches/EN-21:03/vnet.patch
Normal file
|
@ -0,0 +1,291 @@
|
|||
--- sys/net/if.c.orig
|
||||
+++ sys/net/if.c
|
||||
@@ -274,6 +274,8 @@
|
||||
static void if_delgroups(struct ifnet *);
|
||||
static void if_attach_internal(struct ifnet *, int, struct if_clone *);
|
||||
static int if_detach_internal(struct ifnet *, int, struct if_clone **);
|
||||
+static void if_link_ifnet(struct ifnet *);
|
||||
+static bool if_unlink_ifnet(struct ifnet *, bool);
|
||||
#ifdef VIMAGE
|
||||
static void if_vmove(struct ifnet *, struct vnet *);
|
||||
#endif
|
||||
@@ -305,12 +307,8 @@
|
||||
|
||||
/*
|
||||
* The global network interface list (V_ifnet) and related state (such as
|
||||
- * if_index, if_indexlim, and ifindex_table) are protected by an sxlock and
|
||||
- * an rwlock. Either may be acquired shared to stablize the list, but both
|
||||
- * must be acquired writable to modify the list. This model allows us to
|
||||
- * both stablize the interface list during interrupt thread processing, but
|
||||
- * also to stablize it over long-running ioctls, without introducing priority
|
||||
- * inversions and deadlocks.
|
||||
+ * if_index, if_indexlim, and ifindex_table) are protected by an sxlock.
|
||||
+ * This may be acquired to stabilise the list, or we may rely on NET_EPOCH.
|
||||
*/
|
||||
struct rwlock ifnet_rwlock;
|
||||
RW_SYSINIT_FLAGS(ifnet_rw, &ifnet_rwlock, "ifnet_rw", RW_RECURSE);
|
||||
@@ -317,6 +315,9 @@
|
||||
struct sx ifnet_sxlock;
|
||||
SX_SYSINIT_FLAGS(ifnet_sx, &ifnet_sxlock, "ifnet_sx", SX_RECURSE);
|
||||
|
||||
+struct sx ifnet_detach_sxlock;
|
||||
+SX_SYSINIT(ifnet_detach, &ifnet_detach_sxlock, "ifnet_detach_sx");
|
||||
+
|
||||
/*
|
||||
* The allocation of network interfaces is a rather non-atomic affair; we
|
||||
* need to select an index before we are ready to expose the interface for
|
||||
@@ -476,17 +477,87 @@
|
||||
}
|
||||
VNET_SYSUNINIT(vnet_if_uninit, SI_SUB_INIT_IF, SI_ORDER_FIRST,
|
||||
vnet_if_uninit, NULL);
|
||||
+#endif
|
||||
|
||||
static void
|
||||
+if_link_ifnet(struct ifnet *ifp)
|
||||
+{
|
||||
+
|
||||
+ IFNET_WLOCK();
|
||||
+ CK_STAILQ_INSERT_TAIL(&V_ifnet, ifp, if_link);
|
||||
+#ifdef VIMAGE
|
||||
+ curvnet->vnet_ifcnt++;
|
||||
+#endif
|
||||
+ IFNET_WUNLOCK();
|
||||
+}
|
||||
+
|
||||
+static bool
|
||||
+if_unlink_ifnet(struct ifnet *ifp, bool vmove)
|
||||
+{
|
||||
+ struct ifnet *iter;
|
||||
+ int found = 0;
|
||||
+
|
||||
+ IFNET_WLOCK();
|
||||
+ CK_STAILQ_FOREACH(iter, &V_ifnet, if_link)
|
||||
+ if (iter == ifp) {
|
||||
+ CK_STAILQ_REMOVE(&V_ifnet, ifp, ifnet, if_link);
|
||||
+ if (!vmove)
|
||||
+ ifp->if_flags |= IFF_DYING;
|
||||
+ found = 1;
|
||||
+ break;
|
||||
+ }
|
||||
+#ifdef VIMAGE
|
||||
+ curvnet->vnet_ifcnt--;
|
||||
+#endif
|
||||
+ IFNET_WUNLOCK();
|
||||
+
|
||||
+ return (found);
|
||||
+}
|
||||
+
|
||||
+#ifdef VIMAGE
|
||||
+static void
|
||||
vnet_if_return(const void *unused __unused)
|
||||
{
|
||||
struct ifnet *ifp, *nifp;
|
||||
+ struct ifnet **pending;
|
||||
+ int found, i;
|
||||
|
||||
+ i = 0;
|
||||
+
|
||||
+ /*
|
||||
+ * We need to protect our access to the V_ifnet tailq. Ordinarily we'd
|
||||
+ * enter NET_EPOCH, but that's not possible, because if_vmove() calls
|
||||
+ * if_detach_internal(), which waits for NET_EPOCH callbacks to
|
||||
+ * complete. We can't do that from within NET_EPOCH.
|
||||
+ *
|
||||
+ * However, we can also use the IFNET_xLOCK, which is the V_ifnet
|
||||
+ * read/write lock. We cannot hold the lock as we call if_vmove()
|
||||
+ * though, as that presents LOR w.r.t ifnet_sx, in_multi_sx and iflib
|
||||
+ * ctx lock.
|
||||
+ */
|
||||
+ IFNET_WLOCK();
|
||||
+
|
||||
+ pending = malloc(sizeof(struct ifnet *) * curvnet->vnet_ifcnt,
|
||||
+ M_IFNET, M_WAITOK | M_ZERO);
|
||||
+
|
||||
/* Return all inherited interfaces to their parent vnets. */
|
||||
CK_STAILQ_FOREACH_SAFE(ifp, &V_ifnet, if_link, nifp) {
|
||||
- if (ifp->if_home_vnet != ifp->if_vnet)
|
||||
- if_vmove(ifp, ifp->if_home_vnet);
|
||||
+ if (ifp->if_home_vnet != ifp->if_vnet) {
|
||||
+ found = if_unlink_ifnet(ifp, true);
|
||||
+ MPASS(found);
|
||||
+
|
||||
+ pending[i++] = ifp;
|
||||
+ }
|
||||
}
|
||||
+ IFNET_WUNLOCK();
|
||||
+
|
||||
+ for (int j = 0; j < i; j++) {
|
||||
+ sx_xlock(&ifnet_detach_sxlock);
|
||||
+ if_vmove(pending[j], pending[j]->if_home_vnet);
|
||||
+ sx_xunlock(&ifnet_detach_sxlock);
|
||||
+ }
|
||||
+
|
||||
+ free(pending, M_IFNET);
|
||||
}
|
||||
VNET_SYSUNINIT(vnet_if_return, SI_SUB_VNET_DONE, SI_ORDER_ANY,
|
||||
vnet_if_return, NULL);
|
||||
@@ -894,12 +965,7 @@
|
||||
}
|
||||
#endif
|
||||
|
||||
- IFNET_WLOCK();
|
||||
- CK_STAILQ_INSERT_TAIL(&V_ifnet, ifp, if_link);
|
||||
-#ifdef VIMAGE
|
||||
- curvnet->vnet_ifcnt++;
|
||||
-#endif
|
||||
- IFNET_WUNLOCK();
|
||||
+ if_link_ifnet(ifp);
|
||||
|
||||
if (domain_init_status >= 2)
|
||||
if_attachdomain1(ifp);
|
||||
@@ -1037,9 +1103,15 @@
|
||||
void
|
||||
if_detach(struct ifnet *ifp)
|
||||
{
|
||||
+ bool found;
|
||||
|
||||
CURVNET_SET_QUIET(ifp->if_vnet);
|
||||
- if_detach_internal(ifp, 0, NULL);
|
||||
+ found = if_unlink_ifnet(ifp, false);
|
||||
+ if (found) {
|
||||
+ sx_slock(&ifnet_detach_sxlock);
|
||||
+ if_detach_internal(ifp, 0, NULL);
|
||||
+ sx_sunlock(&ifnet_detach_sxlock);
|
||||
+ }
|
||||
CURVNET_RESTORE();
|
||||
}
|
||||
|
||||
@@ -1059,8 +1131,6 @@
|
||||
struct ifaddr *ifa;
|
||||
int i;
|
||||
struct domain *dp;
|
||||
- struct ifnet *iter;
|
||||
- int found = 0;
|
||||
#ifdef VIMAGE
|
||||
int shutdown;
|
||||
|
||||
@@ -1067,39 +1137,11 @@
|
||||
shutdown = (ifp->if_vnet->vnet_state > SI_SUB_VNET &&
|
||||
ifp->if_vnet->vnet_state < SI_SUB_VNET_DONE) ? 1 : 0;
|
||||
#endif
|
||||
- IFNET_WLOCK();
|
||||
- CK_STAILQ_FOREACH(iter, &V_ifnet, if_link)
|
||||
- if (iter == ifp) {
|
||||
- CK_STAILQ_REMOVE(&V_ifnet, ifp, ifnet, if_link);
|
||||
- if (!vmove)
|
||||
- ifp->if_flags |= IFF_DYING;
|
||||
- found = 1;
|
||||
- break;
|
||||
- }
|
||||
- IFNET_WUNLOCK();
|
||||
- if (!found) {
|
||||
- /*
|
||||
- * While we would want to panic here, we cannot
|
||||
- * guarantee that the interface is indeed still on
|
||||
- * the list given we don't hold locks all the way.
|
||||
- */
|
||||
- return (ENOENT);
|
||||
-#if 0
|
||||
- if (vmove)
|
||||
- panic("%s: ifp=%p not on the ifnet tailq %p",
|
||||
- __func__, ifp, &V_ifnet);
|
||||
- else
|
||||
- return; /* XXX this should panic as well? */
|
||||
-#endif
|
||||
- }
|
||||
|
||||
/*
|
||||
* At this point we know the interface still was on the ifnet list
|
||||
* and we removed it so we are in a stable state.
|
||||
*/
|
||||
-#ifdef VIMAGE
|
||||
- curvnet->vnet_ifcnt--;
|
||||
-#endif
|
||||
epoch_wait_preempt(net_epoch_preempt);
|
||||
|
||||
/*
|
||||
@@ -1326,6 +1368,7 @@
|
||||
struct prison *pr;
|
||||
struct ifnet *difp;
|
||||
int shutdown;
|
||||
+ bool found;
|
||||
|
||||
/* Try to find the prison within our visibility. */
|
||||
sx_slock(&allprison_lock);
|
||||
@@ -1362,6 +1405,9 @@
|
||||
}
|
||||
CURVNET_RESTORE();
|
||||
|
||||
+ found = if_unlink_ifnet(ifp, true);
|
||||
+ MPASS(found);
|
||||
+
|
||||
/* Move the interface into the child jail/vnet. */
|
||||
if_vmove(ifp, pr->pr_vnet);
|
||||
|
||||
@@ -1378,7 +1424,8 @@
|
||||
struct prison *pr;
|
||||
struct vnet *vnet_dst;
|
||||
struct ifnet *ifp;
|
||||
- int shutdown;
|
||||
+ int shutdown;
|
||||
+ bool found;
|
||||
|
||||
/* Try to find the prison within our visibility. */
|
||||
sx_slock(&allprison_lock);
|
||||
@@ -1416,6 +1463,8 @@
|
||||
}
|
||||
|
||||
/* Get interface back from child jail/vnet. */
|
||||
+ found = if_unlink_ifnet(ifp, true);
|
||||
+ MPASS(found);
|
||||
if_vmove(ifp, vnet_dst);
|
||||
CURVNET_RESTORE();
|
||||
|
||||
@@ -3100,8 +3149,12 @@
|
||||
goto out_noref;
|
||||
case SIOCIFDESTROY:
|
||||
error = priv_check(td, PRIV_NET_IFDESTROY);
|
||||
- if (error == 0)
|
||||
+
|
||||
+ if (error == 0) {
|
||||
+ sx_slock(&ifnet_detach_sxlock);
|
||||
error = if_clone_destroy(ifr->ifr_name);
|
||||
+ sx_sunlock(&ifnet_detach_sxlock);
|
||||
+ }
|
||||
goto out_noref;
|
||||
|
||||
case SIOCIFGCLONERS:
|
||||
--- sys/net/if_var.h.orig
|
||||
+++ sys/net/if_var.h
|
||||
@@ -569,27 +569,11 @@
|
||||
extern struct rwlock ifnet_rwlock;
|
||||
extern struct sx ifnet_sxlock;
|
||||
|
||||
-#define IFNET_WLOCK() do { \
|
||||
- sx_xlock(&ifnet_sxlock); \
|
||||
- rw_wlock(&ifnet_rwlock); \
|
||||
-} while (0)
|
||||
-
|
||||
-#define IFNET_WUNLOCK() do { \
|
||||
- rw_wunlock(&ifnet_rwlock); \
|
||||
- sx_xunlock(&ifnet_sxlock); \
|
||||
-} while (0)
|
||||
-
|
||||
-/*
|
||||
- * To assert the ifnet lock, you must know not only whether it's for read or
|
||||
- * write, but also whether it was acquired with sleep support or not.
|
||||
- */
|
||||
-#define IFNET_RLOCK_ASSERT() sx_assert(&ifnet_sxlock, SA_SLOCKED)
|
||||
+#define IFNET_WLOCK() sx_xlock(&ifnet_sxlock)
|
||||
+#define IFNET_WUNLOCK() sx_xunlock(&ifnet_sxlock)
|
||||
+#define IFNET_RLOCK_ASSERT() sx_assert(&ifnet_sxlock, SA_SLOCKED)
|
||||
#define IFNET_RLOCK_NOSLEEP_ASSERT() MPASS(in_epoch(net_epoch_preempt))
|
||||
-#define IFNET_WLOCK_ASSERT() do { \
|
||||
- sx_assert(&ifnet_sxlock, SA_XLOCKED); \
|
||||
- rw_assert(&ifnet_rwlock, RA_WLOCKED); \
|
||||
-} while (0)
|
||||
-
|
||||
+#define IFNET_WLOCK_ASSERT() sx_assert(&ifnet_sxlock, SA_XLOCKED)
|
||||
#define IFNET_RLOCK() sx_slock(&ifnet_sxlock)
|
||||
#define IFNET_RLOCK_NOSLEEP() struct epoch_tracker ifnet_rlock_et; epoch_enter_preempt(net_epoch_preempt, &ifnet_rlock_et)
|
||||
#define IFNET_RUNLOCK() sx_sunlock(&ifnet_sxlock)
|
18
website/static/security/patches/EN-21:03/vnet.patch.asc
Normal file
18
website/static/security/patches/EN-21:03/vnet.patch.asc
Normal file
|
@ -0,0 +1,18 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAABCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbipfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cLRyQ//du+e1JRQvV+xth02xPmDbklqvfsH9ge20DeExN/grbrqv1nLkGBP0I1j
|
||||
CnxMMDPsm33fATsxa6HndAcQXDO4bRf0E7qjE+bgC1gJevCrCptXI7LaOgTWrlpP
|
||||
0iszfjqF0DIJhXL7MiFVDYkt5EBvPkvJMBo1q3A7HKG8YKzZHI6EUa6g+yspHip0
|
||||
p4TKVexl7L4ERb0h8hDUIycAPSmK4lNn9SOlErD9mTUUYRp/xvkVdAV53xnuo2aD
|
||||
zt/sqO7lPRP1oiOCp/8D2ZiMbtg6dzOKyw0xhfnsW8a/h0k7nthWKWL+KpyOQVpj
|
||||
QZ/lYnzzqxu93/2cZSuGFpIUw3WKl67IlYNW0qtGsvXeFjpx85AqFyYueg00Wvew
|
||||
jUQk0lONd6k2XkyMS/mYgYXOuadA5uzJwgffRuKNP7aVxXIXM+4PJFleJ86c0q2b
|
||||
qRLUWeWC4l+1oYY+0YHEAzv0VWc+VQilcERgUXezwF40vbUIvc+AhAzUDIO919Yg
|
||||
PBz8vAGiDPSfeveihTtuD9FTugw4oaM6mgxFBSnkrHK6EyNuwMk5kvHjx25rjuzX
|
||||
eqVEE1gUaigGzXoy1FsFpUeaAr4/vZcwwVu9sZ2Oysyknm7c6j6q/kR1JzH8Y8am
|
||||
H0NX4nlccagnfTy5aGPQWPrV8QHAmOYuzw6LltUZxcIMDdLSGH4=
|
||||
=edmV
|
||||
-----END PGP SIGNATURE-----
|
150
website/static/security/patches/EN-21:04/zfs.patch
Normal file
150
website/static/security/patches/EN-21:04/zfs.patch
Normal file
|
@ -0,0 +1,150 @@
|
|||
--- cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c.orig
|
||||
+++ cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c
|
||||
@@ -613,8 +613,8 @@
|
||||
const char *fromsnap;
|
||||
const char *tosnap;
|
||||
boolean_t recursive;
|
||||
- boolean_t verbose;
|
||||
boolean_t replicate;
|
||||
+ boolean_t verbose;
|
||||
|
||||
/*
|
||||
* The header nvlist is of the following format:
|
||||
@@ -848,36 +848,36 @@
|
||||
rv = -1;
|
||||
goto out;
|
||||
}
|
||||
- VERIFY(0 == nvlist_add_uint64(nvfs, "origin",
|
||||
- origin->zfs_dmustats.dds_guid));
|
||||
+ fnvlist_add_uint64(nvfs, "origin",
|
||||
+ origin->zfs_dmustats.dds_guid);
|
||||
}
|
||||
|
||||
/* iterate over props */
|
||||
- VERIFY(0 == nvlist_alloc(&nv, NV_UNIQUE_NAME, 0));
|
||||
+ nv = fnvlist_alloc();
|
||||
send_iterate_prop(zhp, nv);
|
||||
- VERIFY(0 == nvlist_add_nvlist(nvfs, "props", nv));
|
||||
- nvlist_free(nv);
|
||||
+ fnvlist_add_nvlist(nvfs, "props", nv);
|
||||
+ fnvlist_free(nv);
|
||||
|
||||
/* iterate over snaps, and set sd->parent_fromsnap_guid */
|
||||
+ sd->parent_fromsnap_guid = 0;
|
||||
+ sd->parent_snaps = fnvlist_alloc();
|
||||
+ sd->snapprops = fnvlist_alloc();
|
||||
if (!sd->replicate && fromsnap_txg != 0)
|
||||
min_txg = fromsnap_txg;
|
||||
if (!sd->replicate && tosnap_txg != 0)
|
||||
max_txg = tosnap_txg;
|
||||
- sd->parent_fromsnap_guid = 0;
|
||||
- VERIFY(0 == nvlist_alloc(&sd->parent_snaps, NV_UNIQUE_NAME, 0));
|
||||
- VERIFY(0 == nvlist_alloc(&sd->snapprops, NV_UNIQUE_NAME, 0));
|
||||
(void) zfs_iter_snapshots_sorted(zhp, send_iterate_snap, sd,
|
||||
min_txg, max_txg);
|
||||
- VERIFY(0 == nvlist_add_nvlist(nvfs, "snaps", sd->parent_snaps));
|
||||
- VERIFY(0 == nvlist_add_nvlist(nvfs, "snapprops", sd->snapprops));
|
||||
+ fnvlist_add_nvlist(nvfs, "snaps", sd->parent_snaps);
|
||||
+ fnvlist_add_nvlist(nvfs, "snapprops", sd->snapprops);
|
||||
fnvlist_free(sd->parent_snaps);
|
||||
fnvlist_free(sd->snapprops);
|
||||
|
||||
/* add this fs to nvlist */
|
||||
(void) snprintf(guidstring, sizeof (guidstring),
|
||||
"0x%llx", (longlong_t)guid);
|
||||
- VERIFY(0 == nvlist_add_nvlist(sd->fss, guidstring, nvfs));
|
||||
- nvlist_free(nvfs);
|
||||
+ fnvlist_add_nvlist(sd->fss, guidstring, nvfs);
|
||||
+ fnvlist_free(nvfs);
|
||||
|
||||
/* iterate over children */
|
||||
if (sd->recursive)
|
||||
@@ -894,13 +894,12 @@
|
||||
|
||||
static int
|
||||
gather_nvlist(libzfs_handle_t *hdl, const char *fsname, const char *fromsnap,
|
||||
- const char *tosnap, boolean_t recursive, boolean_t verbose,
|
||||
- boolean_t replicate, nvlist_t **nvlp, avl_tree_t **avlp)
|
||||
+ const char *tosnap, boolean_t recursive, boolean_t replicate,
|
||||
+ boolean_t verbose, nvlist_t **nvlp, avl_tree_t **avlp)
|
||||
{
|
||||
zfs_handle_t *zhp;
|
||||
- int error;
|
||||
- uint64_t min_txg = 0, max_txg = 0;
|
||||
send_data_t sd = { 0 };
|
||||
+ int error;
|
||||
|
||||
zhp = zfs_open(hdl, fsname, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME);
|
||||
if (zhp == NULL)
|
||||
@@ -911,8 +910,8 @@
|
||||
sd.fromsnap = fromsnap;
|
||||
sd.tosnap = tosnap;
|
||||
sd.recursive = recursive;
|
||||
- sd.verbose = verbose;
|
||||
sd.replicate = replicate;
|
||||
+ sd.verbose = verbose;
|
||||
|
||||
if ((error = send_iterate_fs(zhp, &sd)) != 0) {
|
||||
nvlist_free(sd.fss);
|
||||
@@ -1349,10 +1348,10 @@
|
||||
dump_filesystem(zfs_handle_t *zhp, void *arg)
|
||||
{
|
||||
int rv = 0;
|
||||
- uint64_t min_txg = 0, max_txg = 0;
|
||||
send_dump_data_t *sdd = arg;
|
||||
boolean_t missingfrom = B_FALSE;
|
||||
zfs_cmd_t zc = { 0 };
|
||||
+ uint64_t min_txg = 0, max_txg = 0;
|
||||
|
||||
(void) snprintf(zc.zc_name, sizeof (zc.zc_name), "%s@%s",
|
||||
zhp->zfs_name, sdd->tosnap);
|
||||
@@ -1853,8 +1852,8 @@
|
||||
}
|
||||
|
||||
err = gather_nvlist(zhp->zfs_hdl, zhp->zfs_name,
|
||||
- fromsnap, tosnap, flags->replicate, flags->verbose,
|
||||
- flags->replicate, &fss, &fsavl);
|
||||
+ fromsnap, tosnap, flags->replicate,
|
||||
+ flags->replicate, flags->verbose, &fss, &fsavl);
|
||||
if (err)
|
||||
goto err_out;
|
||||
VERIFY(0 == nvlist_add_nvlist(hdrnv, "fss", fss));
|
||||
@@ -2497,7 +2496,7 @@
|
||||
VERIFY(0 == nvlist_alloc(&deleted, NV_UNIQUE_NAME, 0));
|
||||
|
||||
if ((error = gather_nvlist(hdl, tofs, fromsnap, NULL,
|
||||
- recursive, B_FALSE, B_FALSE, &local_nv, &local_avl)) != 0)
|
||||
+ recursive, recursive, B_FALSE, &local_nv, &local_avl)) != 0)
|
||||
return (error);
|
||||
|
||||
/*
|
||||
--- sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h.orig
|
||||
+++ sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
|
||||
@@ -881,6 +881,13 @@
|
||||
VDEV_INITIALIZE_COMPLETE
|
||||
} vdev_initializing_state_t;
|
||||
|
||||
+/*
|
||||
+ * nvlist name constants. Facilitate restricting snapshot iteration range for
|
||||
+ * the "list next snapshot" ioctl
|
||||
+ */
|
||||
+#define SNAP_ITER_MIN_TXG "snap_iter_min_txg"
|
||||
+#define SNAP_ITER_MAX_TXG "snap_iter_max_txg"
|
||||
+
|
||||
/*
|
||||
* Vdev statistics. Note: all fields should be 64-bit because this
|
||||
* is passed between kernel and userland as an nvlist uint64 array.
|
||||
@@ -1157,13 +1164,6 @@
|
||||
#define ZCP_DEFAULT_MEMLIMIT (10 * 1024 * 1024)
|
||||
#define ZCP_MAX_MEMLIMIT (10 * ZCP_DEFAULT_MEMLIMIT)
|
||||
|
||||
-/*
|
||||
- * nvlist name constants. Facilitate restricting snapshot iteration range for
|
||||
- * the "list next snapshot" ioctl
|
||||
- */
|
||||
-#define SNAP_ITER_MIN_TXG "snap_iter_min_txg"
|
||||
-#define SNAP_ITER_MAX_TXG "snap_iter_max_txg"
|
||||
-
|
||||
/*
|
||||
* Sysevent payload members. ZFS will generate the following sysevents with the
|
||||
* given payloads:
|
18
website/static/security/patches/EN-21:04/zfs.patch.asc
Normal file
18
website/static/security/patches/EN-21:04/zfs.patch.asc
Normal file
|
@ -0,0 +1,18 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAABCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbipfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cJ9ow/9Hpft2BnP9cFpvRtXtc6J6Pw3s7iS36PHXJXiRTbif72pzUU0dhnGxXT1
|
||||
AA8YX8BvyoHOFxUDqTRFcG+/B6HOpjGEq9aqNiBsGxmA8OXPdtjg1nhR23QH+NNt
|
||||
tJ5YTVztO2tq/VHri41Ez0ttMMYDIpdPAGJIsnJwzFGMgsXKFcNGhG1IXhSzpJOo
|
||||
ZE3R0117MWETR07LJjK7aY5sAvCPA0rtWqosh8DtGa1Qz8k3nNVq91qikAdG2/Ea
|
||||
ymICIz/x1vp9J6SUlMt/2Y3t9V3pCyrL2VwyKbBzKZ+PrJUxM9HgA1w5sMn3ANe0
|
||||
sT+Ijk3TbAkSkV01PgQsYIwX2mHAH38MKO5foq3oU3bLWCGkxu0jDlSvEgLCE5U+
|
||||
4jcJpbH1k1uLOKaLXH3FcK3X0ahIWwOr7ckvcKmsem4f18VLcfQuZ7qHQq3oQT/B
|
||||
ooIvF4Xvv/3kfMK2mdMGza6x5AhkJHp4+cDJhw7CVvTWuo+jb+dQYSlrOVOaaaSl
|
||||
OQDEqSaja+xGh02asMrtdrCm5+DoMfQ+28jMkb2QyA6IHhUkEa8xa/JBka9o71rZ
|
||||
45KIlM7aFxiCACi4LScUNGh94qPnNkG9Mgez1O91nhiFMVCaUSdEDNkz4HMRseli
|
||||
hPD2/3rUJ9pRRFcXMbZHrtXK7gwJ+A8Fd++MgYvedwbjke+efe4=
|
||||
=mdRJ
|
||||
-----END PGP SIGNATURE-----
|
71
website/static/security/patches/EN-21:05/libatomic.patch
Normal file
71
website/static/security/patches/EN-21:05/libatomic.patch
Normal file
|
@ -0,0 +1,71 @@
|
|||
--- contrib/llvm-project/compiler-rt/lib/builtins/atomic.c.orig
|
||||
+++ contrib/llvm-project/compiler-rt/lib/builtins/atomic.c
|
||||
@@ -124,8 +124,8 @@
|
||||
#define IS_LOCK_FREE_2 __c11_atomic_is_lock_free(2)
|
||||
#define IS_LOCK_FREE_4 __c11_atomic_is_lock_free(4)
|
||||
|
||||
-/// 32 bit PowerPC doesn't support 8-byte lock_free atomics
|
||||
-#if !defined(__powerpc64__) && defined(__powerpc__)
|
||||
+/// 32 bit MIPS and PowerPC don't support 8-byte lock_free atomics
|
||||
+#if defined(__mips__) || (!defined(__powerpc64__) && defined(__powerpc__))
|
||||
#define IS_LOCK_FREE_8 0
|
||||
#else
|
||||
#define IS_LOCK_FREE_8 __c11_atomic_is_lock_free(8)
|
||||
--- lib/libcompiler_rt/Makefile.inc.orig
|
||||
+++ lib/libcompiler_rt/Makefile.inc
|
||||
@@ -18,6 +18,8 @@
|
||||
SRCF+= ashlti3
|
||||
SRCF+= ashrdi3
|
||||
SRCF+= ashrti3
|
||||
+SRCF+= bswapdi2
|
||||
+SRCF+= bswapsi2
|
||||
SRCF+= clear_cache
|
||||
SRCF+= clzdi2
|
||||
SRCF+= clzsi2
|
||||
@@ -117,6 +119,14 @@
|
||||
SRCF+= umoddi3
|
||||
SRCF+= umodti3
|
||||
|
||||
+# Enable compiler-rt's atomic implementation only for clang, as it uses clang
|
||||
+# specific builtins, and gcc packages usually come with their own libatomic.
|
||||
+# Exclude arm which has its own implementations of atomic functions, below.
|
||||
+.if "${COMPILER_TYPE}" == "clang" && \
|
||||
+ !(${MACHINE_CPUARCH} == "arm" || ${MACHINE_CPUARCH} == "armv6")
|
||||
+SRCF+= atomic
|
||||
+.endif
|
||||
+
|
||||
# Avoid using SSE2 instructions on i386, if unsupported.
|
||||
.if ${MACHINE_CPUARCH} == "i386" && empty(MACHINE_CPU:Msse2)
|
||||
SRCS+= floatdidf.c
|
||||
@@ -215,12 +225,6 @@
|
||||
SRCF+= stdatomic
|
||||
.endif
|
||||
|
||||
-.if "${COMPILER_TYPE}" == "clang" && \
|
||||
- (${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpcspe")
|
||||
-SRCS+= atomic.c
|
||||
-CFLAGS.atomic.c+= -Wno-atomic-alignment
|
||||
-.endif
|
||||
-
|
||||
.for file in ${SRCF}
|
||||
.if ${MACHINE_ARCH:Marmv6*} && (!defined(CPUTYPE) || ${CPUTYPE:M*soft*} == "") \
|
||||
&& exists(${CRTSRC}/${CRTARCH}/${file}vfp.S)
|
||||
@@ -242,18 +246,9 @@
|
||||
SRCS+= aeabi_memset.S
|
||||
SRCS+= aeabi_uidivmod.S
|
||||
SRCS+= aeabi_uldivmod.S
|
||||
-SRCS+= bswapdi2.S
|
||||
-SRCS+= bswapsi2.S
|
||||
SRCS+= switch16.S
|
||||
SRCS+= switch32.S
|
||||
SRCS+= switch8.S
|
||||
SRCS+= switchu8.S
|
||||
SRCS+= sync_synchronize.S
|
||||
.endif
|
||||
-
|
||||
-# GCC-6.3 on mips32 requires bswap32 built-in.
|
||||
-.if ${MACHINE_CPUARCH} == "mips"
|
||||
-SRCS+= bswapdi2.c
|
||||
-SRCS+= bswapsi2.c
|
||||
-.endif
|
||||
-
|
18
website/static/security/patches/EN-21:05/libatomic.patch.asc
Normal file
18
website/static/security/patches/EN-21:05/libatomic.patch.asc
Normal file
|
@ -0,0 +1,18 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAABCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbipfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cITKxAAipVfcvry45Ih14/dOrobd6s4NtFpck4x+CT9p/SMS5LLLFAJYpjazGtf
|
||||
1WytYOv305wZo0toQQDZwTOwGdjPCdZyXzJFXfQGX2KpVA/pqEqY+SBxBEDbzU0X
|
||||
4LKiijtGNDqikrb7Rs4m5DiOgcY0UFHvwisGvX4/1yHEx33cSPR6P90uLSwiIUlu
|
||||
qxTa400oN79ICecRibtr1rjTRZbSoP/9p3Si2UFVLZPD/mXaYU626T70yIARaach
|
||||
8oO8afQHVrvMfdDJrKIuas4DrbhORtZsst4mtmWRDuQlDAIcZuI43uLCjTjMVVjk
|
||||
VsQlS/YprSGkzVyBz/hyKqPa8eYkmpmWekSW8mvyNudfjqCfHh6qFAZD9yqqufRr
|
||||
am3nWKLqjIclLeF7/nBoyC9Vvhb+okCS3slkejm/4WDpgUoJWyd262Hj4jsviQ3f
|
||||
8/MkhkAahSJJTXf9CVDM5iz4DpobCMc27mX/uctfeQrMzw6JMZ3IcSZ/k9mPqlR/
|
||||
znhW4gSc1bCrN2t/UCaBeGvnL8eGa5ohhLIHGm3vekMvlpFmj3kPidmgjts1RoHA
|
||||
gW0MWfYod54/WceTGC/RVwUQyQjjj4qlLrWZCmU2SAK5Atw54w+l/skj9HZlGJC3
|
||||
0OBeQvqSOUszbn8H48+1l039t90rdCbYW5/suZfhoK6OeudbMmY=
|
||||
=DgCX
|
||||
-----END PGP SIGNATURE-----
|
|
@ -0,0 +1,10 @@
|
|||
--- sys/fs/msdosfs/msdosfs_vnops.c.orig
|
||||
+++ sys/fs/msdosfs/msdosfs_vnops.c
|
||||
@@ -1701,6 +1701,7 @@
|
||||
mbnambuf_flush(&nb, &dirbuf);
|
||||
chksum = -1;
|
||||
dirbuf.d_reclen = GENERIC_DIRSIZ(&dirbuf);
|
||||
+ dirent_terminate(&dirbuf);
|
||||
if (uio->uio_resid < dirbuf.d_reclen) {
|
||||
brelse(bp);
|
||||
goto out;
|
|
@ -0,0 +1,18 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAABCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbjNfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cJ8HA/+PgmcD+mXjlONm6S2iODbNlot81XtSJFZBVvGsuez3YnDt4NV4TVivf+A
|
||||
SFs/3olGaMxtAT/ME8dVrgAF8+cHcjBMj5Vd+SYEgYAS3gQsOm4jfzWTh+z0Wwm7
|
||||
SGDgW3h9wMb7WKevudvZ9kI5xV5uOD3IeCs8zag5eNoOp+BvgPbOgP9GdqgP1WmT
|
||||
vEFtk8g1PAXoOkDm89rdYf05oUHyC6FvVF1vxCTEypmHt97meIkOn71f+CBMBLTS
|
||||
qyFf/DHeXjuWg6XNZckbShRXgJufv8cf2GkK/dX37VzX5qXk4HKsOckQTwxXLjtc
|
||||
xQGXyhw2lCWlkJUS6yzeeH4elzl3Z+EPE9t1zrEq5fmwGCV2cGuDQbdgWTfr4LnZ
|
||||
5uTFJ6RtAT66hnbTu0LWhsBh7JWTYih6Vhq/RDS/HaIt0tgf20xaiVEwbtshAfsR
|
||||
djHU2KgFCua+Y0NHKsFlgE7wM1i7lcPC4oJQxVvgtK1Zac49VVgMn1M9V9K4iFrq
|
||||
D2j9mcW4Bi8bWPH2c3MdqSZZo5s1VfWWPH5CEDGyYRWC9TR8MLbeu5svnQrPgTcm
|
||||
CoQysqeP9/50LADgSwIgnEdyJizydAhecck5t6BbkimanUAfGKw4lH3d9xWP24y/
|
||||
F3MmYHkrAw88np2rlmaVFnydu4I1stzUiE5Nyrp00ATybc2vny0=
|
||||
=tSMc
|
||||
-----END PGP SIGNATURE-----
|
166
website/static/security/patches/SA-21:01/fsdisclosure.12.patch
Normal file
166
website/static/security/patches/SA-21:01/fsdisclosure.12.patch
Normal file
|
@ -0,0 +1,166 @@
|
|||
--- sys/fs/autofs/autofs_vnops.c.orig
|
||||
+++ sys/fs/autofs/autofs_vnops.c
|
||||
@@ -369,6 +369,7 @@
|
||||
return (EINVAL);
|
||||
|
||||
dirent.d_fileno = fileno;
|
||||
+ dirent.d_off = uio->uio_offset + reclen;
|
||||
dirent.d_reclen = reclen;
|
||||
dirent.d_type = DT_DIR;
|
||||
dirent.d_namlen = namlen;
|
||||
--- sys/fs/msdosfs/msdosfs_vnops.c.orig
|
||||
+++ sys/fs/msdosfs/msdosfs_vnops.c
|
||||
@@ -1687,6 +1687,7 @@
|
||||
dirbuf.d_reclen = GENERIC_DIRSIZ(&dirbuf);
|
||||
/* NOTE: d_off is the offset of the *next* entry. */
|
||||
dirbuf.d_off = offset + sizeof(struct direntry);
|
||||
+ dirent_terminate(&dirbuf);
|
||||
if (uio->uio_resid < dirbuf.d_reclen) {
|
||||
brelse(bp);
|
||||
goto out;
|
||||
--- sys/fs/smbfs/smbfs_io.c.orig
|
||||
+++ sys/fs/smbfs/smbfs_io.c
|
||||
@@ -103,6 +103,7 @@
|
||||
(np->n_parent ? np->n_parentino : 2);
|
||||
if (de.d_fileno == 0)
|
||||
de.d_fileno = 0x7ffffffd + offset;
|
||||
+ de.d_off = offset + 1;
|
||||
de.d_namlen = offset + 1;
|
||||
de.d_name[0] = '.';
|
||||
de.d_name[1] = '.';
|
||||
@@ -153,6 +154,7 @@
|
||||
bzero((caddr_t)&de, DE_SIZE);
|
||||
de.d_reclen = DE_SIZE;
|
||||
de.d_fileno = ctx->f_attr.fa_ino;
|
||||
+ de.d_off = offset + 1;
|
||||
de.d_type = (ctx->f_attr.fa_attr & SMB_FA_DIR) ? DT_DIR : DT_REG;
|
||||
de.d_namlen = ctx->f_nmlen;
|
||||
bcopy(ctx->f_name, de.d_name, de.d_namlen);
|
||||
--- sys/fs/tmpfs/tmpfs_subr.c.orig
|
||||
+++ sys/fs/tmpfs/tmpfs_subr.c
|
||||
@@ -1188,6 +1188,7 @@
|
||||
MPASS(uio->uio_offset == TMPFS_DIRCOOKIE_DOT);
|
||||
|
||||
dent.d_fileno = node->tn_id;
|
||||
+ dent.d_off = TMPFS_DIRCOOKIE_DOTDOT;
|
||||
dent.d_type = DT_DIR;
|
||||
dent.d_namlen = 1;
|
||||
dent.d_name[0] = '.';
|
||||
@@ -1213,7 +1214,7 @@
|
||||
*/
|
||||
static int
|
||||
tmpfs_dir_getdotdotdent(struct tmpfs_mount *tm, struct tmpfs_node *node,
|
||||
- struct uio *uio)
|
||||
+ struct uio *uio, off_t next)
|
||||
{
|
||||
struct tmpfs_node *parent;
|
||||
struct dirent dent;
|
||||
@@ -1234,6 +1235,7 @@
|
||||
dent.d_fileno = parent->tn_id;
|
||||
TMPFS_NODE_UNLOCK(parent);
|
||||
|
||||
+ dent.d_off = next;
|
||||
dent.d_type = DT_DIR;
|
||||
dent.d_namlen = 2;
|
||||
dent.d_name[0] = '.';
|
||||
@@ -1263,7 +1265,7 @@
|
||||
struct uio *uio, int maxcookies, u_long *cookies, int *ncookies)
|
||||
{
|
||||
struct tmpfs_dir_cursor dc;
|
||||
- struct tmpfs_dirent *de;
|
||||
+ struct tmpfs_dirent *de, *nde;
|
||||
off_t off;
|
||||
int error;
|
||||
|
||||
@@ -1284,18 +1286,19 @@
|
||||
error = tmpfs_dir_getdotdent(tm, node, uio);
|
||||
if (error != 0)
|
||||
return (error);
|
||||
- uio->uio_offset = TMPFS_DIRCOOKIE_DOTDOT;
|
||||
+ uio->uio_offset = off = TMPFS_DIRCOOKIE_DOTDOT;
|
||||
if (cookies != NULL)
|
||||
- cookies[(*ncookies)++] = off = uio->uio_offset;
|
||||
+ cookies[(*ncookies)++] = off;
|
||||
/* FALLTHROUGH */
|
||||
case TMPFS_DIRCOOKIE_DOTDOT:
|
||||
- error = tmpfs_dir_getdotdotdent(tm, node, uio);
|
||||
+ de = tmpfs_dir_first(node, &dc);
|
||||
+ off = tmpfs_dirent_cookie(de);
|
||||
+ error = tmpfs_dir_getdotdotdent(tm, node, uio, off);
|
||||
if (error != 0)
|
||||
return (error);
|
||||
- de = tmpfs_dir_first(node, &dc);
|
||||
- uio->uio_offset = tmpfs_dirent_cookie(de);
|
||||
+ uio->uio_offset = off;
|
||||
if (cookies != NULL)
|
||||
- cookies[(*ncookies)++] = off = uio->uio_offset;
|
||||
+ cookies[(*ncookies)++] = off;
|
||||
/* EOF. */
|
||||
if (de == NULL)
|
||||
return (0);
|
||||
@@ -1310,13 +1313,17 @@
|
||||
off = tmpfs_dirent_cookie(de);
|
||||
}
|
||||
|
||||
- /* Read as much entries as possible; i.e., until we reach the end of
|
||||
- * the directory or we exhaust uio space. */
|
||||
+ /*
|
||||
+ * Read as much entries as possible; i.e., until we reach the end of the
|
||||
+ * directory or we exhaust uio space.
|
||||
+ */
|
||||
do {
|
||||
struct dirent d;
|
||||
|
||||
- /* Create a dirent structure representing the current
|
||||
- * tmpfs_node and fill it. */
|
||||
+ /*
|
||||
+ * Create a dirent structure representing the current tmpfs_node
|
||||
+ * and fill it.
|
||||
+ */
|
||||
if (de->td_node == NULL) {
|
||||
d.d_fileno = 1;
|
||||
d.d_type = DT_WHT;
|
||||
@@ -1360,20 +1367,27 @@
|
||||
MPASS(de->td_namelen < sizeof(d.d_name));
|
||||
(void)memcpy(d.d_name, de->ud.td_name, de->td_namelen);
|
||||
d.d_reclen = GENERIC_DIRSIZ(&d);
|
||||
- dirent_terminate(&d);
|
||||
|
||||
- /* Stop reading if the directory entry we are treating is
|
||||
- * bigger than the amount of data that can be returned. */
|
||||
+ /*
|
||||
+ * Stop reading if the directory entry we are treating is bigger
|
||||
+ * than the amount of data that can be returned.
|
||||
+ */
|
||||
if (d.d_reclen > uio->uio_resid) {
|
||||
error = EJUSTRETURN;
|
||||
break;
|
||||
}
|
||||
|
||||
- /* Copy the new dirent structure into the output buffer and
|
||||
- * advance pointers. */
|
||||
+ nde = tmpfs_dir_next(node, &dc);
|
||||
+ d.d_off = tmpfs_dirent_cookie(nde);
|
||||
+ dirent_terminate(&d);
|
||||
+
|
||||
+ /*
|
||||
+ * Copy the new dirent structure into the output buffer and
|
||||
+ * advance pointers.
|
||||
+ */
|
||||
error = uiomove(&d, d.d_reclen, uio);
|
||||
if (error == 0) {
|
||||
- de = tmpfs_dir_next(node, &dc);
|
||||
+ de = nde;
|
||||
if (cookies != NULL) {
|
||||
off = tmpfs_dirent_cookie(de);
|
||||
MPASS(*ncookies < maxcookies);
|
||||
--- sys/kern/uipc_mqueue.c.orig
|
||||
+++ sys/kern/uipc_mqueue.c
|
||||
@@ -1426,6 +1426,7 @@
|
||||
if (!pn->mn_fileno)
|
||||
mqfs_fileno_alloc(mi, pn);
|
||||
entry.d_fileno = pn->mn_fileno;
|
||||
+ entry.d_off = offset + entry.d_reclen;
|
||||
for (i = 0; i < MQFS_NAMELEN - 1 && pn->mn_name[i] != '\0'; ++i)
|
||||
entry.d_name[i] = pn->mn_name[i];
|
||||
entry.d_namlen = i;
|
|
@ -0,0 +1,18 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAABCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbjNfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cJY7A//cxfRPjkTLhctIEVx1PCFqEQ02Fj8rarjyKu8fWPrjB7zB9DuJPIMDfzs
|
||||
VEupOfXlw0R71n+6UV3EuplbHF7jodX5g79FG0AqjrhzKmGVmN3azx/erbAQj46Q
|
||||
ccRyGNltZLtji3iD9eespNNbuXkE0HB4hgR8uwbzTtEI12l9FybrRfR/Lo0EpakX
|
||||
avnwAMSmbUp8IHvXJmiae6jNqW5qbXH0j0wUaQGIhF/ZgJtvZhRN2xbXWb7A0Uqm
|
||||
DkUSatoFnTZ3YXKh1dY7wr9qUQujoO7tqvM1RMsgX+GGQNIwIzWsWJo6bcMNKmN+
|
||||
bjVRQgLp8o2okApFKbEX535tzudGwet9xJGCrz8znUhgN0riUVsPy8/AbVFiLoWi
|
||||
Rp8YlBTuuIQEG1naOlkdwbyoNXnIKajuA3s+BawdcpQEoB8o9OSd1jdQcdafZE6d
|
||||
E9Oo/yIetviAmcu4Xt/KYXT2NbLIezDO26EYLsLver1qF9QE2A8syy3qld/mz4+n
|
||||
Q90L/Qs4iN7nDzB0WenreA7YlG0rXjG5WyXxfxIpefdaSWvd51LUU56tGJEkGzAt
|
||||
VT1kOyNKKI5zfV6K+pN3+0G7MPmfMN7au7UoAnC3C2QnbvvZZ4kxd/8+FerWyHrT
|
||||
2CQAxwErn2hDLXJn9SDU8uQnXY3cJ3efO6lx9jwGQtCpJPzKd/A=
|
||||
=DVI2
|
||||
-----END PGP SIGNATURE-----
|
255
website/static/security/patches/SA-21:02/xenoom.11.patch
Normal file
255
website/static/security/patches/SA-21:02/xenoom.11.patch
Normal file
|
@ -0,0 +1,255 @@
|
|||
--- sys/dev/xen/balloon/balloon.c.orig
|
||||
+++ sys/dev/xen/balloon/balloon.c
|
||||
@@ -310,7 +310,8 @@
|
||||
|
||||
static struct xs_watch target_watch =
|
||||
{
|
||||
- .node = "memory/target"
|
||||
+ .node = "memory/target",
|
||||
+ .max_pending = 1,
|
||||
};
|
||||
|
||||
/* React to a change in the target key */
|
||||
--- sys/dev/xen/blkback/blkback.c.orig
|
||||
+++ sys/dev/xen/blkback/blkback.c
|
||||
@@ -3767,6 +3767,12 @@
|
||||
xbb->hotplug_watch.callback = xbb_attach_disk;
|
||||
KASSERT(xbb->hotplug_watch.node == NULL, ("watch node already setup"));
|
||||
xbb->hotplug_watch.node = strdup(sbuf_data(watch_path), M_XENBLOCKBACK);
|
||||
+ /*
|
||||
+ * We don't care about the path updated, just about the value changes
|
||||
+ * on that single node, hence there's no need to queue more that one
|
||||
+ * event.
|
||||
+ */
|
||||
+ xbb->hotplug_watch.max_pending = 1;
|
||||
sbuf_delete(watch_path);
|
||||
error = xs_register_watch(&xbb->hotplug_watch);
|
||||
if (error != 0) {
|
||||
--- sys/dev/xen/control/control.c.orig
|
||||
+++ sys/dev/xen/control/control.c
|
||||
@@ -432,6 +432,12 @@
|
||||
xctrl->xctrl_watch.node = "control/shutdown";
|
||||
xctrl->xctrl_watch.callback = xctrl_on_watch_event;
|
||||
xctrl->xctrl_watch.callback_data = (uintptr_t)xctrl;
|
||||
+ /*
|
||||
+ * We don't care about the path updated, just about the value changes
|
||||
+ * on that single node, hence there's no need to queue more that one
|
||||
+ * event.
|
||||
+ */
|
||||
+ xctrl->xctrl_watch.max_pending = 1;
|
||||
xs_register_watch(&xctrl->xctrl_watch);
|
||||
|
||||
if (xen_pv_domain())
|
||||
--- sys/dev/xen/xenstore/xenstore.c.orig
|
||||
+++ sys/dev/xen/xenstore/xenstore.c
|
||||
@@ -668,12 +668,17 @@
|
||||
mtx_lock(&xs.registered_watches_lock);
|
||||
msg->u.watch.handle = find_watch(
|
||||
msg->u.watch.vec[XS_WATCH_TOKEN]);
|
||||
- if (msg->u.watch.handle != NULL) {
|
||||
- mtx_lock(&xs.watch_events_lock);
|
||||
+ mtx_lock(&xs.watch_events_lock);
|
||||
+ if (msg->u.watch.handle != NULL &&
|
||||
+ (!msg->u.watch.handle->max_pending ||
|
||||
+ msg->u.watch.handle->pending <
|
||||
+ msg->u.watch.handle->max_pending)) {
|
||||
+ msg->u.watch.handle->pending++;
|
||||
TAILQ_INSERT_TAIL(&xs.watch_events, msg, list);
|
||||
wakeup(&xs.watch_events);
|
||||
mtx_unlock(&xs.watch_events_lock);
|
||||
} else {
|
||||
+ mtx_unlock(&xs.watch_events_lock);
|
||||
free(msg->u.watch.vec, M_XENSTORE);
|
||||
free(msg, M_XENSTORE);
|
||||
}
|
||||
@@ -1045,8 +1050,10 @@
|
||||
|
||||
mtx_lock(&xs.watch_events_lock);
|
||||
msg = TAILQ_FIRST(&xs.watch_events);
|
||||
- if (msg)
|
||||
+ if (msg) {
|
||||
TAILQ_REMOVE(&xs.watch_events, msg, list);
|
||||
+ msg->u.watch.handle->pending--;
|
||||
+ }
|
||||
mtx_unlock(&xs.watch_events_lock);
|
||||
|
||||
if (msg != NULL) {
|
||||
@@ -1629,6 +1636,7 @@
|
||||
char token[sizeof(watch) * 2 + 1];
|
||||
int error;
|
||||
|
||||
+ watch->pending = 0;
|
||||
sprintf(token, "%lX", (long)watch);
|
||||
|
||||
sx_slock(&xs.suspend_mutex);
|
||||
--- sys/xen/xenbus/xenbus.c.orig
|
||||
+++ sys/xen/xenbus/xenbus.c
|
||||
@@ -102,48 +102,6 @@
|
||||
return ((state < (XenbusStateClosed + 1)) ? name[state] : "INVALID");
|
||||
}
|
||||
|
||||
-int
|
||||
-xenbus_watch_path(device_t dev, char *path, struct xs_watch *watch,
|
||||
- xs_watch_cb_t *callback, uintptr_t callback_data)
|
||||
-{
|
||||
- int error;
|
||||
-
|
||||
- watch->node = path;
|
||||
- watch->callback = callback;
|
||||
- watch->callback_data = callback_data;
|
||||
-
|
||||
- error = xs_register_watch(watch);
|
||||
-
|
||||
- if (error) {
|
||||
- watch->node = NULL;
|
||||
- watch->callback = NULL;
|
||||
- xenbus_dev_fatal(dev, error, "adding watch on %s", path);
|
||||
- }
|
||||
-
|
||||
- return (error);
|
||||
-}
|
||||
-
|
||||
-int
|
||||
-xenbus_watch_path2(device_t dev, const char *path,
|
||||
- const char *path2, struct xs_watch *watch,
|
||||
- xs_watch_cb_t *callback, uintptr_t callback_data)
|
||||
-{
|
||||
- int error;
|
||||
- char *state = malloc(strlen(path) + 1 + strlen(path2) + 1,
|
||||
- M_XENBUS, M_WAITOK);
|
||||
-
|
||||
- strcpy(state, path);
|
||||
- strcat(state, "/");
|
||||
- strcat(state, path2);
|
||||
-
|
||||
- error = xenbus_watch_path(dev, state, watch, callback, callback_data);
|
||||
- if (error) {
|
||||
- free(state,M_XENBUS);
|
||||
- }
|
||||
-
|
||||
- return (error);
|
||||
-}
|
||||
-
|
||||
void
|
||||
xenbus_dev_verror(device_t dev, int err, const char *fmt, va_list ap)
|
||||
{
|
||||
--- sys/xen/xenbus/xenbusb.c.orig
|
||||
+++ sys/xen/xenbus/xenbusb.c
|
||||
@@ -702,10 +702,21 @@
|
||||
ivars->xd_otherend_watch.node = statepath;
|
||||
ivars->xd_otherend_watch.callback = xenbusb_otherend_watch_cb;
|
||||
ivars->xd_otherend_watch.callback_data = (uintptr_t)ivars;
|
||||
+ /*
|
||||
+ * Other end state node watch, limit to one pending event
|
||||
+ * to prevent frontends from queuing too many events that
|
||||
+ * could cause resource starvation.
|
||||
+ */
|
||||
+ ivars->xd_otherend_watch.max_pending = 1;
|
||||
|
||||
ivars->xd_local_watch.node = ivars->xd_node;
|
||||
ivars->xd_local_watch.callback = xenbusb_local_watch_cb;
|
||||
ivars->xd_local_watch.callback_data = (uintptr_t)ivars;
|
||||
+ /*
|
||||
+ * Watch our local path, only writable by us or a privileged
|
||||
+ * domain, no need to limit.
|
||||
+ */
|
||||
+ ivars->xd_local_watch.max_pending = 0;
|
||||
|
||||
mtx_lock(&xbs->xbs_lock);
|
||||
xbs->xbs_connecting_children++;
|
||||
@@ -764,6 +775,12 @@
|
||||
xbs->xbs_device_watch.node = bus_node;
|
||||
xbs->xbs_device_watch.callback = xenbusb_devices_changed;
|
||||
xbs->xbs_device_watch.callback_data = (uintptr_t)xbs;
|
||||
+ /*
|
||||
+ * Allow for unlimited pending watches, as those are local paths
|
||||
+ * either controlled by the guest or only writable by privileged
|
||||
+ * domains.
|
||||
+ */
|
||||
+ xbs->xbs_device_watch.max_pending = 0;
|
||||
|
||||
TASK_INIT(&xbs->xbs_probe_children, 0, xenbusb_probe_children_cb, dev);
|
||||
|
||||
--- sys/xen/xenbus/xenbusvar.h.orig
|
||||
+++ sys/xen/xenbus/xenbusvar.h
|
||||
@@ -123,62 +123,6 @@
|
||||
return (xenbus_read_driver_state(xenbus_get_otherend_path(dev)));
|
||||
}
|
||||
|
||||
-/**
|
||||
- * Initialize and register a watch on the given path (client suplied storage).
|
||||
- *
|
||||
- * \param dev The XenBus device requesting the watch service.
|
||||
- * \param path The XenStore path of the object to be watched. The
|
||||
- * storage for this string must be stable for the lifetime
|
||||
- * of the watch.
|
||||
- * \param watch The watch object to use for this request. This object
|
||||
- * must be stable for the lifetime of the watch.
|
||||
- * \param callback The function to call when XenStore objects at or below
|
||||
- * path are modified.
|
||||
- * \param cb_data Client data that can be retrieved from the watch object
|
||||
- * during the callback.
|
||||
- *
|
||||
- * \return On success, 0. Otherwise an errno value indicating the
|
||||
- * type of failure.
|
||||
- *
|
||||
- * \note On error, the device 'dev' will be switched to the XenbusStateClosing
|
||||
- * state and the returned error is saved in the per-device error node
|
||||
- * for dev in the XenStore.
|
||||
- */
|
||||
-int xenbus_watch_path(device_t dev, char *path,
|
||||
- struct xs_watch *watch,
|
||||
- xs_watch_cb_t *callback,
|
||||
- uintptr_t cb_data);
|
||||
-
|
||||
-/**
|
||||
- * Initialize and register a watch at path/path2 in the XenStore.
|
||||
- *
|
||||
- * \param dev The XenBus device requesting the watch service.
|
||||
- * \param path The base XenStore path of the object to be watched.
|
||||
- * \param path2 The tail XenStore path of the object to be watched.
|
||||
- * \param watch The watch object to use for this request. This object
|
||||
- * must be stable for the lifetime of the watch.
|
||||
- * \param callback The function to call when XenStore objects at or below
|
||||
- * path are modified.
|
||||
- * \param cb_data Client data that can be retrieved from the watch object
|
||||
- * during the callback.
|
||||
- *
|
||||
- * \return On success, 0. Otherwise an errno value indicating the
|
||||
- * type of failure.
|
||||
- *
|
||||
- * \note On error, \a dev will be switched to the XenbusStateClosing
|
||||
- * state and the returned error is saved in the per-device error node
|
||||
- * for \a dev in the XenStore.
|
||||
- *
|
||||
- * Similar to xenbus_watch_path, however the storage for the path to the
|
||||
- * watched object is allocated from the heap and filled with "path '/' path2".
|
||||
- * Should a call to this function succeed, it is the callers responsibility
|
||||
- * to free watch->node using the M_XENBUS malloc type.
|
||||
- */
|
||||
-int xenbus_watch_path2(device_t dev, const char *path,
|
||||
- const char *path2, struct xs_watch *watch,
|
||||
- xs_watch_cb_t *callback,
|
||||
- uintptr_t cb_data);
|
||||
-
|
||||
/**
|
||||
* Grant access to the given ring_mfn to the peer of the given device.
|
||||
*
|
||||
--- sys/xen/xenstore/xenstorevar.h.orig
|
||||
+++ sys/xen/xenstore/xenstorevar.h
|
||||
@@ -72,6 +72,15 @@
|
||||
|
||||
/* Callback client data untouched by the XenStore watch mechanism. */
|
||||
uintptr_t callback_data;
|
||||
+
|
||||
+ /* Maximum number of pending watch events to be delivered. */
|
||||
+ unsigned int max_pending;
|
||||
+
|
||||
+ /*
|
||||
+ * Private counter used by xenstore to keep track of the pending
|
||||
+ * watches. Protected by xs.watch_events_lock.
|
||||
+ */
|
||||
+ unsigned int pending;
|
||||
};
|
||||
LIST_HEAD(xs_watch_list, xs_watch);
|
||||
|
18
website/static/security/patches/SA-21:02/xenoom.11.patch.asc
Normal file
18
website/static/security/patches/SA-21:02/xenoom.11.patch.asc
Normal file
|
@ -0,0 +1,18 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAABCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbjRfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cKfghAAkrse02lN4PZizc0OEsABoBTpTLLNFTTQ+3alY9MeYmLzgoP6crG6nETa
|
||||
VwRh44ztjXeMB0/HUKu4rCcSbasYPLYAGZ+z8WCGmgVs30og7m6fC1eLb3zvlHxq
|
||||
O4J9E3JhvQIPbhFpZMDMyjj+aS4SncgB7Hswcr3FGuUQkl9ySm7frV6umDHkwaiN
|
||||
0wNEQVHQIQSVxawSG2+hMwVCDH/rxm2gLPpoTlQ4rwD3dsr6Ul8hCqPTTUV7vpRE
|
||||
88AAv+xPgglWjNFo2LAYvtXjTiO3/v+TfiNnf47uwbMpmEaUKRDDirMqrAd8k6x4
|
||||
UgbYC+Dils9Fbo+hc2P8kxwaDDb3xPk6RwPErCbQfyoF2w09YQeaIB5na9aRV43u
|
||||
qCOj/3OFcuZxEqY1pWLWutD6HM2qi72Btm2U4dp/zFa6V7x4hRKrxmimM07uJGRy
|
||||
/Pk3mBpLQLm0wbjSTR+8+RFM4fYRUQbJYZFINn99WDsL4zqD/KzL/ZW5e2pFjRcC
|
||||
n2DuuMULHQ1ivBZmdMBOIvx5JUllHn5vazDVErIdILJhAb4ypFpuyFdkBUNO72Hn
|
||||
dfrNrwABGi57nqxdAP8nIYTEUyUxm6q3vC4VXsoarYZvGECmWLrNWSADR7YtsMSi
|
||||
7C9lanrEy3CH4eFwXkPTYAvmLgubQTm5pMxCZfM/qHSkUhVocBQ=
|
||||
=6nop
|
||||
-----END PGP SIGNATURE-----
|
300
website/static/security/patches/SA-21:02/xenoom.12.patch
Normal file
300
website/static/security/patches/SA-21:02/xenoom.12.patch
Normal file
|
@ -0,0 +1,300 @@
|
|||
--- sys/dev/xen/balloon/balloon.c.orig
|
||||
+++ sys/dev/xen/balloon/balloon.c
|
||||
@@ -310,7 +310,8 @@
|
||||
|
||||
static struct xs_watch target_watch =
|
||||
{
|
||||
- .node = "memory/target"
|
||||
+ .node = "memory/target",
|
||||
+ .max_pending = 1,
|
||||
};
|
||||
|
||||
/* React to a change in the target key */
|
||||
--- sys/dev/xen/blkback/blkback.c.orig
|
||||
+++ sys/dev/xen/blkback/blkback.c
|
||||
@@ -3768,6 +3768,12 @@
|
||||
xbb->hotplug_watch.callback = xbb_attach_disk;
|
||||
KASSERT(xbb->hotplug_watch.node == NULL, ("watch node already setup"));
|
||||
xbb->hotplug_watch.node = strdup(sbuf_data(watch_path), M_XENBLOCKBACK);
|
||||
+ /*
|
||||
+ * We don't care about the path updated, just about the value changes
|
||||
+ * on that single node, hence there's no need to queue more that one
|
||||
+ * event.
|
||||
+ */
|
||||
+ xbb->hotplug_watch.max_pending = 1;
|
||||
sbuf_delete(watch_path);
|
||||
error = xs_register_watch(&xbb->hotplug_watch);
|
||||
if (error != 0) {
|
||||
--- sys/dev/xen/control/control.c.orig
|
||||
+++ sys/dev/xen/control/control.c
|
||||
@@ -432,6 +432,12 @@
|
||||
xctrl->xctrl_watch.node = "control/shutdown";
|
||||
xctrl->xctrl_watch.callback = xctrl_on_watch_event;
|
||||
xctrl->xctrl_watch.callback_data = (uintptr_t)xctrl;
|
||||
+ /*
|
||||
+ * We don't care about the path updated, just about the value changes
|
||||
+ * on that single node, hence there's no need to queue more that one
|
||||
+ * event.
|
||||
+ */
|
||||
+ xctrl->xctrl_watch.max_pending = 1;
|
||||
xs_register_watch(&xctrl->xctrl_watch);
|
||||
|
||||
if (xen_pv_domain())
|
||||
--- sys/dev/xen/xenstore/xenstore.c.orig
|
||||
+++ sys/dev/xen/xenstore/xenstore.c
|
||||
@@ -656,12 +656,17 @@
|
||||
mtx_lock(&xs.registered_watches_lock);
|
||||
msg->u.watch.handle = find_watch(
|
||||
msg->u.watch.vec[XS_WATCH_TOKEN]);
|
||||
- if (msg->u.watch.handle != NULL) {
|
||||
- mtx_lock(&xs.watch_events_lock);
|
||||
+ mtx_lock(&xs.watch_events_lock);
|
||||
+ if (msg->u.watch.handle != NULL &&
|
||||
+ (!msg->u.watch.handle->max_pending ||
|
||||
+ msg->u.watch.handle->pending <
|
||||
+ msg->u.watch.handle->max_pending)) {
|
||||
+ msg->u.watch.handle->pending++;
|
||||
TAILQ_INSERT_TAIL(&xs.watch_events, msg, list);
|
||||
wakeup(&xs.watch_events);
|
||||
mtx_unlock(&xs.watch_events_lock);
|
||||
} else {
|
||||
+ mtx_unlock(&xs.watch_events_lock);
|
||||
free(msg->u.watch.vec, M_XENSTORE);
|
||||
free(msg, M_XENSTORE);
|
||||
}
|
||||
@@ -983,8 +988,10 @@
|
||||
|
||||
mtx_lock(&xs.watch_events_lock);
|
||||
msg = TAILQ_FIRST(&xs.watch_events);
|
||||
- if (msg)
|
||||
+ if (msg) {
|
||||
TAILQ_REMOVE(&xs.watch_events, msg, list);
|
||||
+ msg->u.watch.handle->pending--;
|
||||
+ }
|
||||
mtx_unlock(&xs.watch_events_lock);
|
||||
|
||||
if (msg != NULL) {
|
||||
@@ -1578,6 +1585,7 @@
|
||||
char token[sizeof(watch) * 2 + 1];
|
||||
int error;
|
||||
|
||||
+ watch->pending = 0;
|
||||
sprintf(token, "%lX", (long)watch);
|
||||
|
||||
mtx_lock(&xs.registered_watches_lock);
|
||||
--- sys/dev/xen/xenstore/xenstore_dev.c.orig
|
||||
+++ sys/dev/xen/xenstore/xenstore_dev.c
|
||||
@@ -45,6 +45,7 @@
|
||||
#include <sys/conf.h>
|
||||
#include <sys/module.h>
|
||||
#include <sys/selinfo.h>
|
||||
+#include <sys/sysctl.h>
|
||||
#include <sys/poll.h>
|
||||
|
||||
#include <xen/xen-os.h>
|
||||
@@ -53,6 +54,8 @@
|
||||
#include <xen/xenstore/xenstorevar.h>
|
||||
#include <xen/xenstore/xenstore_internal.h>
|
||||
|
||||
+static unsigned int max_pending_watches = 1000;
|
||||
+
|
||||
struct xs_dev_transaction {
|
||||
LIST_ENTRY(xs_dev_transaction) list;
|
||||
struct xs_transaction handle;
|
||||
@@ -335,6 +338,7 @@
|
||||
watch->watch.node = strdup(wpath, M_XENSTORE);
|
||||
watch->watch.callback = xs_dev_watch_cb;
|
||||
watch->watch.callback_data = (uintptr_t)watch;
|
||||
+ watch->watch.max_pending = max_pending_watches;
|
||||
watch->token = strdup(wtoken, M_XENSTORE);
|
||||
watch->user = u;
|
||||
|
||||
@@ -511,6 +515,17 @@
|
||||
xs_dev_attach(device_t dev)
|
||||
{
|
||||
struct cdev *xs_cdev;
|
||||
+ struct sysctl_ctx_list *sysctl_ctx;
|
||||
+ struct sysctl_oid *sysctl_tree;
|
||||
+
|
||||
+ sysctl_ctx = device_get_sysctl_ctx(dev);
|
||||
+ sysctl_tree = device_get_sysctl_tree(dev);
|
||||
+ if (sysctl_ctx == NULL || sysctl_tree == NULL)
|
||||
+ return (EINVAL);
|
||||
+
|
||||
+ SYSCTL_ADD_UINT(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree), OID_AUTO,
|
||||
+ "max_pending_watch_events", CTLFLAG_RW, &max_pending_watches, 0,
|
||||
+ "maximum amount of pending watch events to be delivered");
|
||||
|
||||
xs_cdev = make_dev_credf(MAKEDEV_ETERNAL, &xs_dev_cdevsw, 0, NULL,
|
||||
UID_ROOT, GID_WHEEL, 0400, "xen/xenstore");
|
||||
--- sys/xen/xenbus/xenbus.c.orig
|
||||
+++ sys/xen/xenbus/xenbus.c
|
||||
@@ -102,48 +102,6 @@
|
||||
return ((state < (XenbusStateClosed + 1)) ? name[state] : "INVALID");
|
||||
}
|
||||
|
||||
-int
|
||||
-xenbus_watch_path(device_t dev, char *path, struct xs_watch *watch,
|
||||
- xs_watch_cb_t *callback, uintptr_t callback_data)
|
||||
-{
|
||||
- int error;
|
||||
-
|
||||
- watch->node = path;
|
||||
- watch->callback = callback;
|
||||
- watch->callback_data = callback_data;
|
||||
-
|
||||
- error = xs_register_watch(watch);
|
||||
-
|
||||
- if (error) {
|
||||
- watch->node = NULL;
|
||||
- watch->callback = NULL;
|
||||
- xenbus_dev_fatal(dev, error, "adding watch on %s", path);
|
||||
- }
|
||||
-
|
||||
- return (error);
|
||||
-}
|
||||
-
|
||||
-int
|
||||
-xenbus_watch_path2(device_t dev, const char *path,
|
||||
- const char *path2, struct xs_watch *watch,
|
||||
- xs_watch_cb_t *callback, uintptr_t callback_data)
|
||||
-{
|
||||
- int error;
|
||||
- char *state = malloc(strlen(path) + 1 + strlen(path2) + 1,
|
||||
- M_XENBUS, M_WAITOK);
|
||||
-
|
||||
- strcpy(state, path);
|
||||
- strcat(state, "/");
|
||||
- strcat(state, path2);
|
||||
-
|
||||
- error = xenbus_watch_path(dev, state, watch, callback, callback_data);
|
||||
- if (error) {
|
||||
- free(state,M_XENBUS);
|
||||
- }
|
||||
-
|
||||
- return (error);
|
||||
-}
|
||||
-
|
||||
void
|
||||
xenbus_dev_verror(device_t dev, int err, const char *fmt, va_list ap)
|
||||
{
|
||||
--- sys/xen/xenbus/xenbusb.c.orig
|
||||
+++ sys/xen/xenbus/xenbusb.c
|
||||
@@ -702,10 +702,21 @@
|
||||
ivars->xd_otherend_watch.node = statepath;
|
||||
ivars->xd_otherend_watch.callback = xenbusb_otherend_watch_cb;
|
||||
ivars->xd_otherend_watch.callback_data = (uintptr_t)ivars;
|
||||
+ /*
|
||||
+ * Other end state node watch, limit to one pending event
|
||||
+ * to prevent frontends from queuing too many events that
|
||||
+ * could cause resource starvation.
|
||||
+ */
|
||||
+ ivars->xd_otherend_watch.max_pending = 1;
|
||||
|
||||
ivars->xd_local_watch.node = ivars->xd_node;
|
||||
ivars->xd_local_watch.callback = xenbusb_local_watch_cb;
|
||||
ivars->xd_local_watch.callback_data = (uintptr_t)ivars;
|
||||
+ /*
|
||||
+ * Watch our local path, only writable by us or a privileged
|
||||
+ * domain, no need to limit.
|
||||
+ */
|
||||
+ ivars->xd_local_watch.max_pending = 0;
|
||||
|
||||
mtx_lock(&xbs->xbs_lock);
|
||||
xbs->xbs_connecting_children++;
|
||||
@@ -764,6 +775,12 @@
|
||||
xbs->xbs_device_watch.node = bus_node;
|
||||
xbs->xbs_device_watch.callback = xenbusb_devices_changed;
|
||||
xbs->xbs_device_watch.callback_data = (uintptr_t)xbs;
|
||||
+ /*
|
||||
+ * Allow for unlimited pending watches, as those are local paths
|
||||
+ * either controlled by the guest or only writable by privileged
|
||||
+ * domains.
|
||||
+ */
|
||||
+ xbs->xbs_device_watch.max_pending = 0;
|
||||
|
||||
TASK_INIT(&xbs->xbs_probe_children, 0, xenbusb_probe_children_cb, dev);
|
||||
|
||||
--- sys/xen/xenbus/xenbusvar.h.orig
|
||||
+++ sys/xen/xenbus/xenbusvar.h
|
||||
@@ -123,62 +123,6 @@
|
||||
return (xenbus_read_driver_state(xenbus_get_otherend_path(dev)));
|
||||
}
|
||||
|
||||
-/**
|
||||
- * Initialize and register a watch on the given path (client suplied storage).
|
||||
- *
|
||||
- * \param dev The XenBus device requesting the watch service.
|
||||
- * \param path The XenStore path of the object to be watched. The
|
||||
- * storage for this string must be stable for the lifetime
|
||||
- * of the watch.
|
||||
- * \param watch The watch object to use for this request. This object
|
||||
- * must be stable for the lifetime of the watch.
|
||||
- * \param callback The function to call when XenStore objects at or below
|
||||
- * path are modified.
|
||||
- * \param cb_data Client data that can be retrieved from the watch object
|
||||
- * during the callback.
|
||||
- *
|
||||
- * \return On success, 0. Otherwise an errno value indicating the
|
||||
- * type of failure.
|
||||
- *
|
||||
- * \note On error, the device 'dev' will be switched to the XenbusStateClosing
|
||||
- * state and the returned error is saved in the per-device error node
|
||||
- * for dev in the XenStore.
|
||||
- */
|
||||
-int xenbus_watch_path(device_t dev, char *path,
|
||||
- struct xs_watch *watch,
|
||||
- xs_watch_cb_t *callback,
|
||||
- uintptr_t cb_data);
|
||||
-
|
||||
-/**
|
||||
- * Initialize and register a watch at path/path2 in the XenStore.
|
||||
- *
|
||||
- * \param dev The XenBus device requesting the watch service.
|
||||
- * \param path The base XenStore path of the object to be watched.
|
||||
- * \param path2 The tail XenStore path of the object to be watched.
|
||||
- * \param watch The watch object to use for this request. This object
|
||||
- * must be stable for the lifetime of the watch.
|
||||
- * \param callback The function to call when XenStore objects at or below
|
||||
- * path are modified.
|
||||
- * \param cb_data Client data that can be retrieved from the watch object
|
||||
- * during the callback.
|
||||
- *
|
||||
- * \return On success, 0. Otherwise an errno value indicating the
|
||||
- * type of failure.
|
||||
- *
|
||||
- * \note On error, \a dev will be switched to the XenbusStateClosing
|
||||
- * state and the returned error is saved in the per-device error node
|
||||
- * for \a dev in the XenStore.
|
||||
- *
|
||||
- * Similar to xenbus_watch_path, however the storage for the path to the
|
||||
- * watched object is allocated from the heap and filled with "path '/' path2".
|
||||
- * Should a call to this function succeed, it is the callers responsibility
|
||||
- * to free watch->node using the M_XENBUS malloc type.
|
||||
- */
|
||||
-int xenbus_watch_path2(device_t dev, const char *path,
|
||||
- const char *path2, struct xs_watch *watch,
|
||||
- xs_watch_cb_t *callback,
|
||||
- uintptr_t cb_data);
|
||||
-
|
||||
/**
|
||||
* Grant access to the given ring_mfn to the peer of the given device.
|
||||
*
|
||||
--- sys/xen/xenstore/xenstorevar.h.orig
|
||||
+++ sys/xen/xenstore/xenstorevar.h
|
||||
@@ -70,6 +70,15 @@
|
||||
|
||||
/* Callback client data untouched by the XenStore watch mechanism. */
|
||||
uintptr_t callback_data;
|
||||
+
|
||||
+ /* Maximum number of pending watch events to be delivered. */
|
||||
+ unsigned int max_pending;
|
||||
+
|
||||
+ /*
|
||||
+ * Private counter used by xenstore to keep track of the pending
|
||||
+ * watches. Protected by xs.watch_events_lock.
|
||||
+ */
|
||||
+ unsigned int pending;
|
||||
};
|
||||
LIST_HEAD(xs_watch_list, xs_watch);
|
||||
|
18
website/static/security/patches/SA-21:02/xenoom.12.patch.asc
Normal file
18
website/static/security/patches/SA-21:02/xenoom.12.patch.asc
Normal file
|
@ -0,0 +1,18 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQKTBAABCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAmATbjRfFIAAAAAALgAo
|
||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
|
||||
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
|
||||
5cJXhg/8CoCazqYQC72fjKzdu5rTqi88S+LCO2/oQ8sB81Xd9994aTcCiCT16MgW
|
||||
oExB9ukEru7mz98ziwZiszkFGhnj8SvFqp8GaUdORILeLxN81Z8aUkXOAzZpk0yy
|
||||
Yd9yMxSL5YRcgcrxJKetArt97Pdkx0e5paNMniKWYxuGMGE0IJXc/OJmb1Gj+ZTe
|
||||
BSHInbD57GG6DYBDgLGm4Lu6FMrG+ukt2SUFxRQl0usgNE1zseXIjSxMPymh0I4j
|
||||
guCo0gNxHow44xgEXOUD1X2K1hsr8TNxwvl5i9Pwv8MFubPU4qPcBOcMvM/i5YR2
|
||||
3uvnK5oRqNjwS/EHUBZ2jonSmNN89mqdPjctaMNypcUPDsIqINw/Qd6TNnv3DjS1
|
||||
34cNBWzBYt9ccf5JC/KWfDyZxWpOku18DdFOcsi9MSubmQaxj5SRMfh0QamZPZ3p
|
||||
06JcJbcVZyRoMnD/NcFJTd6pfnrPKrJ9IVOvBesm3MpMsWywRQgVM79xly3HuhLV
|
||||
M8JTm9TKNVJPNGEeXW8MzjYJO2hDgTMwt6SWkxhNMQnajr3weqV5u+5X1wjZsAzr
|
||||
pWVXYZTkxNcyAcLvMahjuB6av4lc763MdqorgRHdpLdwr4w45pCLqxRR9O1OVY2g
|
||||
k0uKTKB1WQAIeK2VTpM/ZjPuNc+k0sVyYR9Sy70P0k76drICqUk=
|
||||
=5Wei
|
||||
-----END PGP SIGNATURE-----
|
Loading…
Reference in a new issue