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
|
# Sort advisories by year, month and day
|
||||||
# $FreeBSD$
|
# $FreeBSD$
|
||||||
|
|
||||||
|
[[advisories]]
|
||||||
|
name = "FreeBSD-SA-21:02.xenoom"
|
||||||
|
date = "2021-01-29"
|
||||||
|
|
||||||
|
[[advisories]]
|
||||||
|
name = "FreeBSD-SA-21:01.fsdisclosure"
|
||||||
|
date = "2021-01-29"
|
||||||
|
|
||||||
[[advisories]]
|
[[advisories]]
|
||||||
name = "FreeBSD-SA-20:33.openssl"
|
name = "FreeBSD-SA-20:33.openssl"
|
||||||
date = "2020-12-08"
|
date = "2020-12-08"
|
||||||
|
|
|
@ -1,6 +1,26 @@
|
||||||
# Sort errata notices by year, month and day
|
# Sort errata notices by year, month and day
|
||||||
# $FreeBSD$
|
# $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]]
|
[[notices]]
|
||||||
name = "FreeBSD-EN-20:22.callout"
|
name = "FreeBSD-EN-20:22.callout"
|
||||||
date = "2020-12-01"
|
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