Publish todays advisories.
Approved by: so
This commit is contained in:
parent
54307e8eb4
commit
f77f7192a0
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=48011
33 changed files with 35398 additions and 0 deletions
124
share/security/advisories/FreeBSD-EN-16:01.filemon.asc
Normal file
124
share/security/advisories/FreeBSD-EN-16:01.filemon.asc
Normal file
|
@ -0,0 +1,124 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-EN-16:01.filemon Errata Notice
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: filemon and bmake meta-mode stability issues
|
||||
|
||||
Category: core
|
||||
Module: filemon
|
||||
Announced: 2016-01-14
|
||||
Credits: Bryan Drewery
|
||||
Affects: FreeBSD 10.2-RELEASE
|
||||
Corrected: 2015-09-09 17:15:13 UTC (stable/10, 10.2-STABLE)
|
||||
2016-01-14 09:10:46 UTC (releng/10.2, 10.2-RELEASE-p9)
|
||||
|
||||
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
|
||||
|
||||
In FreeBSD 10.2, /usr/bin/make is the NetBSD bmake utility. bmake has
|
||||
a feature called meta-mode [1], which can make use of the filemon(4) kernel
|
||||
module to perform reliable update builds and provide better build
|
||||
dependencies.
|
||||
[1] http://www.crufty.net/sjg/blog/freebsd-meta-mode.htm
|
||||
|
||||
II. Problem Description
|
||||
|
||||
Multiple stability and locking problems have been fixed in the filemon(4)
|
||||
kernel module. Without these fixes, using meta-mode and filemon(4) on a
|
||||
FreeBSD 10.2 system may result in kernel panics.
|
||||
|
||||
III. Impact
|
||||
|
||||
For the jails and virtual machines used by the FreeBSD Jenkins Continuous
|
||||
Integration builders, it is desirable to use released versions FreeBSD.
|
||||
This will allow us to set up builders to test building FreeBSD-CURRENT with
|
||||
meta-mode, using a FreeBSD 10.2-RELEASE-p9 build host.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
No workaround is available for the filemon stability problems.
|
||||
|
||||
V. Solution
|
||||
|
||||
Perform one of the following:
|
||||
|
||||
1) Upgrade your system to a supported FreeBSD stable or release / security
|
||||
branch (releng) dated after the correction date.
|
||||
|
||||
2) To update your present 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
|
||||
|
||||
3) To update your present 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-16:01/filemon.patch
|
||||
# fetch https://security.FreeBSD.org/patches/EN-16:01/filemon.patch.asc
|
||||
# gpg --verify filemon.patch.asc
|
||||
|
||||
b) Apply the patch. Execute the following commands as root:
|
||||
|
||||
# cd /usr/src
|
||||
# patch < /path/to/patch
|
||||
|
||||
c) Recompile your kernel as described in
|
||||
<URL:https://www.FreeBSD.org/handbook/kernelconfig.html> and reboot the
|
||||
system.
|
||||
|
||||
VI. Correction details
|
||||
|
||||
The following list contains the correction revision numbers for each
|
||||
affected branch.
|
||||
|
||||
Branch/path Revision
|
||||
- -------------------------------------------------------------------------
|
||||
stable/10 r287598
|
||||
releng/10.2 r293893
|
||||
- -------------------------------------------------------------------------
|
||||
|
||||
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 Errata Notice is available at
|
||||
<URL:https://security.FreeBSD.org/advisories/FreeBSD-EN-16:01.filemon.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAEBCgAGBQJWl2jlAAoJEO1n7NZdz2rnF6kQAJEgtPKwowupOd3QV2UvMJ4T
|
||||
PP/UK9tvF+Tbmow+5z9vV8ghh/oHc/AUWxhbIcnOFO7YldwrYJDXAHWF5VoTgatb
|
||||
Ycg+R10Kyg8loZZuAAaGsY+zS78BIXunKVduWealz6TV978sZ5mr7qVJjX03Bvdh
|
||||
9s3dX6PLfA0ZtqxXuhJ3oMj1Nt7UoGyNNNg23TWhQDMzpueB1EihhjzcLEk8UCjR
|
||||
OlZElMXsnI/c9zG0eaSDPqfUuQrZDasQ+kM4eWaEXxcZVHSEQtU7vJ6SjxAkeCHT
|
||||
fzRcAilzQBQJzObzpdXCxrd3OmKL52Ml44Kll2k31QQM3YDHw5g+mMJ+G6BoD5HZ
|
||||
hQktb7Y064s/SQ0S91aTCgdSBzlTOny7IjsE1W+T6WD4Dohc1aY5y5u2UDBIRIS9
|
||||
BvovQF9k0PXIqpA3DjV1cGp3oYLpmJc5NYqHuJ9hkQWSp8FntfuQ1gKpieznyg25
|
||||
mb7fsOU693Dglcodtz1uQcwwgh/0s7bEcP6o7ejzsd4bzhe9CTLgD5qp0MD8htiH
|
||||
Li+i9O5hUS8nheJt03btw/mq7CPbr66JWnpVHmPe8kL8SU7qmwBwq6d3buk5Hyr1
|
||||
tOmpuTyW+dq4iWweG411/j9M8Q03fD/DI4Ez2KS5OTizNAWb2wq8e+OZIk6TDE37
|
||||
Aam3KrksQZjG+sqL7NVp
|
||||
=INcx
|
||||
-----END PGP SIGNATURE-----
|
149
share/security/advisories/FreeBSD-EN-16:02.pf.asc
Normal file
149
share/security/advisories/FreeBSD-EN-16:02.pf.asc
Normal file
|
@ -0,0 +1,149 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-EN-16:02.pf Errata Notice
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: Invalid TCP checksums with pf(4)
|
||||
|
||||
Category: core
|
||||
Module: pf
|
||||
Announced: 2016-01-14
|
||||
Credits: Kristof Provost <kp@FreeBSD.org>
|
||||
Affects: All supported versions of FreeBSD.
|
||||
Corrected: 2015-11-11 12:36:42 UTC (stable/10, 10.2-STABLE)
|
||||
2016-01-14 09:10:46 UTC (releng/10.2, 10.2-RELEASE-p9)
|
||||
2016-01-14 09:11:16 UTC (releng/10.1, 10.1-RELEASE-p26)
|
||||
2015-12-25 15:12:54 UTC (stable/9, 9.3-STABLE)
|
||||
2016-01-14 09:11:26 UTC (releng/9.3, 9.3-RELEASE-p33)
|
||||
|
||||
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 pf(4) is one of several packet filters available in FreeBSD, originally
|
||||
written for OpenBSD. In addition to filtering packets, it also has packet
|
||||
normalization capabilities.
|
||||
|
||||
II. Problem Description
|
||||
|
||||
When running with certain network interfaces, capable for hardware transmit
|
||||
checksum offloading, or TCP segmentation offload, pf(4) produces packets with
|
||||
invalid TCP checksums.
|
||||
|
||||
III. Impact
|
||||
|
||||
The TCP packets with invalid checksums are rejected by the remote host,
|
||||
leading to large performance impacts or inability to successfully run
|
||||
a TCP connection.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
Disable transmit checksum offloading and TSO support on the affected
|
||||
network interface:
|
||||
|
||||
# ifconfig ue0 -txcsum -tso
|
||||
|
||||
V. Solution
|
||||
|
||||
Perform one of the following:
|
||||
|
||||
1) Upgrade your system to a supported FreeBSD stable or release / security
|
||||
branch (releng) dated after the correction date.
|
||||
|
||||
Reboot the system or unload and reload the pf.ko kernel module.
|
||||
|
||||
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
|
||||
|
||||
Reboot the system or unload and reload the pf.ko kernel module.
|
||||
|
||||
3) To update your system via a source code patch:
|
||||
|
||||
The following patches have been verified to apply to the applicable
|
||||
FreeBSD release branches.
|
||||
|
||||
a) Download the relevant patch from the location below, and verify the
|
||||
detached PGP signature using your PGP utility.
|
||||
|
||||
[FreeBSD 10.2]
|
||||
# fetch https://security.FreeBSD.org/patches/EN-16:02/pf-10.2.patch
|
||||
# fetch https://security.FreeBSD.org/patches/EN-16:02/pf-10.2.patch.asc
|
||||
# gpg --verify pf-10.2.patch.asc
|
||||
|
||||
[FreeBSD 10.1]
|
||||
# fetch https://security.FreeBSD.org/patches/EN-16:02/pf-10.1.patch
|
||||
# fetch https://security.FreeBSD.org/patches/EN-16:02/pf-10.1.patch.asc
|
||||
# gpg --verify pf-10.1.patch.asc
|
||||
|
||||
[FreeBSD 9.3]
|
||||
# fetch https://security.FreeBSD.org/patches/EN-16:02/pf-9.3.patch
|
||||
# fetch https://security.FreeBSD.org/patches/EN-16:02/pf-9.3.patch.asc
|
||||
# gpg --verify pf-9.3.patch.asc
|
||||
|
||||
b) Apply the patch. Execute the following commands as root:
|
||||
|
||||
# cd /usr/src
|
||||
# patch < /path/to/patch
|
||||
|
||||
c) Recompile your kernel as described in
|
||||
<URL:https://www.FreeBSD.org/handbook/kernelconfig.html> and reboot the
|
||||
system or unload and reload the pf.ko kernel module.
|
||||
|
||||
VI. Correction details
|
||||
|
||||
The following list contains the correction revision numbers for each
|
||||
affected branch.
|
||||
|
||||
Branch/path Revision
|
||||
- -------------------------------------------------------------------------
|
||||
stable/9/ r292732
|
||||
releng/9.3/ r293896
|
||||
stable/10/ r290669
|
||||
releng/10.1/ r293894
|
||||
releng/10.2/ r293893
|
||||
- -------------------------------------------------------------------------
|
||||
|
||||
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=154428>
|
||||
<URL:https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=193579>
|
||||
<URL:https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=198868>
|
||||
|
||||
The latest revision of this advisory is available at
|
||||
<URL:https://security.FreeBSD.org/advisories/FreeBSD-EN-16:02.pf.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAEBCgAGBQJWl2rlAAoJEO1n7NZdz2rnv0QP/RXPzKbSRsyyX3914BJv/W4V
|
||||
coLFodRd62WxPvFIOXaLbNsVSi1yqRqNS3BPNTXnldEvjZWS5HsRlY5inq7hCjOn
|
||||
NzZFIBVD3aL3eIXBUghNHTcCp3Ml5zIzcGUwJ0wW4F8j3D8Ty0YbJs+E7Ku63DIb
|
||||
3rR2Mj1Jcoxi4JNVaQ962JlRrqauQUIiFbS0bSmP/cQCUlvhm+uk8Yj1KgSYesSu
|
||||
n+lQAipH2zZWGjVj1xxvqi4cUcr6J6LEF0eTmg+UoM24vhq+QNql5aactYMOORiW
|
||||
f+80HOWm6R8F/6TI2xs7HpNfnQNuNBRTfmfViQB8GgzgV2juElcTXW4NKXALrkWy
|
||||
HxAfv6wdhDxclOXzumUXDOXC90o62Jv5gWiToJWLyETHI1vTe4UuE0egejFHSDJB
|
||||
bmFpbYeuvXJ5/3dAYHHtnjtIPE9PXG+c16eJr3XDkY4plreL/hpyDHFRd3scqWew
|
||||
EvPnkYcXZmzpCC/wZbDM5sI76YAfX7vayVqsUI0X4WRueYyIljRQGwygwfmHWiac
|
||||
HIrgLgJvXZCGXiiuSpZq5874er0/UN9czGuMVOFZoXZ45yuj99pO1rJNZryO926A
|
||||
UAOsC76m78myPrM+a4dJDrnWKgZjputCEBHXXNS8Yxt1cimrrbAb2wy0gt1CIMFm
|
||||
cuAfikAwdNj3JAvjS4oA
|
||||
=Aw1R
|
||||
-----END PGP SIGNATURE-----
|
139
share/security/advisories/FreeBSD-EN-16:03.yplib.asc
Normal file
139
share/security/advisories/FreeBSD-EN-16:03.yplib.asc
Normal file
|
@ -0,0 +1,139 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-EN-16:03.ypclnt Errata Notice
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: YP/NIS client library critical bug
|
||||
|
||||
Category: core
|
||||
Module: ypclnt
|
||||
Announced: 2016-01-14
|
||||
Credits: Ravi Pokala,
|
||||
Lakshmi Narasimhan Sundararajan,
|
||||
Fred Lewis,
|
||||
Pushkar Kothavade
|
||||
Affects: All supported versions of FreeBSD.
|
||||
Corrected: 2015-12-21 14:32:29 UTC (stable/10, 10.2-STABLE)
|
||||
2016-01-14 09:10:46 UTC (releng/10.2, 10.2-RELEASE-p9)
|
||||
2016-01-14 09:11:16 UTC (releng/10.1, 10.1-RELEASE-p26)
|
||||
2016-01-13 05:32:24 UTC (stable/9, 9.3-STABLE)
|
||||
2016-01-14 09:11:26 UTC (releng/9.3, 9.3-RELEASE-p33)
|
||||
|
||||
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 YP/NIS subsystem allows network management of passwd, group, netgroup,
|
||||
hosts, services, rpc, bootparams and ethers file entries. The ypclnt suite
|
||||
provides an interface to the YP subsystem.
|
||||
|
||||
The standard NIS protocol limits its database entries to YPMAXRECORD (1024
|
||||
characters).
|
||||
|
||||
II. Problem Description
|
||||
|
||||
There is a bug with the NIS client library, which can lead to an infinite
|
||||
loop.
|
||||
|
||||
III. Impact
|
||||
|
||||
A server that is deliberately configured to violate the NIS/YP protocol can
|
||||
cause a FreeBSD NIS client to be stuck forever.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
No workaround is available, but systems that are not configured to use
|
||||
NIS/YP are not affected.
|
||||
|
||||
V. Solution
|
||||
|
||||
Perform one of the following:
|
||||
|
||||
1) Upgrade your system to a supported FreeBSD stable or release / security
|
||||
branch (releng) dated after the correction date.
|
||||
|
||||
A reboot is recommended.
|
||||
|
||||
2) To update your system via a binary patch:
|
||||
|
||||
Systems running a RELEASE version of FreeBSD on the i386 or amd64
|
||||
platforms can be updated via the freebsd-update(8) utility:
|
||||
|
||||
# freebsd-update fetch
|
||||
# freebsd-update install
|
||||
|
||||
A reboot is recommended.
|
||||
|
||||
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-16:03/yplib.patch
|
||||
# fetch https://security.FreeBSD.org/patches/EN-16:03/yplib.patch.asc
|
||||
# gpg --verify yplib.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>.
|
||||
|
||||
A reboot is recommended.
|
||||
|
||||
VI. Correction details
|
||||
|
||||
The following list contains the correction revision numbers for each
|
||||
affected branch.
|
||||
|
||||
Branch/path Revision
|
||||
- -------------------------------------------------------------------------
|
||||
stable/9/ r293804
|
||||
releng/9.3/ r293896
|
||||
stable/10/ r292547
|
||||
releng/10.1/ r293894
|
||||
releng/10.2/ r293893
|
||||
- -------------------------------------------------------------------------
|
||||
|
||||
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://reviews.freebsd.org/D4095>
|
||||
|
||||
The latest revision of this advisory is available at
|
||||
<URL:https://security.FreeBSD.org/advisories/FreeBSD-EN-16:03.ypclnt.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAEBCgAGBQJWl2j1AAoJEO1n7NZdz2rnRZQP/iZq/xlDFZrxwpW4S0GimmmK
|
||||
CdB9yE8rITW2XRWIaTW+fj4aqQ8cvD3IpqtgPe1wCXe69XgmICPwwBh/zNB4w0qu
|
||||
xmyihP6/2qTLatIq886StqXRkS+05U5y4VoEwFaRkBCy3IWDVXgM41DsRhOuYq3y
|
||||
Y72VNeJFSuD+qb0i0B56PpPhaVd7hyEgvuXLXxi3l/BiUMD9t4Z36W8a2IPrF1wa
|
||||
wviTB6cr614dzH+Jou+d9ffKoD6TWeZtbcf1jrw12YVBJhPx3vCqPVJGerGRUwVF
|
||||
TeD4cUyHmY1nRa4zssKJcbAbgbYGtumRZTysa50eXBVsd7MTloZk0o8Angr6uGeR
|
||||
rRo8Sop8PbwWm81Zykb4lIBOVUB4TsEfMjusKhgcJ5kmd+gK8z1ZzE/ZlOes2UJ8
|
||||
eH+LOEKjux3c9UKkz6RDWinM277J5fhZ5Zi6jO6n/LrJRKiqKud6VeHQLOElXye7
|
||||
/8KFqCaym8JpZ0P3Cywid+2EyqjlNwvsZleDs8EE/d1+60yX+Qm2j+BKAfqhSyLD
|
||||
a9TimJTsEMA47Rf3af2lx1q4bnrKJVSBGhNaNzDHe5UIge0FAt8uUwgL/yIDpBlS
|
||||
/5TtnD3F30B34482sAf4u/WW/1ipppIFEe8i6d9uwIGjG9Z5eVVom2FJbAHHdVA6
|
||||
w8xVZil5irkB2fdI1DOi
|
||||
=A4Qy
|
||||
-----END PGP SIGNATURE-----
|
145
share/security/advisories/FreeBSD-SA-16:01.sctp.asc
Normal file
145
share/security/advisories/FreeBSD-SA-16:01.sctp.asc
Normal file
|
@ -0,0 +1,145 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-SA-16:01.sctp Security Advisory
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: SCTP ICMPv6 error message vulnerability
|
||||
|
||||
Category: core
|
||||
Module: SCTP
|
||||
Announced: 2016-01-14
|
||||
Credits: Jonathan T. Looney
|
||||
Affects: All supported versions of FreeBSD
|
||||
Corrected: 2016-01-14 09:11:42 UTC (stable/10, 10.2-STABLE)
|
||||
2016-01-14 09:10:46 UTC (releng/10.2, 10.2-RELEASE-p9)
|
||||
2016-01-14 09:11:16 UTC (releng/10.1, 10.1-RELEASE-p26)
|
||||
2016-01-14 09:11:48 UTC (stable/9, 9.3-STABLE)
|
||||
2016-01-14 09:11:26 UTC (releng/9.3, 9.3-RELEASE-p33)
|
||||
CVE Name: CVE-2016-1879
|
||||
|
||||
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 Stream Control Transmission Protocol (SCTP) protocol provides reliable,
|
||||
flow-controlled, two-way transmission of data.
|
||||
|
||||
The Internet Control Message Protocol for IPv6 (ICMPv6) provides a way for
|
||||
hosts on the Internet to exchange control information. Among other uses,
|
||||
a host or router can use ICMPv6 to inform a host when there is an error
|
||||
delivering a packet sent by that host.
|
||||
|
||||
II. Problem Description
|
||||
|
||||
A lack of proper input checks in the ICMPv6 processing in the SCTP stack
|
||||
can lead to either a failed kernel assertion or to a NULL pointer
|
||||
dereference. In either case, a kernel panic will follow.
|
||||
|
||||
III. Impact
|
||||
|
||||
A remote, unauthenticated attacker can reliably trigger a kernel panic
|
||||
in a vulnerable system running IPv6. Any kernel compiled with both IPv6
|
||||
and SCTP support is vulnerable. There is no requirement to have an SCTP
|
||||
socket open.
|
||||
|
||||
IPv4 ICMP processing is not impacted by this vulnerability.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
No workaround is available, but systems using a kernel compiled without
|
||||
SCTP support or IPv6 support are not vulnerable.
|
||||
|
||||
In addition, some stateful firewalls may block ICMPv6 messages that are
|
||||
not responding to a legitimate connection. (However, this may not
|
||||
completely block the problem, as an ICMPv6 message could still be sent
|
||||
in response to a legitimate SCTP connection.)
|
||||
|
||||
V. Solution
|
||||
|
||||
Perform one of the following:
|
||||
|
||||
1) Upgrade your vulnerable system to a supported FreeBSD stable or
|
||||
release / security branch (releng) dated after the correction date.
|
||||
Rebooting to the new kernel is required.
|
||||
|
||||
2) To update your vulnerable system via a binary patch:
|
||||
|
||||
Systems running a RELEASE version of FreeBSD on the i386 or amd64
|
||||
platforms can be updated via the freebsd-update(8) utility:
|
||||
|
||||
# freebsd-update fetch
|
||||
# freebsd-update install
|
||||
|
||||
Rebooting to the new kernel is required.
|
||||
|
||||
3) To update your vulnerable system via a source code patch:
|
||||
|
||||
The following patches have been verified to apply to the applicable
|
||||
FreeBSD release branches.
|
||||
|
||||
a) Download the relevant patch from the location below, and verify the
|
||||
detached PGP signature using your PGP utility.
|
||||
|
||||
# fetch https://security.FreeBSD.org/patches/SA-16:01/sctp.patch
|
||||
# fetch https://security.FreeBSD.org/patches/SA-16:01/sctp.patch.asc
|
||||
# gpg --verify sctp.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/9/ r293898
|
||||
releng/9.3/ r293896
|
||||
stable/10/ r293897
|
||||
releng/10.1/ r293894
|
||||
releng/10.2/ r293893
|
||||
- -------------------------------------------------------------------------
|
||||
|
||||
To see which files were modified by a particular revision, run the
|
||||
following command, replacing NNNNNN with the revision number, on a
|
||||
machine with Subversion installed:
|
||||
|
||||
# svn diff -cNNNNNN --summarize svn://svn.freebsd.org/base
|
||||
|
||||
Or visit the following URL, replacing NNNNNN with the revision number:
|
||||
|
||||
<URL:https://svnweb.freebsd.org/base?view=revision&revision=NNNNNN>
|
||||
|
||||
VII. References
|
||||
|
||||
<URL:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1879>
|
||||
|
||||
The latest revision of this advisory is available at
|
||||
<URL:https://security.FreeBSD.org/advisories/FreeBSD-SA-16:01.sctp.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAEBCgAGBQJWl2j1AAoJEO1n7NZdz2rnIfoQAOZTLX3VovQPGj9wr7PspLQi
|
||||
Tazu6vRnjzdOdjpeWwSgYlq6DJGjT71c/BRyCWCoijr2uyBWRlANqzMO64thuTzx
|
||||
gc6juRlChLDF4sNVWbNDMRwuHTfCpgDH2/4hQeR/9CmiQxHJyqL0gXc889D206i9
|
||||
KzgmYrSALEVK0E2kDBeRMsadtqPIEzCw4LygWd4qrtYNPjAfBR/a9U4rg7ZN0ICZ
|
||||
RCPnkAF6qI09B931QfHaI4C9wdBF8DJ6nKN/2aU9ATdOJJb7oUkpaHht8kmbdZS+
|
||||
Tn12nEXkQvNxuAKT7Fb87M14s7LUR12V5wgDeMd2UtOfkeSpGEDFACdhYW3IpKan
|
||||
gD+2IlzLRhoQTJ7lQWMRTKh3OiDDR2kLwvbEU7BGecDSG6fVkgumn6NlHYybdH7L
|
||||
axpDOxPz8ITfcdRipIXLOQEC308ckdmaEwqi4ikgBGwEkSgIwj1flGStswvcMrim
|
||||
vT0xof2dv1y6RW5xYnJF7Mtn/rEcqrql/BeBp/kxJZ2Qt3hkppQnjWD6kvrEj00s
|
||||
CajzxdBTM7J3buDzu++RL2GL9p5Cwo1kDmUJdWimIbSecL62J9+PwFCDYp/dOy25
|
||||
GAPGnf7gk8YhwM8pHwLtcX0b9UundkXLWnLBN7R12fL7Ch2CmPbgPcoFc5CSbcIx
|
||||
TBRU+4TGcNGxigXyzIHT
|
||||
=G0DD
|
||||
-----END PGP SIGNATURE-----
|
155
share/security/advisories/FreeBSD-SA-16:02.ntp.asc
Normal file
155
share/security/advisories/FreeBSD-SA-16:02.ntp.asc
Normal file
|
@ -0,0 +1,155 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-SA-16:02.ntp Security Advisory
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: ntp panic threshold bypass vulnerability
|
||||
|
||||
Category: contrib
|
||||
Module: ntp
|
||||
Announced: 2016-01-14
|
||||
Credits: Network Time Foundation
|
||||
Affects: All supported versions of FreeBSD.
|
||||
Corrected: 2016-01-11 01:09:50 UTC (stable/10, 10.2-STABLE)
|
||||
2016-01-14 09:10:46 UTC (releng/10.2, 10.2-RELEASE-p9)
|
||||
2016-01-14 09:11:16 UTC (releng/10.1, 10.1-RELEASE-p26)
|
||||
2016-01-11 01:48:16 UTC (stable/9, 9.3-STABLE)
|
||||
2016-01-14 09:11:26 UTC (releng/9.3, 9.3-RELEASE-p33)
|
||||
CVE Name: CVE-2015-5300
|
||||
|
||||
For general information regarding FreeBSD Security Advisories,
|
||||
including descriptions of the fields above, security branches, and the
|
||||
following sections, please visit <URL:https://security.FreeBSD.org/>.
|
||||
|
||||
I. Background
|
||||
|
||||
The ntpd(8) daemon is an implementation of the Network Time Protocol (NTP)
|
||||
used to synchronize the time of a computer system to a reference time
|
||||
source.
|
||||
|
||||
II. Problem Description
|
||||
|
||||
The ntpd(8) daemon has a safety feature to prevent excessive stepping of
|
||||
the clock called the "panic threshold". If ever ntpd(8) determines the
|
||||
system clock is incorrect by more than this threshold, the daemon exits.
|
||||
There is an implementation error within the ntpd(8) implementation of this
|
||||
feature, which allows the system time be adjusted in certain circumstances.
|
||||
|
||||
III. Impact
|
||||
|
||||
When ntpd(8) is started with the '-g' option specified, the system time will
|
||||
be corrected regardless of if the time offset exceeds the panic threshold (by
|
||||
default, 1000 seconds). The FreeBSD rc(8) subsystem allows specifying the
|
||||
'-g' option by either including '-g' in the ntpd_flags list or by enabling
|
||||
ntpd_sync_on_start in the system rc.conf(5) file.
|
||||
|
||||
If at the moment ntpd(8) is restarted, an attacker can immediately respond to
|
||||
enough requests from enough sources trusted by the target, which is difficult
|
||||
and not common, there is a window of opportunity where the attacker can cause
|
||||
ntpd(8) to set the time to an arbitrary value.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
No workaround is available, but systems not running ntpd(8), or running
|
||||
ntpd(8) but do not use ntpd_sync_on_start="YES" or specify the '-g' option in
|
||||
ntpd_flags are not affected. Neither of these are set by default.
|
||||
|
||||
V. Solution
|
||||
|
||||
Perform one of the following:
|
||||
|
||||
1) Upgrade your vulnerable system to a supported FreeBSD stable or
|
||||
release / security branch (releng) dated after the correction date.
|
||||
|
||||
The ntpd service has to be restarted after the update. A reboot is
|
||||
recommended but not required.
|
||||
|
||||
2) To update your vulnerable system via a binary patch:
|
||||
|
||||
Systems running a RELEASE version of FreeBSD on the i386 or amd64
|
||||
platforms can be updated via the freebsd-update(8) utility:
|
||||
|
||||
# freebsd-update fetch
|
||||
# freebsd-update install
|
||||
|
||||
The ntpd service has to be restarted after the update. A reboot is
|
||||
recommended but not required.
|
||||
|
||||
3) To update your vulnerable system via a source code patch:
|
||||
|
||||
The following patches have been verified to apply to the applicable
|
||||
FreeBSD release branches.
|
||||
|
||||
a) Download the relevant patch from the location below, and verify the
|
||||
detached PGP signature using your PGP utility.
|
||||
|
||||
[FreeBSD 10.1 and 10.2]
|
||||
# fetch https://security.FreeBSD.org/patches/SA-16:02/ntp-10.patch
|
||||
# fetch https://security.FreeBSD.org/patches/SA-16:02/ntp-10.patch.asc
|
||||
# gpg --verify ntp-10.patch.asc
|
||||
|
||||
[FreeBSD 9.3]
|
||||
# fetch https://security.FreeBSD.org/patches/SA-16:02/ntp-9.patch
|
||||
# fetch https://security.FreeBSD.org/patches/SA-16:02/ntp-9.patch.asc
|
||||
# gpg --verify ntp-9.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 the applicable daemons, or reboot the system.
|
||||
|
||||
VI. Correction details
|
||||
|
||||
The following list contains the correction revision numbers for each
|
||||
affected branch.
|
||||
|
||||
Branch/path Revision
|
||||
- -------------------------------------------------------------------------
|
||||
stable/9/ r293652
|
||||
releng/9.3/ r293896
|
||||
stable/10/ r293650
|
||||
releng/10.1/ r293894
|
||||
releng/10.2/ r293893
|
||||
- -------------------------------------------------------------------------
|
||||
|
||||
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://www.cs.bu.edu/~goldbe/NTPattack.html>
|
||||
|
||||
<URL:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-5300>
|
||||
|
||||
The latest revision of this advisory is available at
|
||||
<URL:https://security.FreeBSD.org/advisories/FreeBSD-SA-16:02.ntp.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAEBCgAGBQJWl2j2AAoJEO1n7NZdz2rnyg4QAJ/x3xs+pNGXxTT63hbBqLcB
|
||||
NTSljW5+hFpL94Nr+rHrelvcT3HkvdWUC+7BvMksoUYCZv0vClp5W7tsfuojDPr0
|
||||
GechK1BpLwxeLnRexulWEuvDQpbr6BN9ABdfSl4h3AaUwGYbBVLMY8aT5JpTiE3I
|
||||
UZg/5iPXVGFPcfdFhzaPgCpZxQtGI3QV7m5jx+Pf8r0ifuTNi8bAbwHCRzmOV8rA
|
||||
1LM4fvlCPd6TiP3UANWM7PFGbX8UArgzXlb8jSwkxEVC02oZitol4UhcLgacwVrO
|
||||
0/0q71pyn8W3NBQ1QPUaUg1M81sE501NCTCP3rEg+o6g7oxiq+GpgB0FKwCJxrTk
|
||||
n3EL7tyhbvVcsglPLRkIXkGz3o5XdelFJ66+qS+mZAiPozkzEFUIdxd8rHKsA1e4
|
||||
ZIFARDvDgi8iTArbJnPsQH0CgK8+/2RV2ILFW00Zcu7batvSWJtAUNNFqTSN34tk
|
||||
JJzHWYwKfGwRIMyEABsy9wLez9K2tRIG0fX75p82dVbRcRZwwSfPmFdfDPuMRRmc
|
||||
dsNF3133TA92uxwZ177cZk537g+Q0/0I6bts8us3GlCdY2HBuIc+HvRJQyEEqGEv
|
||||
v1GfEdnwGLp4rmPI8uY+JQ87now7KYhAK1SVil9AXm3tLrIqJsHYayA9nI8mjxfY
|
||||
Mh1utEeP+TMuievDMQNo
|
||||
=il8c
|
||||
-----END PGP SIGNATURE-----
|
133
share/security/advisories/FreeBSD-SA-16:03.linux.asc
Normal file
133
share/security/advisories/FreeBSD-SA-16:03.linux.asc
Normal file
|
@ -0,0 +1,133 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-SA-16:03.linux Security Advisory
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: Linux compatibility layer incorrect futex handling
|
||||
|
||||
Category: core
|
||||
Module: kernel
|
||||
Announced: 2016-01-14
|
||||
Credits: Mateusz Guzik
|
||||
Affects: All supported versions of FreeBSD.
|
||||
Corrected: 2016-01-14 09:11:42 UTC (stable/10, 10.2-STABLE)
|
||||
2016-01-14 09:10:46 UTC (releng/10.2, 10.2-RELEASE-p9)
|
||||
2016-01-14 09:11:16 UTC (releng/10.1, 10.1-RELEASE-p26)
|
||||
2016-01-14 09:11:48 UTC (stable/9, 9.3-STABLE)
|
||||
2016-01-14 09:11:26 UTC (releng/9.3, 9.3-RELEASE-p33)
|
||||
CVE Name: CVE-2016-1880
|
||||
|
||||
For general information regarding FreeBSD Security Advisories,
|
||||
including descriptions of the fields above, security branches, and the
|
||||
following sections, please visit <URL:http://security.FreeBSD.org/>.
|
||||
|
||||
I. Background
|
||||
|
||||
FreeBSD is binary-compatible with the Linux operating system through a
|
||||
loadable kernel module/optional kernel component. The support is
|
||||
provided on amd64 and i386 machines.
|
||||
|
||||
II. Problem Description
|
||||
|
||||
A programming error in the handling of Linux futex robust lists may result
|
||||
in incorrect memory locations being accessed.
|
||||
|
||||
III. Impact
|
||||
|
||||
It is possible for a local attacker to read portions of kernel memory, which
|
||||
may result in a privilege escalation.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
No workaround is available, but systems not using the Linux binary
|
||||
compatibility layer are not vulnerable.
|
||||
|
||||
The following command can be used to test if the Linux binary
|
||||
compatibility layer is loaded:
|
||||
|
||||
# kldstat -m linuxelf
|
||||
|
||||
V. Solution
|
||||
|
||||
Perform one of the following:
|
||||
|
||||
1) Upgrade your vulnerable system to a supported FreeBSD stable or
|
||||
release / security branch (releng) dated after the correction date.
|
||||
|
||||
Reboot the system or unload and reload the linux.ko kernel module.
|
||||
|
||||
2) To update your vulnerable system via a binary patch:
|
||||
|
||||
Systems running a RELEASE version of FreeBSD on the i386 or amd64
|
||||
platforms can be updated via the freebsd-update(8) utility:
|
||||
|
||||
# freebsd-update fetch
|
||||
# freebsd-update install
|
||||
|
||||
Reboot the system or unload and reload the linux.ko kernel module.
|
||||
|
||||
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.
|
||||
|
||||
# fetch http://security.FreeBSD.org/patches/SA-16:03/linux.patch
|
||||
# fetch http://security.FreeBSD.org/patches/SA-16:03/linux.patch.asc
|
||||
|
||||
b) Apply the patch.
|
||||
|
||||
# cd /usr/src
|
||||
# patch < /path/to/patch
|
||||
# cd /usr/src/amd64/linux32
|
||||
# make sysent
|
||||
# cd /usr/src/i386/linux
|
||||
# make sysent
|
||||
|
||||
c) Recompile your kernel and modules as described in
|
||||
<URL:http://www.FreeBSD.org/handbook/kernelconfig.html>.
|
||||
|
||||
Reboot the system or unload and reload the linux.ko kernel module.
|
||||
|
||||
VI. Correction details
|
||||
|
||||
The following list contains the revision numbers of each file that was
|
||||
corrected in FreeBSD.
|
||||
|
||||
Subversion:
|
||||
|
||||
Branch/path Revision
|
||||
- ---------------------------------------------------------------------------
|
||||
stable/9/ r293898
|
||||
releng/9.3/ r293896
|
||||
stable/10/ r293897
|
||||
releng/10.1/ r293894
|
||||
releng/10.2/ r293893
|
||||
- ---------------------------------------------------------------------------
|
||||
|
||||
VII. References
|
||||
|
||||
<URL:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1880>
|
||||
|
||||
The latest revision of this advisory is available at
|
||||
<URL:http://security.FreeBSD.org/advisories/FreeBSD-SA-16:03.linux.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAEBCgAGBQJWl2j2AAoJEO1n7NZdz2rngkcQAJ8yxlxYd+qZPf+pbP+0Kj6w
|
||||
+Sy8BrSUrYLMFynrs4vRPTJobLnVGpwkp6I6ZCDL/yoI/7Xkl3ld7HWfH7MAJ6WP
|
||||
x0j5/bC+AlWGpKfL6wqeddxjHgmaAlDznN1MyO+3byVfP1Y8VVppbzqPNw9AW17Q
|
||||
kNqNAMsVuk3OMpoE7CYEsaH6rzHzbMGAPuR+KN5J55Mth6dNkIYSIFJ0sCae5cnv
|
||||
P6SoMKjn7ffcHymmX/Yj7K0FTOrJOePR0eLbTITivJT1uZ3bYbbYyK1bYslE6bwF
|
||||
EQ3Ij+LhZdM5D7GBOpILBZ9ojvVMq8PiW9yY3zo7DRrwWajBy8pe/3ow0u7igoOK
|
||||
/0XUFmRT0Q0iCxlGhXPxEGcc40g6oE6oVz1m3Ewgqc2+iZm+w6N/w88dRqiBHNgL
|
||||
AiCqleI10eRNgP1uq7XT/5PEslmQLxSCrDPFDOgmSZc3uY7H5LBb6O9fb7YTpn6J
|
||||
bfL7yyJFei/lAlY1s2b+4/DW9PE1OwxNw/R85mSUpbP5my5wwZR+s3mGTLI2JAlk
|
||||
74Nw/OR9HLLHoEO5JlagfEclKp7O+JzhHYkAcBm7yRMRr1LV+7JZQEaTCeWTkm6L
|
||||
YvL8Ca1PAL6qNLZbxQ26Gjka7KCrFhhNfR22c3Lz4pLtkg9YmDRb4sy6i+q3ellG
|
||||
0mLi0OqTu2gn+25xhidf
|
||||
=OQft
|
||||
-----END PGP SIGNATURE-----
|
145
share/security/advisories/FreeBSD-SA-16:04.linux.asc
Normal file
145
share/security/advisories/FreeBSD-SA-16:04.linux.asc
Normal file
|
@ -0,0 +1,145 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-SA-16:04.linux Security Advisory
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: Linux compatibility layer setgroups(2) system call
|
||||
vulnerability
|
||||
|
||||
Category: core
|
||||
Module: kernel
|
||||
Announced: 2016-01-14
|
||||
Credits: Dmitry Chagin
|
||||
Affects: All supported versions of FreeBSD
|
||||
Corrected: 2016-01-14 09:11:42 UTC (stable/10, 10.2-STABLE)
|
||||
2016-01-14 09:10:46 UTC (releng/10.2, 10.2-RELEASE-p9)
|
||||
2016-01-14 09:11:16 UTC (releng/10.1, 10.1-RELEASE-p26)
|
||||
2016-01-14 09:11:48 UTC (stable/9, 9.3-STABLE)
|
||||
2016-01-14 09:11:26 UTC (releng/9.3, 9.3-RELEASE-p33)
|
||||
CVE Name: CVE-2016-1881
|
||||
|
||||
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
|
||||
|
||||
FreeBSD is binary-compatible with the Linux operating system through a
|
||||
loadable kernel module/optional kernel component. The support is
|
||||
provided on amd64 and i386 machines.
|
||||
|
||||
II. Problem Description
|
||||
|
||||
A programming error in the Linux compatibility layer setgroups(2) system
|
||||
call can lead to an unexpected results, such as overwriting random kernel
|
||||
memory contents.
|
||||
|
||||
III. Impact
|
||||
|
||||
It is possible for a local attacker to overwrite portions of kernel
|
||||
memory, which may result in a privilege escalation or cause a system
|
||||
panic.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
No workaround is available, but systems not using the Linux binary
|
||||
compatibility layer are not vulnerable.
|
||||
|
||||
The following command can be used to test if the Linux binary
|
||||
compatibility layer is loaded:
|
||||
|
||||
# kldstat -m linuxelf
|
||||
|
||||
V. Solution
|
||||
|
||||
Perform one of the following:
|
||||
|
||||
1) Upgrade your vulnerable system to a supported FreeBSD stable or
|
||||
release / security branch (releng) dated after the correction date.
|
||||
|
||||
Reboot the system or unload and reload the linux.ko kernel module.
|
||||
|
||||
2) To update your vulnerable system via a binary patch:
|
||||
|
||||
Systems running a RELEASE version of FreeBSD on the i386 or amd64
|
||||
platforms can be updated via the freebsd-update(8) utility:
|
||||
|
||||
# freebsd-update fetch
|
||||
# freebsd-update install
|
||||
|
||||
Reboot the system or unload and reload the linux.ko kernel module.
|
||||
|
||||
3) To update your vulnerable system via a source code patch:
|
||||
|
||||
The following patches have been verified to apply to the applicable
|
||||
FreeBSD release branches.
|
||||
|
||||
a) Download the relevant patch from the location below, and verify the
|
||||
detached PGP signature using your PGP utility.
|
||||
|
||||
# fetch https://security.FreeBSD.org/patches/SA-16:04/linux.patch
|
||||
# fetch https://security.FreeBSD.org/patches/SA-16:04/linux.patch.asc
|
||||
# gpg --verify linux.patch.asc
|
||||
|
||||
b) Apply the patch. Execute the following commands as root:
|
||||
|
||||
# cd /usr/src
|
||||
# patch < /path/to/patch
|
||||
# cd /usr/src/amd64/linux32
|
||||
# make sysent
|
||||
# cd /usr/src/i386/linux
|
||||
# make sysent
|
||||
|
||||
c) Recompile your kernel as described in
|
||||
<URL:https://www.FreeBSD.org/handbook/kernelconfig.html>.
|
||||
|
||||
Reboot the system or unload and reload the linux.ko kernel module.
|
||||
|
||||
VI. Correction details
|
||||
|
||||
The following list contains the correction revision numbers for each
|
||||
affected branch.
|
||||
|
||||
Branch/path Revision
|
||||
- -------------------------------------------------------------------------
|
||||
stable/9/ r293898
|
||||
releng/9.3/ r293896
|
||||
stable/10/ r293897
|
||||
releng/10.1/ r293894
|
||||
releng/10.2/ r293893
|
||||
- -------------------------------------------------------------------------
|
||||
|
||||
To see which files were modified by a particular revision, run the
|
||||
following command, replacing NNNNNN with the revision number, on a
|
||||
machine with Subversion installed:
|
||||
|
||||
# svn diff -cNNNNNN --summarize svn://svn.freebsd.org/base
|
||||
|
||||
Or visit the following URL, replacing NNNNNN with the revision number:
|
||||
|
||||
<URL:https://svnweb.freebsd.org/base?view=revision&revision=NNNNNN>
|
||||
|
||||
VII. References
|
||||
|
||||
<URL:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1881>
|
||||
|
||||
The latest revision of this advisory is available at
|
||||
<URL:https://security.FreeBSD.org/advisories/FreeBSD-SA-16:04.linux.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAEBCgAGBQJWl2j3AAoJEO1n7NZdz2rnstMP/jddSJehSXe9rlL2qhYfRrQY
|
||||
XZSuoOtolvcl2xSQCZYprXN95/i890VOdJ9x4+iYJA2IQO55a8MjS1DcJjjonV7J
|
||||
zJa7Apnu1jaK1jDx+RL6C3eVDff0ss1B7NvZTXmjHn+nIsIRxd6vzxDp2NujTnWS
|
||||
XHNinNAPcVK9Hy/AJh1W+mClvgLg+lyMICuraMjTDc5ML3+fxUmXfDUWq1mm2Chq
|
||||
uYXMXcIBXBJx1mnnm9n2izExr7j7AHaVJywe/UYk+KCNbSeags76pt1vuPfoOjdE
|
||||
BaSlX9KNMouYU0JNfv/wC7/UnuQ/BY1XzxheVpIqmXwlFstAmSiKYIQkpIuypVF1
|
||||
yUmf8CjN6AOx9P5CjxX88eeY3F6J1yohch1AI4IMqT3F3fd5LbJ5WqOjritt0J96
|
||||
hDjnsiVhw4ozQE6SWTY8TKlokOOEfJC+yhNIJ0cNaHnkLSCUuDDErtGzp1CYoYmt
|
||||
Q8D1VJ1UEaVPaKcaNAo4+sjiE1uK6svPiWa1+W9VbKGvc3Y7PbcuVIzU0aI4ySgj
|
||||
VecEFM1O5wr3WXIYnDQNwkWVxbCQdxOIPyW0rqMGQVpu1h7MKk0oMboY1bLcQYFy
|
||||
Aa9okOl+D7ItpEpRUgnIT06B6krC5sUQuzkUxnVIBPKtcl1OZ4B8KidLjEqu4BSx
|
||||
3qOQSGqZzr8TFcwPIJv4
|
||||
=JKVW
|
||||
-----END PGP SIGNATURE-----
|
129
share/security/advisories/FreeBSD-SA-16:05.tcp.asc
Normal file
129
share/security/advisories/FreeBSD-SA-16:05.tcp.asc
Normal file
|
@ -0,0 +1,129 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-SA-16:05.tcp Security Advisory
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: TCP MD5 signature denial of service
|
||||
|
||||
Category: core
|
||||
Module: kernel
|
||||
Announced: 2016-01-14
|
||||
Credits: Ryan Stone,
|
||||
Jonathan T. Looney
|
||||
Affects: All supported versions of FreeBSD.
|
||||
Corrected: 2016-01-14 09:11:42 UTC (stable/10, 10.2-STABLE)
|
||||
2016-01-14 09:10:46 UTC (releng/10.2, 10.2-RELEASE-p9)
|
||||
2016-01-14 09:11:16 UTC (releng/10.1, 10.1-RELEASE-p26)
|
||||
2016-01-14 09:11:48 UTC (stable/9, 9.3-STABLE)
|
||||
2016-01-14 09:11:26 UTC (releng/9.3, 9.3-RELEASE-p33)
|
||||
CVE Name: CVE-2016-1882
|
||||
|
||||
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 Transmission Control Protocol (TCP) of the TCP/IP protocol suite
|
||||
provides a connection-oriented, reliable, sequence-preserving data
|
||||
stream service. An optional extension to TCP described in RFC 2385 allows
|
||||
protecting data streams against spoofed packets with MD5 signature.
|
||||
|
||||
Support for TCP MD5 signatures is not enabled in default kernel.
|
||||
|
||||
II. Problem Description
|
||||
|
||||
A programming error in processing a TCP connection with both TCP_MD5SIG
|
||||
and TCP_NOOPT socket options may lead to kernel crash.
|
||||
|
||||
III. Impact
|
||||
|
||||
A local attacker can crash the kernel, resulting in a denial-of-service.
|
||||
|
||||
A remote attack is theoretically possible, if server has a listening
|
||||
socket with TCP_NOOPT set, and server is either out of SYN cache entries,
|
||||
or SYN cache is disabled by configuration.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
No workaround is available, but installations running a default kernel,
|
||||
or a custom kernel without TCP_SIGNATURE option are not vulnerable.
|
||||
|
||||
V. Solution
|
||||
|
||||
Perform one of the following:
|
||||
|
||||
1) Upgrade your vulnerable system to a supported FreeBSD stable or
|
||||
release / security branch (releng) dated after the correction date.
|
||||
|
||||
System reboot is required.
|
||||
|
||||
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.
|
||||
|
||||
# fetch https://security.FreeBSD.org/patches/SA-16:05/tcp.patch
|
||||
# fetch https://security.FreeBSD.org/patches/SA-16:05/tcp.patch.asc
|
||||
# gpg --verify tcp.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/9/ r293898
|
||||
releng/9.3/ r293896
|
||||
stable/10/ r293897
|
||||
releng/10.1/ r293894
|
||||
releng/10.2/ r293893
|
||||
- -------------------------------------------------------------------------
|
||||
|
||||
To see which files were modified by a particular revision, run the
|
||||
following command, replacing NNNNNN with the revision number, on a
|
||||
machine with Subversion installed:
|
||||
|
||||
# svn diff -cNNNNNN --summarize svn://svn.freebsd.org/base
|
||||
|
||||
Or visit the following URL, replacing NNNNNN with the revision number:
|
||||
|
||||
<URL:https://svnweb.freebsd.org/base?view=revision&revision=NNNNNN>
|
||||
|
||||
VII. References
|
||||
|
||||
<URL:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1882>
|
||||
|
||||
The latest revision of this advisory is available at
|
||||
<URL:https://security.FreeBSD.org/advisories/FreeBSD-SA-16:05.tcp.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAEBCgAGBQJWl2j3AAoJEO1n7NZdz2rnrWcQAN+QX6wEvC7FkTXyX2LHFWas
|
||||
CVOI/KkxkHSVwYMMScmorG27OxDsHTkvrGfqyVbYDczmC5NY+AorMiZMoo7CHn5J
|
||||
gYmS8NZvBPeMKmFt45lBTBDnKT6mOvHBz6UPhyyHruvR6VZ2h3fyLqYzbMKcy12i
|
||||
Onmk/nm3vgrqOCmnqYQN8Xo2v2x4KcKU3/jegK+pdfOwd9Q1bmxzBWwFx8yc7pZ0
|
||||
3YItalkiMsuRppSuNS9fGoRSoB/Ybf/8pu6SDnhvJnw4CIRGAl3IDKpBanB7F/9E
|
||||
sofcI499s+uyOHPY8TrQ62L4UjteEukwaV8EJh6vPaLm3pns0cSURzKczgytTH3G
|
||||
Nz9GcI3hYdfbXRBgJvwtZv9JY5s3ZtPiqqTwHta7AdplXwiOJJ1Ylso5lZ4beiJh
|
||||
q7Sv+YMJr9cNfnYmSGv33rKN4hdae7XfJm+Ipde4bpgCLFpKkb/aQaGxGlowjDaW
|
||||
0C77qCg+se3TzwGl0A7ClEq4dLaadTsiShQCpZGQOgc6Wgz9QUBGxU811e3KQHLo
|
||||
3XQgxGSB9+3d7YiK/ZNkzi8d89VXMgUOx4HoOZ7+SkVBg1+qpbiYnk8VJjLmXyOz
|
||||
dPtDbzWG68wluWcSc7TD5yIYx2Lw4E9ZMWzh2boOxEWrcd9mxCUPiU9nsF+PIAPG
|
||||
kTcLnX0+iXijpKMnQpgP
|
||||
=UjjC
|
||||
-----END PGP SIGNATURE-----
|
142
share/security/advisories/FreeBSD-SA-16:06.bsnmpd.asc
Normal file
142
share/security/advisories/FreeBSD-SA-16:06.bsnmpd.asc
Normal file
|
@ -0,0 +1,142 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
=============================================================================
|
||||
FreeBSD-SA-16:06.bsnmpd Security Advisory
|
||||
The FreeBSD Project
|
||||
|
||||
Topic: Insecure default bsnmpd.conf permissions
|
||||
|
||||
Category: contrib
|
||||
Module: bsnmpd
|
||||
Announced: 2016-01-14
|
||||
Credits: Pierre Kim
|
||||
Affects: All supported versions of FreeBSD.
|
||||
Corrected: 2016-01-14 09:11:42 UTC (stable/10, 10.2-STABLE)
|
||||
2016-01-14 09:10:46 UTC (releng/10.2, 10.2-RELEASE-p9)
|
||||
2016-01-14 09:11:16 UTC (releng/10.1, 10.1-RELEASE-p26)
|
||||
2016-01-14 09:11:48 UTC (stable/9, 9.3-STABLE)
|
||||
2016-01-14 09:11:26 UTC (releng/9.3, 9.3-RELEASE-p33)
|
||||
CVE Name: CVE-2015-5677
|
||||
|
||||
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 bsnmpd daemon serves the Internet SNMP (Simple Network Management
|
||||
Protocol). It is intended to serve only the absolute basic MIBs and
|
||||
implements all other MIBs through loadable modules.
|
||||
|
||||
II. Problem Description
|
||||
|
||||
The SNMP protocol supports an authentication model called USM, which relies
|
||||
on a shared secret. The default permission of the bsnmpd configuration file,
|
||||
/etc/bsnmpd.conf, is weak and does not provide adequate protection against
|
||||
local unprivileged users.
|
||||
|
||||
III. Impact
|
||||
|
||||
A local user may be able to read the shared secret, if configured and used
|
||||
by the system administrator.
|
||||
|
||||
IV. Workaround
|
||||
|
||||
No workaround is available, but systems that do not use bsnmpd with its USM
|
||||
authentication model are not vulnerable.
|
||||
|
||||
V. Solution
|
||||
|
||||
This vulnerability can be fixed by modifying the permission on
|
||||
/etc/bsnmpd.conf to owner root:wheel and permission 0600.
|
||||
|
||||
The patch is provided mainly for third party vendors who deploy FreeBSD
|
||||
and provide a safe default. The patch itself DOES NOT fix the permissions
|
||||
for existing installations.
|
||||
|
||||
The patch can be applied by performing one of the following:
|
||||
|
||||
1) Upgrade your vulnerable system to a supported FreeBSD stable or
|
||||
release / security branch (releng) dated after the correction date.
|
||||
|
||||
The system administrator should change the permission on /etc/bsnmpd.conf
|
||||
to root:wheel and 0600.
|
||||
|
||||
2) To update your vulnerable system via a binary patch:
|
||||
|
||||
Systems running a RELEASE version of FreeBSD on the i386 or amd64
|
||||
platforms can be updated via the freebsd-update(8) utility:
|
||||
|
||||
# freebsd-update fetch
|
||||
# freebsd-update install
|
||||
|
||||
The system administrator should change the permission on /etc/bsnmpd.conf
|
||||
to root:wheel and 0600.
|
||||
|
||||
3) To update your vulnerable system via a source code patch:
|
||||
|
||||
The following patches have been verified to apply to the applicable
|
||||
FreeBSD release branches.
|
||||
|
||||
a) Download the relevant patch from the location below, and verify the
|
||||
detached PGP signature using your PGP utility.
|
||||
|
||||
# fetch https://security.FreeBSD.org/patches/SA-16:06/bsnmpd.patch
|
||||
# fetch https://security.FreeBSD.org/patches/SA-16:06/bsnmpd.patch.asc
|
||||
# gpg --verify bsnmpd.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>.
|
||||
|
||||
VI. Correction details
|
||||
|
||||
The following list contains the correction revision numbers for each
|
||||
affected branch.
|
||||
|
||||
Branch/path Revision
|
||||
- -------------------------------------------------------------------------
|
||||
stable/9/ r293898
|
||||
releng/9.3/ r293896
|
||||
stable/10/ r293897
|
||||
releng/10.1/ r293894
|
||||
releng/10.2/ r293893
|
||||
- -------------------------------------------------------------------------
|
||||
|
||||
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-2015-5677>
|
||||
|
||||
The latest revision of this advisory is available at
|
||||
<URL:https://security.FreeBSD.org/advisories/FreeBSD-SA-16:06.bsnmpd.asc>
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAEBCgAGBQJWl2j4AAoJEO1n7NZdz2rnkaQP/3K9kqYY1YoHQ++uzFPnfuZQ
|
||||
mkGPJ0frGG46pTL806QJidky6D0LP0zNCzhtU45ZlFMguJ3B3QYp/62Cw61dBG22
|
||||
x0uEkvI2F2F39IPA/clspyUHg3Y1RYgTpJrxey0JLrK0yxelyI8vMwB4tCB2eEDW
|
||||
ZGVU6rvFQcWJOWHABXVYcc+4Yy5ucudp0QbJsVHAKLtF7MLuntVlUj+x4Nncog5k
|
||||
kmGt6W7tzFn2gNsWcmntmG/LWyPkPURWhYfIj3fgcRrpMTVIDFX5PTgQyJR7DwOM
|
||||
/beIoQxxKBUwTW1ZRgvcCqFBu7DKSCMABoHgpqLj1gdeiJ1LaO4dErtWXvdBEAAP
|
||||
+XLi5OkRG3OKzIAIRnkz/SrkAUoRkzHEK1dI0coyw7AdXXjDBWtX+n9lzRXs7hqT
|
||||
LC3riK/Km9OYVn3+T7tCWnvKN45f+FnD8zxZDE+33Jv9wI8X+CCs9GjJdoJ0HDSd
|
||||
b6rg8E4gGPzfwFxSNXZQKfDSSuVBECIp3av1gp6hN3qZNOX/sadMsxro8VVGFLPg
|
||||
81rC+JfKNTeVtxF8oJi9eg3FQ/eupxQv4RvC2c37R7LcErAU1KKxZyNrwv6xDEMx
|
||||
QVnx74o+luxXSirLxq276pfBQJdMjxYzWCj6E8ztcAZenz3M4WNiRFlt7hdq/3YO
|
||||
bDBdQPe4eYSHHSGyGcz/
|
||||
=LDPU
|
||||
-----END PGP SIGNATURE-----
|
625
share/security/patches/EN-16:01/filemon.patch
Normal file
625
share/security/patches/EN-16:01/filemon.patch
Normal file
|
@ -0,0 +1,625 @@
|
|||
--- sys/dev/filemon/filemon.c.orig
|
||||
+++ sys/dev/filemon/filemon.c
|
||||
@@ -1,6 +1,7 @@
|
||||
/*-
|
||||
* Copyright (c) 2011, David E. O'Brien.
|
||||
* Copyright (c) 2009-2011, Juniper Networks, Inc.
|
||||
+ * Copyright (c) 2015, EMC Corp.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -39,6 +40,7 @@
|
||||
#include <sys/fcntl.h>
|
||||
#include <sys/ioccom.h>
|
||||
#include <sys/kernel.h>
|
||||
+#include <sys/lock.h>
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/module.h>
|
||||
#include <sys/mutex.h>
|
||||
@@ -45,6 +47,7 @@
|
||||
#include <sys/poll.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/queue.h>
|
||||
+#include <sys/sx.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <sys/sysent.h>
|
||||
#include <sys/sysproto.h>
|
||||
@@ -85,12 +88,8 @@
|
||||
|
||||
struct filemon {
|
||||
TAILQ_ENTRY(filemon) link; /* Link into the in-use list. */
|
||||
- struct mtx mtx; /* Lock mutex for this filemon. */
|
||||
- struct cv cv; /* Lock condition variable for this
|
||||
- filemon. */
|
||||
+ struct sx lock; /* Lock mutex for this filemon. */
|
||||
struct file *fp; /* Output file pointer. */
|
||||
- struct thread *locker; /* Ptr to the thread locking this
|
||||
- filemon. */
|
||||
pid_t pid; /* The process ID being monitored. */
|
||||
char fname1[MAXPATHLEN]; /* Temporary filename buffer. */
|
||||
char fname2[MAXPATHLEN]; /* Temporary filename buffer. */
|
||||
@@ -99,11 +98,7 @@
|
||||
|
||||
static TAILQ_HEAD(, filemon) filemons_inuse = TAILQ_HEAD_INITIALIZER(filemons_inuse);
|
||||
static TAILQ_HEAD(, filemon) filemons_free = TAILQ_HEAD_INITIALIZER(filemons_free);
|
||||
-static int n_readers = 0;
|
||||
-static struct mtx access_mtx;
|
||||
-static struct cv access_cv;
|
||||
-static struct thread *access_owner = NULL;
|
||||
-static struct thread *access_requester = NULL;
|
||||
+static struct sx access_lock;
|
||||
|
||||
static struct cdev *filemon_dev;
|
||||
|
||||
@@ -203,8 +198,7 @@
|
||||
|
||||
filemon->fp = NULL;
|
||||
|
||||
- mtx_init(&filemon->mtx, "filemon", "filemon", MTX_DEF);
|
||||
- cv_init(&filemon->cv, "filemon");
|
||||
+ sx_init(&filemon->lock, "filemon");
|
||||
}
|
||||
|
||||
filemon->pid = curproc->p_pid;
|
||||
@@ -234,8 +228,7 @@
|
||||
static void
|
||||
filemon_load(void *dummy __unused)
|
||||
{
|
||||
- mtx_init(&access_mtx, "filemon", "filemon", MTX_DEF);
|
||||
- cv_init(&access_cv, "filemon");
|
||||
+ sx_init(&access_lock, "filemons_inuse");
|
||||
|
||||
/* Install the syscall wrappers. */
|
||||
filemon_wrapper_install();
|
||||
@@ -270,14 +263,12 @@
|
||||
filemon_lock_write();
|
||||
while ((filemon = TAILQ_FIRST(&filemons_free)) != NULL) {
|
||||
TAILQ_REMOVE(&filemons_free, filemon, link);
|
||||
- mtx_destroy(&filemon->mtx);
|
||||
- cv_destroy(&filemon->cv);
|
||||
+ sx_destroy(&filemon->lock);
|
||||
free(filemon, M_FILEMON);
|
||||
}
|
||||
filemon_unlock_write();
|
||||
|
||||
- mtx_destroy(&access_mtx);
|
||||
- cv_destroy(&access_cv);
|
||||
+ sx_destroy(&access_lock);
|
||||
}
|
||||
|
||||
return (error);
|
||||
--- sys/dev/filemon/filemon_lock.c.orig
|
||||
+++ sys/dev/filemon/filemon_lock.c
|
||||
@@ -1,5 +1,6 @@
|
||||
/*-
|
||||
* Copyright (c) 2009-2011, Juniper Networks, Inc.
|
||||
+ * Copyright (c) 2015, EMC Corp.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -27,96 +28,44 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
-static void
|
||||
+static __inline void
|
||||
filemon_filemon_lock(struct filemon *filemon)
|
||||
{
|
||||
- mtx_lock(&filemon->mtx);
|
||||
|
||||
- while (filemon->locker != NULL && filemon->locker != curthread)
|
||||
- cv_wait(&filemon->cv, &filemon->mtx);
|
||||
-
|
||||
- filemon->locker = curthread;
|
||||
-
|
||||
- mtx_unlock(&filemon->mtx);
|
||||
+ sx_xlock(&filemon->lock);
|
||||
}
|
||||
|
||||
-static void
|
||||
+static __inline void
|
||||
filemon_filemon_unlock(struct filemon *filemon)
|
||||
{
|
||||
- mtx_lock(&filemon->mtx);
|
||||
|
||||
- if (filemon->locker == curthread)
|
||||
- filemon->locker = NULL;
|
||||
-
|
||||
- /* Wake up threads waiting. */
|
||||
- cv_broadcast(&filemon->cv);
|
||||
-
|
||||
- mtx_unlock(&filemon->mtx);
|
||||
+ sx_xunlock(&filemon->lock);
|
||||
}
|
||||
|
||||
-static void
|
||||
+static __inline void
|
||||
filemon_lock_read(void)
|
||||
{
|
||||
- mtx_lock(&access_mtx);
|
||||
|
||||
- while (access_owner != NULL || access_requester != NULL)
|
||||
- cv_wait(&access_cv, &access_mtx);
|
||||
-
|
||||
- n_readers++;
|
||||
-
|
||||
- /* Wake up threads waiting. */
|
||||
- cv_broadcast(&access_cv);
|
||||
-
|
||||
- mtx_unlock(&access_mtx);
|
||||
+ sx_slock(&access_lock);
|
||||
}
|
||||
|
||||
-static void
|
||||
+static __inline void
|
||||
filemon_unlock_read(void)
|
||||
{
|
||||
- mtx_lock(&access_mtx);
|
||||
|
||||
- if (n_readers > 0)
|
||||
- n_readers--;
|
||||
-
|
||||
- /* Wake up a thread waiting. */
|
||||
- cv_broadcast(&access_cv);
|
||||
-
|
||||
- mtx_unlock(&access_mtx);
|
||||
+ sx_sunlock(&access_lock);
|
||||
}
|
||||
|
||||
-static void
|
||||
+static __inline void
|
||||
filemon_lock_write(void)
|
||||
{
|
||||
- mtx_lock(&access_mtx);
|
||||
|
||||
- while (access_owner != curthread) {
|
||||
- if (access_owner == NULL &&
|
||||
- (access_requester == NULL ||
|
||||
- access_requester == curthread)) {
|
||||
- access_owner = curthread;
|
||||
- access_requester = NULL;
|
||||
- } else {
|
||||
- if (access_requester == NULL)
|
||||
- access_requester = curthread;
|
||||
-
|
||||
- cv_wait(&access_cv, &access_mtx);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- mtx_unlock(&access_mtx);
|
||||
+ sx_xlock(&access_lock);
|
||||
}
|
||||
|
||||
-static void
|
||||
+static __inline void
|
||||
filemon_unlock_write(void)
|
||||
{
|
||||
- mtx_lock(&access_mtx);
|
||||
|
||||
- /* Sanity check that the current thread actually has the write lock. */
|
||||
- if (access_owner == curthread)
|
||||
- access_owner = NULL;
|
||||
-
|
||||
- /* Wake up a thread waiting. */
|
||||
- cv_broadcast(&access_cv);
|
||||
-
|
||||
- mtx_unlock(&access_mtx);
|
||||
+ sx_xunlock(&access_lock);
|
||||
}
|
||||
--- sys/dev/filemon/filemon_wrapper.c.orig
|
||||
+++ sys/dev/filemon/filemon_wrapper.c
|
||||
@@ -1,6 +1,7 @@
|
||||
/*-
|
||||
* Copyright (c) 2011, David E. O'Brien.
|
||||
* Copyright (c) 2009-2011, Juniper Networks, Inc.
|
||||
+ * Copyright (c) 2015, EMC Corp.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -86,11 +87,18 @@
|
||||
{
|
||||
struct filemon *filemon;
|
||||
|
||||
+ filemon_lock_read();
|
||||
+ if (TAILQ_EMPTY(&filemons_inuse)) {
|
||||
+ filemon_unlock_read();
|
||||
+ return (NULL);
|
||||
+ }
|
||||
sx_slock(&proctree_lock);
|
||||
while (p != initproc) {
|
||||
TAILQ_FOREACH(filemon, &filemons_inuse, link) {
|
||||
if (p->p_pid == filemon->pid) {
|
||||
sx_sunlock(&proctree_lock);
|
||||
+ filemon_filemon_lock(filemon);
|
||||
+ filemon_unlock_read();
|
||||
return (filemon);
|
||||
}
|
||||
}
|
||||
@@ -97,6 +105,7 @@
|
||||
p = proc_realparent(p);
|
||||
}
|
||||
sx_sunlock(&proctree_lock);
|
||||
+ filemon_unlock_read();
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -109,9 +118,6 @@
|
||||
/* Load timestamp before locking. Less accurate but less contention. */
|
||||
getmicrotime(&now);
|
||||
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
/* Lock the found filemon structure. */
|
||||
filemon_filemon_lock(filemon);
|
||||
|
||||
@@ -124,9 +130,6 @@
|
||||
|
||||
/* Unlock the found filemon structure. */
|
||||
filemon_filemon_unlock(filemon);
|
||||
-
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -138,13 +141,7 @@
|
||||
struct filemon *filemon;
|
||||
|
||||
if ((ret = sys_chdir(td, uap)) == 0) {
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
if ((filemon = filemon_pid_check(curproc)) != NULL) {
|
||||
- /* Lock the found filemon structure. */
|
||||
- filemon_filemon_lock(filemon);
|
||||
-
|
||||
copyinstr(uap->path, filemon->fname1,
|
||||
sizeof(filemon->fname1), &done);
|
||||
|
||||
@@ -157,9 +154,6 @@
|
||||
/* Unlock the found filemon structure. */
|
||||
filemon_filemon_unlock(filemon);
|
||||
}
|
||||
-
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
}
|
||||
|
||||
return (ret);
|
||||
@@ -177,13 +171,7 @@
|
||||
copyinstr(uap->fname, fname, sizeof(fname), &done);
|
||||
|
||||
if ((ret = sys_execve(td, uap)) == 0) {
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
if ((filemon = filemon_pid_check(curproc)) != NULL) {
|
||||
- /* Lock the found filemon structure. */
|
||||
- filemon_filemon_lock(filemon);
|
||||
-
|
||||
len = snprintf(filemon->msgbufr,
|
||||
sizeof(filemon->msgbufr), "E %d %s\n",
|
||||
curproc->p_pid, fname);
|
||||
@@ -193,9 +181,6 @@
|
||||
/* Unlock the found filemon structure. */
|
||||
filemon_filemon_unlock(filemon);
|
||||
}
|
||||
-
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
}
|
||||
|
||||
return (ret);
|
||||
@@ -215,13 +200,7 @@
|
||||
copyinstr(uap->fname, fname, sizeof(fname), &done);
|
||||
|
||||
if ((ret = freebsd32_execve(td, uap)) == 0) {
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
if ((filemon = filemon_pid_check(curproc)) != NULL) {
|
||||
- /* Lock the found filemon structure. */
|
||||
- filemon_filemon_lock(filemon);
|
||||
-
|
||||
len = snprintf(filemon->msgbufr,
|
||||
sizeof(filemon->msgbufr), "E %d %s\n",
|
||||
curproc->p_pid, fname);
|
||||
@@ -231,9 +210,6 @@
|
||||
/* Unlock the found filemon structure. */
|
||||
filemon_filemon_unlock(filemon);
|
||||
}
|
||||
-
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
}
|
||||
|
||||
return (ret);
|
||||
@@ -248,13 +224,7 @@
|
||||
struct filemon *filemon;
|
||||
|
||||
if ((ret = sys_fork(td, uap)) == 0) {
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
if ((filemon = filemon_pid_check(curproc)) != NULL) {
|
||||
- /* Lock the found filemon structure. */
|
||||
- filemon_filemon_lock(filemon);
|
||||
-
|
||||
len = snprintf(filemon->msgbufr,
|
||||
sizeof(filemon->msgbufr), "F %d %ld\n",
|
||||
curproc->p_pid, (long)curthread->td_retval[0]);
|
||||
@@ -264,9 +234,6 @@
|
||||
/* Unlock the found filemon structure. */
|
||||
filemon_filemon_unlock(filemon);
|
||||
}
|
||||
-
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
}
|
||||
|
||||
return (ret);
|
||||
@@ -281,13 +248,7 @@
|
||||
struct filemon *filemon;
|
||||
|
||||
if ((ret = sys_open(td, uap)) == 0) {
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
if ((filemon = filemon_pid_check(curproc)) != NULL) {
|
||||
- /* Lock the found filemon structure. */
|
||||
- filemon_filemon_lock(filemon);
|
||||
-
|
||||
copyinstr(uap->path, filemon->fname1,
|
||||
sizeof(filemon->fname1), &done);
|
||||
|
||||
@@ -313,9 +274,6 @@
|
||||
/* Unlock the found filemon structure. */
|
||||
filemon_filemon_unlock(filemon);
|
||||
}
|
||||
-
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
}
|
||||
|
||||
return (ret);
|
||||
@@ -330,13 +288,7 @@
|
||||
struct filemon *filemon;
|
||||
|
||||
if ((ret = sys_openat(td, uap)) == 0) {
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
if ((filemon = filemon_pid_check(curproc)) != NULL) {
|
||||
- /* Lock the found filemon structure. */
|
||||
- filemon_filemon_lock(filemon);
|
||||
-
|
||||
copyinstr(uap->path, filemon->fname1,
|
||||
sizeof(filemon->fname1), &done);
|
||||
|
||||
@@ -375,9 +327,6 @@
|
||||
/* Unlock the found filemon structure. */
|
||||
filemon_filemon_unlock(filemon);
|
||||
}
|
||||
-
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
}
|
||||
|
||||
return (ret);
|
||||
@@ -392,13 +341,7 @@
|
||||
struct filemon *filemon;
|
||||
|
||||
if ((ret = sys_rename(td, uap)) == 0) {
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
if ((filemon = filemon_pid_check(curproc)) != NULL) {
|
||||
- /* Lock the found filemon structure. */
|
||||
- filemon_filemon_lock(filemon);
|
||||
-
|
||||
copyinstr(uap->from, filemon->fname1,
|
||||
sizeof(filemon->fname1), &done);
|
||||
copyinstr(uap->to, filemon->fname2,
|
||||
@@ -413,9 +356,6 @@
|
||||
/* Unlock the found filemon structure. */
|
||||
filemon_filemon_unlock(filemon);
|
||||
}
|
||||
-
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
}
|
||||
|
||||
return (ret);
|
||||
@@ -430,13 +370,7 @@
|
||||
struct filemon *filemon;
|
||||
|
||||
if ((ret = sys_link(td, uap)) == 0) {
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
if ((filemon = filemon_pid_check(curproc)) != NULL) {
|
||||
- /* Lock the found filemon structure. */
|
||||
- filemon_filemon_lock(filemon);
|
||||
-
|
||||
copyinstr(uap->path, filemon->fname1,
|
||||
sizeof(filemon->fname1), &done);
|
||||
copyinstr(uap->link, filemon->fname2,
|
||||
@@ -451,9 +385,6 @@
|
||||
/* Unlock the found filemon structure. */
|
||||
filemon_filemon_unlock(filemon);
|
||||
}
|
||||
-
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
}
|
||||
|
||||
return (ret);
|
||||
@@ -468,13 +399,7 @@
|
||||
struct filemon *filemon;
|
||||
|
||||
if ((ret = sys_symlink(td, uap)) == 0) {
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
if ((filemon = filemon_pid_check(curproc)) != NULL) {
|
||||
- /* Lock the found filemon structure. */
|
||||
- filemon_filemon_lock(filemon);
|
||||
-
|
||||
copyinstr(uap->path, filemon->fname1,
|
||||
sizeof(filemon->fname1), &done);
|
||||
copyinstr(uap->link, filemon->fname2,
|
||||
@@ -489,9 +414,6 @@
|
||||
/* Unlock the found filemon structure. */
|
||||
filemon_filemon_unlock(filemon);
|
||||
}
|
||||
-
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
}
|
||||
|
||||
return (ret);
|
||||
@@ -507,13 +429,7 @@
|
||||
struct filemon *filemon;
|
||||
|
||||
if ((ret = sys_linkat(td, uap)) == 0) {
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
if ((filemon = filemon_pid_check(curproc)) != NULL) {
|
||||
- /* Lock the found filemon structure. */
|
||||
- filemon_filemon_lock(filemon);
|
||||
-
|
||||
copyinstr(uap->path1, filemon->fname1,
|
||||
sizeof(filemon->fname1), &done);
|
||||
copyinstr(uap->path2, filemon->fname2,
|
||||
@@ -528,9 +444,6 @@
|
||||
/* Unlock the found filemon structure. */
|
||||
filemon_filemon_unlock(filemon);
|
||||
}
|
||||
-
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
}
|
||||
|
||||
return (ret);
|
||||
@@ -546,13 +459,7 @@
|
||||
struct filemon *filemon;
|
||||
|
||||
if ((ret = sys_stat(td, uap)) == 0) {
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
if ((filemon = filemon_pid_check(curproc)) != NULL) {
|
||||
- /* Lock the found filemon structure. */
|
||||
- filemon_filemon_lock(filemon);
|
||||
-
|
||||
copyinstr(uap->path, filemon->fname1,
|
||||
sizeof(filemon->fname1), &done);
|
||||
|
||||
@@ -565,9 +472,6 @@
|
||||
/* Unlock the found filemon structure. */
|
||||
filemon_filemon_unlock(filemon);
|
||||
}
|
||||
-
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
}
|
||||
|
||||
return (ret);
|
||||
@@ -584,13 +488,7 @@
|
||||
struct filemon *filemon;
|
||||
|
||||
if ((ret = freebsd32_stat(td, uap)) == 0) {
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
if ((filemon = filemon_pid_check(curproc)) != NULL) {
|
||||
- /* Lock the found filemon structure. */
|
||||
- filemon_filemon_lock(filemon);
|
||||
-
|
||||
copyinstr(uap->path, filemon->fname1,
|
||||
sizeof(filemon->fname1), &done);
|
||||
|
||||
@@ -603,9 +501,6 @@
|
||||
/* Unlock the found filemon structure. */
|
||||
filemon_filemon_unlock(filemon);
|
||||
}
|
||||
-
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
}
|
||||
|
||||
return (ret);
|
||||
@@ -622,13 +517,7 @@
|
||||
/* Get timestamp before locking. */
|
||||
getmicrotime(&now);
|
||||
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
if ((filemon = filemon_pid_check(curproc)) != NULL) {
|
||||
- /* Lock the found filemon structure. */
|
||||
- filemon_filemon_lock(filemon);
|
||||
-
|
||||
len = snprintf(filemon->msgbufr, sizeof(filemon->msgbufr),
|
||||
"X %d %d\n", curproc->p_pid, uap->rval);
|
||||
|
||||
@@ -649,9 +538,6 @@
|
||||
filemon_filemon_unlock(filemon);
|
||||
}
|
||||
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
-
|
||||
sys_sys_exit(td, uap);
|
||||
}
|
||||
|
||||
@@ -664,13 +550,7 @@
|
||||
struct filemon *filemon;
|
||||
|
||||
if ((ret = sys_unlink(td, uap)) == 0) {
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
if ((filemon = filemon_pid_check(curproc)) != NULL) {
|
||||
- /* Lock the found filemon structure. */
|
||||
- filemon_filemon_lock(filemon);
|
||||
-
|
||||
copyinstr(uap->path, filemon->fname1,
|
||||
sizeof(filemon->fname1), &done);
|
||||
|
||||
@@ -683,9 +563,6 @@
|
||||
/* Unlock the found filemon structure. */
|
||||
filemon_filemon_unlock(filemon);
|
||||
}
|
||||
-
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
}
|
||||
|
||||
return (ret);
|
||||
@@ -699,13 +576,7 @@
|
||||
struct filemon *filemon;
|
||||
|
||||
if ((ret = sys_vfork(td, uap)) == 0) {
|
||||
- /* Grab a read lock on the filemon inuse list. */
|
||||
- filemon_lock_read();
|
||||
-
|
||||
if ((filemon = filemon_pid_check(curproc)) != NULL) {
|
||||
- /* Lock the found filemon structure. */
|
||||
- filemon_filemon_lock(filemon);
|
||||
-
|
||||
len = snprintf(filemon->msgbufr,
|
||||
sizeof(filemon->msgbufr), "F %d %ld\n",
|
||||
curproc->p_pid, (long)curthread->td_retval[0]);
|
||||
@@ -715,9 +586,6 @@
|
||||
/* Unlock the found filemon structure. */
|
||||
filemon_filemon_unlock(filemon);
|
||||
}
|
||||
-
|
||||
- /* Release the read lock. */
|
||||
- filemon_unlock_read();
|
||||
}
|
||||
|
||||
return (ret);
|
16
share/security/patches/EN-16:01/filemon.patch.asc
Normal file
16
share/security/patches/EN-16:01/filemon.patch.asc
Normal file
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABCgAGBQJWl2vPAAoJEO1n7NZdz2rnKwUQAKVHEkB285VYYoYqJKoy8Pr6
|
||||
SG71lY59IZ1YRuFoSQq8RkizrskBDNhSqEXdDgjdMOIqSdaJqXaIHMwtKAv+/I1Y
|
||||
oRgUtIyLZYhuEUgsbjInNpd7Wk7Y2TQYjb1ZsI3hrNwFLxt5jzrYZCs0Ouk0RkB3
|
||||
nR++SMIrBtI5Ak48I8q0KZFPnIralqTmASo8m7QYvqI3Jmq6L06F5LHQ8t/oXVlB
|
||||
Dubf/SndnZnHtGV2a1qg9uuYvoqEaaH7kY6ZheRrhP5s1AduEWZB4fTiB0Yz9dtv
|
||||
+hYEO+cP2ynkSispljvtDDC717tOZeWhCisl/D1R+ohlKHiwtQRSLObeKHue27Fx
|
||||
Ku8c6BvpR311c9WazHIMT9CguvU3WEWnUgm1j+CyRb6KXgCuRaRIDl5vOwvFvGNW
|
||||
83imL3UY7Z0khlPZKicWWPqhC/Mn0MR5mKza0nyeTTRpWh4ynTZn6fWyU4RO99ic
|
||||
Zv1bRB6OS5LrL4uFConTXk+n5qo2hILGZfnFODlUZ8QasC/BB6SC+1R0a6kx9dOs
|
||||
1XYyoZBnjKgn8P/yEqpjOa/KMTDp90jkocjP35HkJBoKftewR2eAtceY4lbw1/Tl
|
||||
07YYbBmoKjNH4qTH5Rp76m9Dd+vDVpyHQ+Ov5Wm9h8/WUDP3p6aahGh1s5qPYBN3
|
||||
AZ3ZmnOKIHgNp1vtWbDq
|
||||
=j+SB
|
||||
-----END PGP SIGNATURE-----
|
392
share/security/patches/EN-16:02/pf-10.1.patch
Normal file
392
share/security/patches/EN-16:02/pf-10.1.patch
Normal file
|
@ -0,0 +1,392 @@
|
|||
--- sys/net/pfvar.h.orig
|
||||
+++ sys/net/pfvar.h
|
||||
@@ -1558,6 +1558,8 @@
|
||||
extern void pf_print_flags(u_int8_t);
|
||||
extern u_int16_t pf_cksum_fixup(u_int16_t, u_int16_t, u_int16_t,
|
||||
u_int8_t);
|
||||
+extern u_int16_t pf_proto_cksum_fixup(struct mbuf *, u_int16_t,
|
||||
+ u_int16_t, u_int16_t, u_int8_t);
|
||||
|
||||
VNET_DECLARE(struct ifnet *, sync_ifp);
|
||||
#define V_sync_ifp VNET(sync_ifp);
|
||||
@@ -1582,6 +1584,9 @@
|
||||
void *pf_pull_hdr(struct mbuf *, int, void *, int, u_short *, u_short *,
|
||||
sa_family_t);
|
||||
void pf_change_a(void *, u_int16_t *, u_int32_t, u_int8_t);
|
||||
+void pf_change_proto_a(struct mbuf *, void *, u_int16_t *, u_int32_t,
|
||||
+ u_int8_t);
|
||||
+void pf_change_tcp_a(struct mbuf *, void *, u_int16_t *, u_int32_t);
|
||||
void pf_send_deferred_syn(struct pf_state *);
|
||||
int pf_match_addr(u_int8_t, struct pf_addr *, struct pf_addr *,
|
||||
struct pf_addr *, sa_family_t);
|
||||
--- sys/netinet6/ip6_output.c.orig
|
||||
+++ sys/netinet6/ip6_output.c
|
||||
@@ -184,7 +184,7 @@
|
||||
}\
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
-static void
|
||||
+void
|
||||
in6_delayed_cksum(struct mbuf *m, uint32_t plen, u_short offset)
|
||||
{
|
||||
u_short csum;
|
||||
--- sys/netinet6/ip6_var.h.orig
|
||||
+++ sys/netinet6/ip6_var.h
|
||||
@@ -456,6 +456,7 @@
|
||||
struct rtentry **, u_int);
|
||||
u_int32_t ip6_randomid(void);
|
||||
u_int32_t ip6_randomflowlabel(void);
|
||||
+void in6_delayed_cksum(struct mbuf *m, uint32_t plen, u_short offset);
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* !_NETINET6_IP6_VAR_H_ */
|
||||
--- sys/netpfil/pf/pf.c.orig
|
||||
+++ sys/netpfil/pf/pf.c
|
||||
@@ -203,7 +203,7 @@
|
||||
static void pf_add_threshold(struct pf_threshold *);
|
||||
static int pf_check_threshold(struct pf_threshold *);
|
||||
|
||||
-static void pf_change_ap(struct pf_addr *, u_int16_t *,
|
||||
+static void pf_change_ap(struct mbuf *, struct pf_addr *, u_int16_t *,
|
||||
u_int16_t *, u_int16_t *, struct pf_addr *,
|
||||
u_int16_t, u_int8_t, sa_family_t);
|
||||
static int pf_modulate_sack(struct mbuf *, int, struct pf_pdesc *,
|
||||
@@ -1966,6 +1966,22 @@
|
||||
}
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * Checksum updates are a little complicated because the checksum in the TCP/UDP
|
||||
+ * header isn't always a full checksum. In some cases (i.e. output) it's a
|
||||
+ * pseudo-header checksum, which is a partial checksum over src/dst IP
|
||||
+ * addresses, protocol number and length.
|
||||
+ *
|
||||
+ * That means we have the following cases:
|
||||
+ * * Input or forwarding: we don't have TSO, the checksum fields are full
|
||||
+ * checksums, we need to update the checksum whenever we change anything.
|
||||
+ * * Output (i.e. the checksum is a pseudo-header checksum):
|
||||
+ * x The field being updated is src/dst address or affects the length of
|
||||
+ * the packet. We need to update the pseudo-header checksum (note that this
|
||||
+ * checksum is not ones' complement).
|
||||
+ * x Some other field is being modified (e.g. src/dst port numbers): We
|
||||
+ * don't have to update anything.
|
||||
+ **/
|
||||
u_int16_t
|
||||
pf_cksum_fixup(u_int16_t cksum, u_int16_t old, u_int16_t new, u_int8_t udp)
|
||||
{
|
||||
@@ -1981,9 +1997,20 @@
|
||||
return (l);
|
||||
}
|
||||
|
||||
+u_int16_t
|
||||
+pf_proto_cksum_fixup(struct mbuf *m, u_int16_t cksum, u_int16_t old,
|
||||
+ u_int16_t new, u_int8_t udp)
|
||||
+{
|
||||
+ if (m->m_pkthdr.csum_flags & (CSUM_DELAY_DATA | CSUM_DELAY_DATA_IPV6))
|
||||
+ return (cksum);
|
||||
+
|
||||
+ return (pf_cksum_fixup(cksum, old, new, udp));
|
||||
+}
|
||||
+
|
||||
static void
|
||||
-pf_change_ap(struct pf_addr *a, u_int16_t *p, u_int16_t *ic, u_int16_t *pc,
|
||||
- struct pf_addr *an, u_int16_t pn, u_int8_t u, sa_family_t af)
|
||||
+pf_change_ap(struct mbuf *m, struct pf_addr *a, u_int16_t *p, u_int16_t *ic,
|
||||
+ u_int16_t *pc, struct pf_addr *an, u_int16_t pn, u_int8_t u,
|
||||
+ sa_family_t af)
|
||||
{
|
||||
struct pf_addr ao;
|
||||
u_int16_t po = *p;
|
||||
@@ -1991,6 +2018,9 @@
|
||||
PF_ACPY(&ao, a, af);
|
||||
PF_ACPY(a, an, af);
|
||||
|
||||
+ if (m->m_pkthdr.csum_flags & (CSUM_DELAY_DATA | CSUM_DELAY_DATA_IPV6))
|
||||
+ *pc = ~*pc;
|
||||
+
|
||||
*p = pn;
|
||||
|
||||
switch (af) {
|
||||
@@ -2000,10 +2030,12 @@
|
||||
ao.addr16[0], an->addr16[0], 0),
|
||||
ao.addr16[1], an->addr16[1], 0);
|
||||
*p = pn;
|
||||
- *pc = pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(*pc,
|
||||
+
|
||||
+ *pc = pf_cksum_fixup(pf_cksum_fixup(*pc,
|
||||
ao.addr16[0], an->addr16[0], u),
|
||||
- ao.addr16[1], an->addr16[1], u),
|
||||
- po, pn, u);
|
||||
+ ao.addr16[1], an->addr16[1], u);
|
||||
+
|
||||
+ *pc = pf_proto_cksum_fixup(m, *pc, po, pn, u);
|
||||
break;
|
||||
#endif /* INET */
|
||||
#ifdef INET6
|
||||
@@ -2010,7 +2042,7 @@
|
||||
case AF_INET6:
|
||||
*pc = pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(
|
||||
pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(
|
||||
- pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(*pc,
|
||||
+ pf_cksum_fixup(pf_cksum_fixup(*pc,
|
||||
ao.addr16[0], an->addr16[0], u),
|
||||
ao.addr16[1], an->addr16[1], u),
|
||||
ao.addr16[2], an->addr16[2], u),
|
||||
@@ -2018,14 +2050,21 @@
|
||||
ao.addr16[4], an->addr16[4], u),
|
||||
ao.addr16[5], an->addr16[5], u),
|
||||
ao.addr16[6], an->addr16[6], u),
|
||||
- ao.addr16[7], an->addr16[7], u),
|
||||
- po, pn, u);
|
||||
+ ao.addr16[7], an->addr16[7], u);
|
||||
+
|
||||
+ *pc = pf_proto_cksum_fixup(m, *pc, po, pn, u);
|
||||
break;
|
||||
#endif /* INET6 */
|
||||
}
|
||||
+
|
||||
+ if (m->m_pkthdr.csum_flags & (CSUM_DELAY_DATA |
|
||||
+ CSUM_DELAY_DATA_IPV6)) {
|
||||
+ *pc = ~*pc;
|
||||
+ if (! *pc)
|
||||
+ *pc = 0xffff;
|
||||
+ }
|
||||
}
|
||||
|
||||
-
|
||||
/* Changes a u_int32_t. Uses a void * so there are no align restrictions */
|
||||
void
|
||||
pf_change_a(void *a, u_int16_t *c, u_int32_t an, u_int8_t u)
|
||||
@@ -2038,6 +2077,19 @@
|
||||
ao % 65536, an % 65536, u);
|
||||
}
|
||||
|
||||
+void
|
||||
+pf_change_proto_a(struct mbuf *m, void *a, u_int16_t *c, u_int32_t an, u_int8_t udp)
|
||||
+{
|
||||
+ u_int32_t ao;
|
||||
+
|
||||
+ memcpy(&ao, a, sizeof(ao));
|
||||
+ memcpy(a, &an, sizeof(u_int32_t));
|
||||
+
|
||||
+ *c = pf_proto_cksum_fixup(m,
|
||||
+ pf_proto_cksum_fixup(m, *c, ao / 65536, an / 65536, udp),
|
||||
+ ao % 65536, an % 65536, udp);
|
||||
+}
|
||||
+
|
||||
#ifdef INET6
|
||||
static void
|
||||
pf_change_a6(struct pf_addr *a, u_int16_t *c, struct pf_addr *an, u_int8_t u)
|
||||
@@ -2183,12 +2235,10 @@
|
||||
for (i = 2; i + TCPOLEN_SACK <= olen;
|
||||
i += TCPOLEN_SACK) {
|
||||
memcpy(&sack, &opt[i], sizeof(sack));
|
||||
- pf_change_a(&sack.start, &th->th_sum,
|
||||
- htonl(ntohl(sack.start) -
|
||||
- dst->seqdiff), 0);
|
||||
- pf_change_a(&sack.end, &th->th_sum,
|
||||
- htonl(ntohl(sack.end) -
|
||||
- dst->seqdiff), 0);
|
||||
+ pf_change_proto_a(m, &sack.start, &th->th_sum,
|
||||
+ htonl(ntohl(sack.start) - dst->seqdiff), 0);
|
||||
+ pf_change_proto_a(m, &sack.end, &th->th_sum,
|
||||
+ htonl(ntohl(sack.end) - dst->seqdiff), 0);
|
||||
memcpy(&opt[i], &sack, sizeof(sack));
|
||||
}
|
||||
copyback = 1;
|
||||
@@ -3092,7 +3142,7 @@
|
||||
|
||||
if (PF_ANEQ(saddr, &nk->addr[pd->sidx], af) ||
|
||||
nk->port[pd->sidx] != sport) {
|
||||
- pf_change_ap(saddr, &th->th_sport, pd->ip_sum,
|
||||
+ pf_change_ap(m, saddr, &th->th_sport, pd->ip_sum,
|
||||
&th->th_sum, &nk->addr[pd->sidx],
|
||||
nk->port[pd->sidx], 0, af);
|
||||
pd->sport = &th->th_sport;
|
||||
@@ -3101,7 +3151,7 @@
|
||||
|
||||
if (PF_ANEQ(daddr, &nk->addr[pd->didx], af) ||
|
||||
nk->port[pd->didx] != dport) {
|
||||
- pf_change_ap(daddr, &th->th_dport, pd->ip_sum,
|
||||
+ pf_change_ap(m, daddr, &th->th_dport, pd->ip_sum,
|
||||
&th->th_sum, &nk->addr[pd->didx],
|
||||
nk->port[pd->didx], 0, af);
|
||||
dport = th->th_dport;
|
||||
@@ -3115,7 +3165,7 @@
|
||||
|
||||
if (PF_ANEQ(saddr, &nk->addr[pd->sidx], af) ||
|
||||
nk->port[pd->sidx] != sport) {
|
||||
- pf_change_ap(saddr, &pd->hdr.udp->uh_sport,
|
||||
+ pf_change_ap(m, saddr, &pd->hdr.udp->uh_sport,
|
||||
pd->ip_sum, &pd->hdr.udp->uh_sum,
|
||||
&nk->addr[pd->sidx],
|
||||
nk->port[pd->sidx], 1, af);
|
||||
@@ -3125,7 +3175,7 @@
|
||||
|
||||
if (PF_ANEQ(daddr, &nk->addr[pd->didx], af) ||
|
||||
nk->port[pd->didx] != dport) {
|
||||
- pf_change_ap(daddr, &pd->hdr.udp->uh_dport,
|
||||
+ pf_change_ap(m, daddr, &pd->hdr.udp->uh_dport,
|
||||
pd->ip_sum, &pd->hdr.udp->uh_sum,
|
||||
&nk->addr[pd->didx],
|
||||
nk->port[pd->didx], 1, af);
|
||||
@@ -3477,7 +3527,7 @@
|
||||
if ((s->src.seqdiff = pf_tcp_iss(pd) - s->src.seqlo) ==
|
||||
0)
|
||||
s->src.seqdiff = 1;
|
||||
- pf_change_a(&th->th_seq, &th->th_sum,
|
||||
+ pf_change_proto_a(m, &th->th_seq, &th->th_sum,
|
||||
htonl(s->src.seqlo + s->src.seqdiff), 0);
|
||||
*rewrite = 1;
|
||||
} else
|
||||
@@ -3786,9 +3836,9 @@
|
||||
while ((src->seqdiff = arc4random() - seq) == 0)
|
||||
;
|
||||
ack = ntohl(th->th_ack) - dst->seqdiff;
|
||||
- pf_change_a(&th->th_seq, &th->th_sum, htonl(seq +
|
||||
+ pf_change_proto_a(m, &th->th_seq, &th->th_sum, htonl(seq +
|
||||
src->seqdiff), 0);
|
||||
- pf_change_a(&th->th_ack, &th->th_sum, htonl(ack), 0);
|
||||
+ pf_change_proto_a(m, &th->th_ack, &th->th_sum, htonl(ack), 0);
|
||||
*copyback = 1;
|
||||
} else {
|
||||
ack = ntohl(th->th_ack);
|
||||
@@ -3838,9 +3888,9 @@
|
||||
ack = ntohl(th->th_ack) - dst->seqdiff;
|
||||
if (src->seqdiff) {
|
||||
/* Modulate sequence numbers */
|
||||
- pf_change_a(&th->th_seq, &th->th_sum, htonl(seq +
|
||||
+ pf_change_proto_a(m, &th->th_seq, &th->th_sum, htonl(seq +
|
||||
src->seqdiff), 0);
|
||||
- pf_change_a(&th->th_ack, &th->th_sum, htonl(ack), 0);
|
||||
+ pf_change_proto_a(m, &th->th_ack, &th->th_sum, htonl(ack), 0);
|
||||
*copyback = 1;
|
||||
}
|
||||
end = seq + pd->p_len;
|
||||
@@ -4294,14 +4344,14 @@
|
||||
|
||||
if (PF_ANEQ(pd->src, &nk->addr[pd->sidx], pd->af) ||
|
||||
nk->port[pd->sidx] != th->th_sport)
|
||||
- pf_change_ap(pd->src, &th->th_sport, pd->ip_sum,
|
||||
- &th->th_sum, &nk->addr[pd->sidx],
|
||||
+ pf_change_ap(m, pd->src, &th->th_sport,
|
||||
+ pd->ip_sum, &th->th_sum, &nk->addr[pd->sidx],
|
||||
nk->port[pd->sidx], 0, pd->af);
|
||||
|
||||
if (PF_ANEQ(pd->dst, &nk->addr[pd->didx], pd->af) ||
|
||||
nk->port[pd->didx] != th->th_dport)
|
||||
- pf_change_ap(pd->dst, &th->th_dport, pd->ip_sum,
|
||||
- &th->th_sum, &nk->addr[pd->didx],
|
||||
+ pf_change_ap(m, pd->dst, &th->th_dport,
|
||||
+ pd->ip_sum, &th->th_sum, &nk->addr[pd->didx],
|
||||
nk->port[pd->didx], 0, pd->af);
|
||||
copyback = 1;
|
||||
}
|
||||
@@ -4365,13 +4415,13 @@
|
||||
|
||||
if (PF_ANEQ(pd->src, &nk->addr[pd->sidx], pd->af) ||
|
||||
nk->port[pd->sidx] != uh->uh_sport)
|
||||
- pf_change_ap(pd->src, &uh->uh_sport, pd->ip_sum,
|
||||
+ pf_change_ap(m, pd->src, &uh->uh_sport, pd->ip_sum,
|
||||
&uh->uh_sum, &nk->addr[pd->sidx],
|
||||
nk->port[pd->sidx], 1, pd->af);
|
||||
|
||||
if (PF_ANEQ(pd->dst, &nk->addr[pd->didx], pd->af) ||
|
||||
nk->port[pd->didx] != uh->uh_dport)
|
||||
- pf_change_ap(pd->dst, &uh->uh_dport, pd->ip_sum,
|
||||
+ pf_change_ap(m, pd->dst, &uh->uh_dport, pd->ip_sum,
|
||||
&uh->uh_sum, &nk->addr[pd->didx],
|
||||
nk->port[pd->didx], 1, pd->af);
|
||||
m_copyback(m, off, sizeof(*uh), (caddr_t)uh);
|
||||
@@ -5487,6 +5537,13 @@
|
||||
if (ifp->if_flags & IFF_LOOPBACK)
|
||||
m0->m_flags |= M_SKIP_FIREWALL;
|
||||
|
||||
+ if (m0->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6 &
|
||||
+ ~ifp->if_hwassist) {
|
||||
+ uint32_t plen = m0->m_pkthdr.len - sizeof(*ip6);
|
||||
+ in6_delayed_cksum(m0, plen, sizeof(struct ip6_hdr));
|
||||
+ m0->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* If the packet is too large for the outgoing interface,
|
||||
* send back an icmp6 error.
|
||||
--- sys/netpfil/pf/pf_ioctl.c.orig
|
||||
+++ sys/netpfil/pf/pf_ioctl.c
|
||||
@@ -3571,12 +3571,6 @@
|
||||
{
|
||||
int chk;
|
||||
|
||||
- /* We need a proper CSUM befor we start (s. OpenBSD ip_output) */
|
||||
- if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
|
||||
- in_delayed_cksum(*m);
|
||||
- (*m)->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
|
||||
- }
|
||||
-
|
||||
chk = pf_test(PF_OUT, ifp, m, inp);
|
||||
if (chk && *m) {
|
||||
m_freem(*m);
|
||||
@@ -3615,14 +3609,6 @@
|
||||
{
|
||||
int chk;
|
||||
|
||||
- /* We need a proper CSUM before we start (s. OpenBSD ip_output) */
|
||||
- if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
|
||||
-#ifdef INET
|
||||
- /* XXX-BZ copy&paste error from r126261? */
|
||||
- in_delayed_cksum(*m);
|
||||
-#endif
|
||||
- (*m)->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
|
||||
- }
|
||||
CURVNET_SET(ifp->if_vnet);
|
||||
chk = pf_test6(PF_OUT, ifp, m, inp);
|
||||
CURVNET_RESTORE();
|
||||
--- sys/netpfil/pf/pf_norm.c.orig
|
||||
+++ sys/netpfil/pf/pf_norm.c
|
||||
@@ -1374,13 +1374,14 @@
|
||||
th->th_x2 = 0;
|
||||
nv = *(u_int16_t *)(&th->th_ack + 1);
|
||||
|
||||
- th->th_sum = pf_cksum_fixup(th->th_sum, ov, nv, 0);
|
||||
+ th->th_sum = pf_proto_cksum_fixup(m, th->th_sum, ov, nv, 0);
|
||||
rewrite = 1;
|
||||
}
|
||||
|
||||
/* Remove urgent pointer, if TH_URG is not set */
|
||||
if (!(flags & TH_URG) && th->th_urp) {
|
||||
- th->th_sum = pf_cksum_fixup(th->th_sum, th->th_urp, 0, 0);
|
||||
+ th->th_sum = pf_proto_cksum_fixup(m, th->th_sum, th->th_urp,
|
||||
+ 0, 0);
|
||||
th->th_urp = 0;
|
||||
rewrite = 1;
|
||||
}
|
||||
@@ -1581,7 +1582,7 @@
|
||||
(src->scrub->pfss_flags &
|
||||
PFSS_TIMESTAMP)) {
|
||||
tsval = ntohl(tsval);
|
||||
- pf_change_a(&opt[2],
|
||||
+ pf_change_proto_a(m, &opt[2],
|
||||
&th->th_sum,
|
||||
htonl(tsval +
|
||||
src->scrub->pfss_ts_mod),
|
||||
@@ -1597,7 +1598,7 @@
|
||||
PFSS_TIMESTAMP)) {
|
||||
tsecr = ntohl(tsecr)
|
||||
- dst->scrub->pfss_ts_mod;
|
||||
- pf_change_a(&opt[6],
|
||||
+ pf_change_proto_a(m, &opt[6],
|
||||
&th->th_sum, htonl(tsecr),
|
||||
0);
|
||||
copyback = 1;
|
||||
@@ -1924,8 +1925,8 @@
|
||||
case TCPOPT_MAXSEG:
|
||||
mss = (u_int16_t *)(optp + 2);
|
||||
if ((ntohs(*mss)) > r->max_mss) {
|
||||
- th->th_sum = pf_cksum_fixup(th->th_sum,
|
||||
- *mss, htons(r->max_mss), 0);
|
||||
+ th->th_sum = pf_proto_cksum_fixup(m,
|
||||
+ th->th_sum, *mss, htons(r->max_mss), 0);
|
||||
*mss = htons(r->max_mss);
|
||||
rewrite = 1;
|
||||
}
|
16
share/security/patches/EN-16:02/pf-10.1.patch.asc
Normal file
16
share/security/patches/EN-16:02/pf-10.1.patch.asc
Normal file
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABCgAGBQJWl2vRAAoJEO1n7NZdz2rneQkP/A5c7Q56gNdajrwxyWwV4jmN
|
||||
cNtmgLfs9dp2IpyBHkh+kAr+TCiI9ymX7XjxfHr2VZsrzEOiOObj8eRUivORybo2
|
||||
Qq7I1ALXUxL2RLzJHRDunWc7h7JC5uAikrv8DCKZ5h3Hu2e5s07fHZqYXbPJyMcb
|
||||
xzfB6GNXpCSutDnJgHOZqgCefokb5O+J2ER8Zk4Q4Q0ILs1MO6aiseDEoFapFTBk
|
||||
2rxf1dEzwYxRTpDkqbnVNQb3JNg9YemnlX265kOYUf10sG969EB+W3cOfuP/mRZS
|
||||
5ff+S7si+5sHFn/0TVc4yN3iEqjxUlYX5IlzRENQEXztxoqLQDuuQ4nF92703loH
|
||||
5Ay6kp+fci2UiIaK5PNnEWtvNpvgeuK9kY5H40P+qEMPv5nCrGtKzumKy6tlPuIo
|
||||
ppSc3QCTWjvIbs2MYbonDooCo4z7WQ7P2OJT0kUbHYwaez0gullOt8nv9GgNvLIX
|
||||
hbox02nWvHV/x9pCtBpFW8qxKVmrNvvYkujhr5G8sf/xmNtUNK8xv2vpKRmatJWC
|
||||
jzUmJl+UZC6fy60ThaosZO7uZlsC6POtSzQVA4DcIATB/LMNRhf4Z4q8qut0ur64
|
||||
YQnKDch1mepEmr/+mTkLf8nk/8kQMHpmij6Dv9xN+dCA5rPozjCervjjiKjRDD4G
|
||||
gRBpo4VOn2B/ApFDzCP8
|
||||
=wyiX
|
||||
-----END PGP SIGNATURE-----
|
368
share/security/patches/EN-16:02/pf-10.2.patch
Normal file
368
share/security/patches/EN-16:02/pf-10.2.patch
Normal file
|
@ -0,0 +1,368 @@
|
|||
--- sys/net/pfvar.h.orig
|
||||
+++ sys/net/pfvar.h
|
||||
@@ -1554,6 +1554,8 @@
|
||||
extern void pf_print_flags(u_int8_t);
|
||||
extern u_int16_t pf_cksum_fixup(u_int16_t, u_int16_t, u_int16_t,
|
||||
u_int8_t);
|
||||
+extern u_int16_t pf_proto_cksum_fixup(struct mbuf *, u_int16_t,
|
||||
+ u_int16_t, u_int16_t, u_int8_t);
|
||||
|
||||
VNET_DECLARE(struct ifnet *, sync_ifp);
|
||||
#define V_sync_ifp VNET(sync_ifp);
|
||||
@@ -1583,6 +1585,9 @@
|
||||
void *pf_pull_hdr(struct mbuf *, int, void *, int, u_short *, u_short *,
|
||||
sa_family_t);
|
||||
void pf_change_a(void *, u_int16_t *, u_int32_t, u_int8_t);
|
||||
+void pf_change_proto_a(struct mbuf *, void *, u_int16_t *, u_int32_t,
|
||||
+ u_int8_t);
|
||||
+void pf_change_tcp_a(struct mbuf *, void *, u_int16_t *, u_int32_t);
|
||||
void pf_send_deferred_syn(struct pf_state *);
|
||||
int pf_match_addr(u_int8_t, struct pf_addr *, struct pf_addr *,
|
||||
struct pf_addr *, sa_family_t);
|
||||
--- sys/netpfil/pf/pf.c.orig
|
||||
+++ sys/netpfil/pf/pf.c
|
||||
@@ -203,7 +203,7 @@
|
||||
static void pf_add_threshold(struct pf_threshold *);
|
||||
static int pf_check_threshold(struct pf_threshold *);
|
||||
|
||||
-static void pf_change_ap(struct pf_addr *, u_int16_t *,
|
||||
+static void pf_change_ap(struct mbuf *, struct pf_addr *, u_int16_t *,
|
||||
u_int16_t *, u_int16_t *, struct pf_addr *,
|
||||
u_int16_t, u_int8_t, sa_family_t);
|
||||
static int pf_modulate_sack(struct mbuf *, int, struct pf_pdesc *,
|
||||
@@ -1989,6 +1989,22 @@
|
||||
}
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * Checksum updates are a little complicated because the checksum in the TCP/UDP
|
||||
+ * header isn't always a full checksum. In some cases (i.e. output) it's a
|
||||
+ * pseudo-header checksum, which is a partial checksum over src/dst IP
|
||||
+ * addresses, protocol number and length.
|
||||
+ *
|
||||
+ * That means we have the following cases:
|
||||
+ * * Input or forwarding: we don't have TSO, the checksum fields are full
|
||||
+ * checksums, we need to update the checksum whenever we change anything.
|
||||
+ * * Output (i.e. the checksum is a pseudo-header checksum):
|
||||
+ * x The field being updated is src/dst address or affects the length of
|
||||
+ * the packet. We need to update the pseudo-header checksum (note that this
|
||||
+ * checksum is not ones' complement).
|
||||
+ * x Some other field is being modified (e.g. src/dst port numbers): We
|
||||
+ * don't have to update anything.
|
||||
+ **/
|
||||
u_int16_t
|
||||
pf_cksum_fixup(u_int16_t cksum, u_int16_t old, u_int16_t new, u_int8_t udp)
|
||||
{
|
||||
@@ -2004,9 +2020,20 @@
|
||||
return (l);
|
||||
}
|
||||
|
||||
+u_int16_t
|
||||
+pf_proto_cksum_fixup(struct mbuf *m, u_int16_t cksum, u_int16_t old,
|
||||
+ u_int16_t new, u_int8_t udp)
|
||||
+{
|
||||
+ if (m->m_pkthdr.csum_flags & (CSUM_DELAY_DATA | CSUM_DELAY_DATA_IPV6))
|
||||
+ return (cksum);
|
||||
+
|
||||
+ return (pf_cksum_fixup(cksum, old, new, udp));
|
||||
+}
|
||||
+
|
||||
static void
|
||||
-pf_change_ap(struct pf_addr *a, u_int16_t *p, u_int16_t *ic, u_int16_t *pc,
|
||||
- struct pf_addr *an, u_int16_t pn, u_int8_t u, sa_family_t af)
|
||||
+pf_change_ap(struct mbuf *m, struct pf_addr *a, u_int16_t *p, u_int16_t *ic,
|
||||
+ u_int16_t *pc, struct pf_addr *an, u_int16_t pn, u_int8_t u,
|
||||
+ sa_family_t af)
|
||||
{
|
||||
struct pf_addr ao;
|
||||
u_int16_t po = *p;
|
||||
@@ -2014,6 +2041,9 @@
|
||||
PF_ACPY(&ao, a, af);
|
||||
PF_ACPY(a, an, af);
|
||||
|
||||
+ if (m->m_pkthdr.csum_flags & (CSUM_DELAY_DATA | CSUM_DELAY_DATA_IPV6))
|
||||
+ *pc = ~*pc;
|
||||
+
|
||||
*p = pn;
|
||||
|
||||
switch (af) {
|
||||
@@ -2023,17 +2053,19 @@
|
||||
ao.addr16[0], an->addr16[0], 0),
|
||||
ao.addr16[1], an->addr16[1], 0);
|
||||
*p = pn;
|
||||
- *pc = pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(*pc,
|
||||
+
|
||||
+ *pc = pf_cksum_fixup(pf_cksum_fixup(*pc,
|
||||
ao.addr16[0], an->addr16[0], u),
|
||||
- ao.addr16[1], an->addr16[1], u),
|
||||
- po, pn, u);
|
||||
+ ao.addr16[1], an->addr16[1], u);
|
||||
+
|
||||
+ *pc = pf_proto_cksum_fixup(m, *pc, po, pn, u);
|
||||
break;
|
||||
#endif /* INET */
|
||||
#ifdef INET6
|
||||
case AF_INET6:
|
||||
*pc = pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(
|
||||
pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(
|
||||
- pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(*pc,
|
||||
+ pf_cksum_fixup(pf_cksum_fixup(*pc,
|
||||
ao.addr16[0], an->addr16[0], u),
|
||||
ao.addr16[1], an->addr16[1], u),
|
||||
ao.addr16[2], an->addr16[2], u),
|
||||
@@ -2041,13 +2073,20 @@
|
||||
ao.addr16[4], an->addr16[4], u),
|
||||
ao.addr16[5], an->addr16[5], u),
|
||||
ao.addr16[6], an->addr16[6], u),
|
||||
- ao.addr16[7], an->addr16[7], u),
|
||||
- po, pn, u);
|
||||
+ ao.addr16[7], an->addr16[7], u);
|
||||
+
|
||||
+ *pc = pf_proto_cksum_fixup(m, *pc, po, pn, u);
|
||||
break;
|
||||
#endif /* INET6 */
|
||||
}
|
||||
-}
|
||||
|
||||
+ if (m->m_pkthdr.csum_flags & (CSUM_DELAY_DATA |
|
||||
+ CSUM_DELAY_DATA_IPV6)) {
|
||||
+ *pc = ~*pc;
|
||||
+ if (! *pc)
|
||||
+ *pc = 0xffff;
|
||||
+ }
|
||||
+}
|
||||
|
||||
/* Changes a u_int32_t. Uses a void * so there are no align restrictions */
|
||||
void
|
||||
@@ -2061,6 +2100,19 @@
|
||||
ao % 65536, an % 65536, u);
|
||||
}
|
||||
|
||||
+void
|
||||
+pf_change_proto_a(struct mbuf *m, void *a, u_int16_t *c, u_int32_t an, u_int8_t udp)
|
||||
+{
|
||||
+ u_int32_t ao;
|
||||
+
|
||||
+ memcpy(&ao, a, sizeof(ao));
|
||||
+ memcpy(a, &an, sizeof(u_int32_t));
|
||||
+
|
||||
+ *c = pf_proto_cksum_fixup(m,
|
||||
+ pf_proto_cksum_fixup(m, *c, ao / 65536, an / 65536, udp),
|
||||
+ ao % 65536, an % 65536, udp);
|
||||
+}
|
||||
+
|
||||
#ifdef INET6
|
||||
static void
|
||||
pf_change_a6(struct pf_addr *a, u_int16_t *c, struct pf_addr *an, u_int8_t u)
|
||||
@@ -2206,12 +2258,10 @@
|
||||
for (i = 2; i + TCPOLEN_SACK <= olen;
|
||||
i += TCPOLEN_SACK) {
|
||||
memcpy(&sack, &opt[i], sizeof(sack));
|
||||
- pf_change_a(&sack.start, &th->th_sum,
|
||||
- htonl(ntohl(sack.start) -
|
||||
- dst->seqdiff), 0);
|
||||
- pf_change_a(&sack.end, &th->th_sum,
|
||||
- htonl(ntohl(sack.end) -
|
||||
- dst->seqdiff), 0);
|
||||
+ pf_change_proto_a(m, &sack.start, &th->th_sum,
|
||||
+ htonl(ntohl(sack.start) - dst->seqdiff), 0);
|
||||
+ pf_change_proto_a(m, &sack.end, &th->th_sum,
|
||||
+ htonl(ntohl(sack.end) - dst->seqdiff), 0);
|
||||
memcpy(&opt[i], &sack, sizeof(sack));
|
||||
}
|
||||
copyback = 1;
|
||||
@@ -3115,7 +3165,7 @@
|
||||
|
||||
if (PF_ANEQ(saddr, &nk->addr[pd->sidx], af) ||
|
||||
nk->port[pd->sidx] != sport) {
|
||||
- pf_change_ap(saddr, &th->th_sport, pd->ip_sum,
|
||||
+ pf_change_ap(m, saddr, &th->th_sport, pd->ip_sum,
|
||||
&th->th_sum, &nk->addr[pd->sidx],
|
||||
nk->port[pd->sidx], 0, af);
|
||||
pd->sport = &th->th_sport;
|
||||
@@ -3124,7 +3174,7 @@
|
||||
|
||||
if (PF_ANEQ(daddr, &nk->addr[pd->didx], af) ||
|
||||
nk->port[pd->didx] != dport) {
|
||||
- pf_change_ap(daddr, &th->th_dport, pd->ip_sum,
|
||||
+ pf_change_ap(m, daddr, &th->th_dport, pd->ip_sum,
|
||||
&th->th_sum, &nk->addr[pd->didx],
|
||||
nk->port[pd->didx], 0, af);
|
||||
dport = th->th_dport;
|
||||
@@ -3138,7 +3188,7 @@
|
||||
|
||||
if (PF_ANEQ(saddr, &nk->addr[pd->sidx], af) ||
|
||||
nk->port[pd->sidx] != sport) {
|
||||
- pf_change_ap(saddr, &pd->hdr.udp->uh_sport,
|
||||
+ pf_change_ap(m, saddr, &pd->hdr.udp->uh_sport,
|
||||
pd->ip_sum, &pd->hdr.udp->uh_sum,
|
||||
&nk->addr[pd->sidx],
|
||||
nk->port[pd->sidx], 1, af);
|
||||
@@ -3148,7 +3198,7 @@
|
||||
|
||||
if (PF_ANEQ(daddr, &nk->addr[pd->didx], af) ||
|
||||
nk->port[pd->didx] != dport) {
|
||||
- pf_change_ap(daddr, &pd->hdr.udp->uh_dport,
|
||||
+ pf_change_ap(m, daddr, &pd->hdr.udp->uh_dport,
|
||||
pd->ip_sum, &pd->hdr.udp->uh_sum,
|
||||
&nk->addr[pd->didx],
|
||||
nk->port[pd->didx], 1, af);
|
||||
@@ -3500,7 +3550,7 @@
|
||||
if ((s->src.seqdiff = pf_tcp_iss(pd) - s->src.seqlo) ==
|
||||
0)
|
||||
s->src.seqdiff = 1;
|
||||
- pf_change_a(&th->th_seq, &th->th_sum,
|
||||
+ pf_change_proto_a(m, &th->th_seq, &th->th_sum,
|
||||
htonl(s->src.seqlo + s->src.seqdiff), 0);
|
||||
*rewrite = 1;
|
||||
} else
|
||||
@@ -3824,9 +3874,9 @@
|
||||
while ((src->seqdiff = arc4random() - seq) == 0)
|
||||
;
|
||||
ack = ntohl(th->th_ack) - dst->seqdiff;
|
||||
- pf_change_a(&th->th_seq, &th->th_sum, htonl(seq +
|
||||
+ pf_change_proto_a(m, &th->th_seq, &th->th_sum, htonl(seq +
|
||||
src->seqdiff), 0);
|
||||
- pf_change_a(&th->th_ack, &th->th_sum, htonl(ack), 0);
|
||||
+ pf_change_proto_a(m, &th->th_ack, &th->th_sum, htonl(ack), 0);
|
||||
*copyback = 1;
|
||||
} else {
|
||||
ack = ntohl(th->th_ack);
|
||||
@@ -3876,9 +3926,9 @@
|
||||
ack = ntohl(th->th_ack) - dst->seqdiff;
|
||||
if (src->seqdiff) {
|
||||
/* Modulate sequence numbers */
|
||||
- pf_change_a(&th->th_seq, &th->th_sum, htonl(seq +
|
||||
+ pf_change_proto_a(m, &th->th_seq, &th->th_sum, htonl(seq +
|
||||
src->seqdiff), 0);
|
||||
- pf_change_a(&th->th_ack, &th->th_sum, htonl(ack), 0);
|
||||
+ pf_change_proto_a(m, &th->th_ack, &th->th_sum, htonl(ack), 0);
|
||||
*copyback = 1;
|
||||
}
|
||||
end = seq + pd->p_len;
|
||||
@@ -4332,14 +4382,14 @@
|
||||
|
||||
if (PF_ANEQ(pd->src, &nk->addr[pd->sidx], pd->af) ||
|
||||
nk->port[pd->sidx] != th->th_sport)
|
||||
- pf_change_ap(pd->src, &th->th_sport, pd->ip_sum,
|
||||
- &th->th_sum, &nk->addr[pd->sidx],
|
||||
+ pf_change_ap(m, pd->src, &th->th_sport,
|
||||
+ pd->ip_sum, &th->th_sum, &nk->addr[pd->sidx],
|
||||
nk->port[pd->sidx], 0, pd->af);
|
||||
|
||||
if (PF_ANEQ(pd->dst, &nk->addr[pd->didx], pd->af) ||
|
||||
nk->port[pd->didx] != th->th_dport)
|
||||
- pf_change_ap(pd->dst, &th->th_dport, pd->ip_sum,
|
||||
- &th->th_sum, &nk->addr[pd->didx],
|
||||
+ pf_change_ap(m, pd->dst, &th->th_dport,
|
||||
+ pd->ip_sum, &th->th_sum, &nk->addr[pd->didx],
|
||||
nk->port[pd->didx], 0, pd->af);
|
||||
copyback = 1;
|
||||
}
|
||||
@@ -4403,13 +4453,13 @@
|
||||
|
||||
if (PF_ANEQ(pd->src, &nk->addr[pd->sidx], pd->af) ||
|
||||
nk->port[pd->sidx] != uh->uh_sport)
|
||||
- pf_change_ap(pd->src, &uh->uh_sport, pd->ip_sum,
|
||||
+ pf_change_ap(m, pd->src, &uh->uh_sport, pd->ip_sum,
|
||||
&uh->uh_sum, &nk->addr[pd->sidx],
|
||||
nk->port[pd->sidx], 1, pd->af);
|
||||
|
||||
if (PF_ANEQ(pd->dst, &nk->addr[pd->didx], pd->af) ||
|
||||
nk->port[pd->didx] != uh->uh_dport)
|
||||
- pf_change_ap(pd->dst, &uh->uh_dport, pd->ip_sum,
|
||||
+ pf_change_ap(m, pd->dst, &uh->uh_dport, pd->ip_sum,
|
||||
&uh->uh_sum, &nk->addr[pd->didx],
|
||||
nk->port[pd->didx], 1, pd->af);
|
||||
m_copyback(m, off, sizeof(*uh), (caddr_t)uh);
|
||||
@@ -5526,6 +5576,13 @@
|
||||
if (ifp->if_flags & IFF_LOOPBACK)
|
||||
m0->m_flags |= M_SKIP_FIREWALL;
|
||||
|
||||
+ if (m0->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6 &
|
||||
+ ~ifp->if_hwassist) {
|
||||
+ uint32_t plen = m0->m_pkthdr.len - sizeof(*ip6);
|
||||
+ in6_delayed_cksum(m0, plen, sizeof(struct ip6_hdr));
|
||||
+ m0->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* If the packet is too large for the outgoing interface,
|
||||
* send back an icmp6 error.
|
||||
--- sys/netpfil/pf/pf_ioctl.c.orig
|
||||
+++ sys/netpfil/pf/pf_ioctl.c
|
||||
@@ -3561,12 +3561,6 @@
|
||||
{
|
||||
int chk;
|
||||
|
||||
- /* We need a proper CSUM befor we start (s. OpenBSD ip_output) */
|
||||
- if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
|
||||
- in_delayed_cksum(*m);
|
||||
- (*m)->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
|
||||
- }
|
||||
-
|
||||
chk = pf_test(PF_OUT, ifp, m, inp);
|
||||
if (chk && *m) {
|
||||
m_freem(*m);
|
||||
@@ -3605,13 +3599,6 @@
|
||||
{
|
||||
int chk;
|
||||
|
||||
- /* We need a proper CSUM before we start (s. OpenBSD ip_output) */
|
||||
- if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) {
|
||||
- in6_delayed_cksum(*m,
|
||||
- (*m)->m_pkthdr.len - sizeof(struct ip6_hdr),
|
||||
- sizeof(struct ip6_hdr));
|
||||
- (*m)->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6;
|
||||
- }
|
||||
CURVNET_SET(ifp->if_vnet);
|
||||
chk = pf_test6(PF_OUT, ifp, m, inp);
|
||||
CURVNET_RESTORE();
|
||||
--- sys/netpfil/pf/pf_norm.c.orig
|
||||
+++ sys/netpfil/pf/pf_norm.c
|
||||
@@ -1680,13 +1680,14 @@
|
||||
th->th_x2 = 0;
|
||||
nv = *(u_int16_t *)(&th->th_ack + 1);
|
||||
|
||||
- th->th_sum = pf_cksum_fixup(th->th_sum, ov, nv, 0);
|
||||
+ th->th_sum = pf_proto_cksum_fixup(m, th->th_sum, ov, nv, 0);
|
||||
rewrite = 1;
|
||||
}
|
||||
|
||||
/* Remove urgent pointer, if TH_URG is not set */
|
||||
if (!(flags & TH_URG) && th->th_urp) {
|
||||
- th->th_sum = pf_cksum_fixup(th->th_sum, th->th_urp, 0, 0);
|
||||
+ th->th_sum = pf_proto_cksum_fixup(m, th->th_sum, th->th_urp,
|
||||
+ 0, 0);
|
||||
th->th_urp = 0;
|
||||
rewrite = 1;
|
||||
}
|
||||
@@ -1887,7 +1888,7 @@
|
||||
(src->scrub->pfss_flags &
|
||||
PFSS_TIMESTAMP)) {
|
||||
tsval = ntohl(tsval);
|
||||
- pf_change_a(&opt[2],
|
||||
+ pf_change_proto_a(m, &opt[2],
|
||||
&th->th_sum,
|
||||
htonl(tsval +
|
||||
src->scrub->pfss_ts_mod),
|
||||
@@ -1903,7 +1904,7 @@
|
||||
PFSS_TIMESTAMP)) {
|
||||
tsecr = ntohl(tsecr)
|
||||
- dst->scrub->pfss_ts_mod;
|
||||
- pf_change_a(&opt[6],
|
||||
+ pf_change_proto_a(m, &opt[6],
|
||||
&th->th_sum, htonl(tsecr),
|
||||
0);
|
||||
copyback = 1;
|
||||
@@ -2230,8 +2231,8 @@
|
||||
case TCPOPT_MAXSEG:
|
||||
mss = (u_int16_t *)(optp + 2);
|
||||
if ((ntohs(*mss)) > r->max_mss) {
|
||||
- th->th_sum = pf_cksum_fixup(th->th_sum,
|
||||
- *mss, htons(r->max_mss), 0);
|
||||
+ th->th_sum = pf_proto_cksum_fixup(m,
|
||||
+ th->th_sum, *mss, htons(r->max_mss), 0);
|
||||
*mss = htons(r->max_mss);
|
||||
rewrite = 1;
|
||||
}
|
16
share/security/patches/EN-16:02/pf-10.2.patch.asc
Normal file
16
share/security/patches/EN-16:02/pf-10.2.patch.asc
Normal file
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABCgAGBQJWl2vVAAoJEO1n7NZdz2rnwAsP/jRzi56f90G3nCAJx18gorHB
|
||||
unXB4gMVkQvFoEYrhn9N96HhvFPdvEm0/YwAJqWpiRH3OO9RtAjGIJUc1vpBzCIk
|
||||
XROAzwV4EevwcqhfVpZlQ/SxrU1+TXAL/sLSgnaSapCaTadUGDbetDpCi6ZeWzb3
|
||||
Kn8xeYZcIGDxQgiDBvzq3xcpxoQNc5VzpTwfE5P3yrfjFEPhW13J+6+PZuQEr3Hd
|
||||
44vqFI+me0g498CSuokctqidGTCqsd0ak6y6t1r1wRkBnZJ12kc1TQT0FCkTB38I
|
||||
THgdpglmr2ZNN7RRw0L30N28XPUipoVfzIjv8c7bWFY6j7SzjIWdGQVbnzOdNUyg
|
||||
YbR68yVA4uZ0/vpTHLlme3s90NdUufS7DVL7ner7hFjAuSMJU11UyLYRcZhMCsMs
|
||||
V3Zssu49J7as/f5qvRCJOrR2DBQwX8XnvuMLBRf2GdseHhrNn8RSRIsMGgOu96XN
|
||||
NriyyoV7XcM30Tn1OlLdPNlrIYi/OB8STstdWRnSDhimdkf/t7IGYKUdhNAadCQI
|
||||
X0tsNalFP0ChbrKpooJ0wVExeS6mF+cWJqvS78y1we/3rQYBPDKA1vMptt7shHI7
|
||||
Cy1uZezwh5Pge2CeRgkyBvdplmZIbwNi3pah8JwE9cdlipEvf9qEydY8pooQIpZe
|
||||
sk42yCvQAjd69q7VWdhx
|
||||
=b/JC
|
||||
-----END PGP SIGNATURE-----
|
389
share/security/patches/EN-16:02/pf-9.patch
Normal file
389
share/security/patches/EN-16:02/pf-9.patch
Normal file
|
@ -0,0 +1,389 @@
|
|||
--- sys/contrib/pf/net/pf.c.orig
|
||||
+++ sys/contrib/pf/net/pf.c
|
||||
@@ -239,7 +239,7 @@
|
||||
void pf_add_threshold(struct pf_threshold *);
|
||||
int pf_check_threshold(struct pf_threshold *);
|
||||
|
||||
-void pf_change_ap(struct pf_addr *, u_int16_t *,
|
||||
+void pf_change_ap(struct mbuf *, struct pf_addr *, u_int16_t *,
|
||||
u_int16_t *, u_int16_t *, struct pf_addr *,
|
||||
u_int16_t, u_int8_t, sa_family_t);
|
||||
int pf_modulate_sack(struct mbuf *, int, struct pf_pdesc *,
|
||||
@@ -2007,6 +2007,22 @@
|
||||
}
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * Checksum updates are a little complicated because the checksum in the TCP/UDP
|
||||
+ * header isn't always a full checksum. In some cases (i.e. output) it's a
|
||||
+ * pseudo-header checksum, which is a partial checksum over src/dst IP
|
||||
+ * addresses, protocol number and length.
|
||||
+ *
|
||||
+ * That means we have the following cases:
|
||||
+ * * Input or forwarding: we don't have TSO, the checksum fields are full
|
||||
+ * checksums, we need to update the checksum whenever we change anything.
|
||||
+ * * Output (i.e. the checksum is a pseudo-header checksum):
|
||||
+ * x The field being updated is src/dst address or affects the length of
|
||||
+ * the packet. We need to update the pseudo-header checksum (note that this
|
||||
+ * checksum is not ones' complement).
|
||||
+ * x Some other field is being modified (e.g. src/dst port numbers): We
|
||||
+ * don't have to update anything.
|
||||
+ **/
|
||||
u_int16_t
|
||||
pf_cksum_fixup(u_int16_t cksum, u_int16_t old, u_int16_t new, u_int8_t udp)
|
||||
{
|
||||
@@ -2022,9 +2038,20 @@
|
||||
return (l);
|
||||
}
|
||||
|
||||
+u_int16_t
|
||||
+pf_proto_cksum_fixup(struct mbuf *m, u_int16_t cksum, u_int16_t old,
|
||||
+ u_int16_t new, u_int8_t udp)
|
||||
+{
|
||||
+ if (m->m_pkthdr.csum_flags & (CSUM_DELAY_DATA | CSUM_DELAY_DATA_IPV6))
|
||||
+ return (cksum);
|
||||
+
|
||||
+ return (pf_cksum_fixup(cksum, old, new, udp));
|
||||
+}
|
||||
+
|
||||
void
|
||||
-pf_change_ap(struct pf_addr *a, u_int16_t *p, u_int16_t *ic, u_int16_t *pc,
|
||||
- struct pf_addr *an, u_int16_t pn, u_int8_t u, sa_family_t af)
|
||||
+pf_change_ap(struct mbuf *m, struct pf_addr *a, u_int16_t *p, u_int16_t *ic,
|
||||
+ u_int16_t *pc, struct pf_addr *an, u_int16_t pn, u_int8_t u,
|
||||
+ sa_family_t af)
|
||||
{
|
||||
struct pf_addr ao;
|
||||
u_int16_t po = *p;
|
||||
@@ -2032,6 +2059,9 @@
|
||||
PF_ACPY(&ao, a, af);
|
||||
PF_ACPY(a, an, af);
|
||||
|
||||
+ if (m->m_pkthdr.csum_flags & (CSUM_DELAY_DATA | CSUM_DELAY_DATA_IPV6))
|
||||
+ *pc = ~*pc;
|
||||
+
|
||||
*p = pn;
|
||||
|
||||
switch (af) {
|
||||
@@ -2041,17 +2071,19 @@
|
||||
ao.addr16[0], an->addr16[0], 0),
|
||||
ao.addr16[1], an->addr16[1], 0);
|
||||
*p = pn;
|
||||
- *pc = pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(*pc,
|
||||
+
|
||||
+ *pc = pf_cksum_fixup(pf_cksum_fixup(*pc,
|
||||
ao.addr16[0], an->addr16[0], u),
|
||||
- ao.addr16[1], an->addr16[1], u),
|
||||
- po, pn, u);
|
||||
+ ao.addr16[1], an->addr16[1], u);
|
||||
+
|
||||
+ *pc = pf_proto_cksum_fixup(m, *pc, po, pn, u);
|
||||
break;
|
||||
#endif /* INET */
|
||||
#ifdef INET6
|
||||
case AF_INET6:
|
||||
*pc = pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(
|
||||
pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(
|
||||
- pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(*pc,
|
||||
+ pf_cksum_fixup(pf_cksum_fixup(*pc,
|
||||
ao.addr16[0], an->addr16[0], u),
|
||||
ao.addr16[1], an->addr16[1], u),
|
||||
ao.addr16[2], an->addr16[2], u),
|
||||
@@ -2059,13 +2091,20 @@
|
||||
ao.addr16[4], an->addr16[4], u),
|
||||
ao.addr16[5], an->addr16[5], u),
|
||||
ao.addr16[6], an->addr16[6], u),
|
||||
- ao.addr16[7], an->addr16[7], u),
|
||||
- po, pn, u);
|
||||
+ ao.addr16[7], an->addr16[7], u);
|
||||
+
|
||||
+ *pc = pf_proto_cksum_fixup(m, *pc, po, pn, u);
|
||||
break;
|
||||
#endif /* INET6 */
|
||||
}
|
||||
-}
|
||||
|
||||
+ if (m->m_pkthdr.csum_flags & (CSUM_DELAY_DATA |
|
||||
+ CSUM_DELAY_DATA_IPV6)) {
|
||||
+ *pc = ~*pc;
|
||||
+ if (! *pc)
|
||||
+ *pc = 0xffff;
|
||||
+ }
|
||||
+}
|
||||
|
||||
/* Changes a u_int32_t. Uses a void * so there are no align restrictions */
|
||||
void
|
||||
@@ -2079,6 +2118,19 @@
|
||||
ao % 65536, an % 65536, u);
|
||||
}
|
||||
|
||||
+void
|
||||
+pf_change_proto_a(struct mbuf *m, void *a, u_int16_t *c, u_int32_t an, u_int8_t udp)
|
||||
+{
|
||||
+ u_int32_t ao;
|
||||
+
|
||||
+ memcpy(&ao, a, sizeof(ao));
|
||||
+ memcpy(a, &an, sizeof(u_int32_t));
|
||||
+
|
||||
+ *c = pf_proto_cksum_fixup(m,
|
||||
+ pf_proto_cksum_fixup(m, *c, ao / 65536, an / 65536, udp),
|
||||
+ ao % 65536, an % 65536, udp);
|
||||
+}
|
||||
+
|
||||
#ifdef INET6
|
||||
void
|
||||
pf_change_a6(struct pf_addr *a, u_int16_t *c, struct pf_addr *an, u_int8_t u)
|
||||
@@ -2228,12 +2280,10 @@
|
||||
for (i = 2; i + TCPOLEN_SACK <= olen;
|
||||
i += TCPOLEN_SACK) {
|
||||
memcpy(&sack, &opt[i], sizeof(sack));
|
||||
- pf_change_a(&sack.start, &th->th_sum,
|
||||
- htonl(ntohl(sack.start) -
|
||||
- dst->seqdiff), 0);
|
||||
- pf_change_a(&sack.end, &th->th_sum,
|
||||
- htonl(ntohl(sack.end) -
|
||||
- dst->seqdiff), 0);
|
||||
+ pf_change_proto_a(m, &sack.start, &th->th_sum,
|
||||
+ htonl(ntohl(sack.start) - dst->seqdiff), 0);
|
||||
+ pf_change_proto_a(m, &sack.end, &th->th_sum,
|
||||
+ htonl(ntohl(sack.end) - dst->seqdiff), 0);
|
||||
memcpy(&opt[i], &sack, sizeof(sack));
|
||||
}
|
||||
copyback = 1;
|
||||
@@ -3400,7 +3450,7 @@
|
||||
|
||||
if (PF_ANEQ(saddr, &nk->addr[pd->sidx], af) ||
|
||||
nk->port[pd->sidx] != sport) {
|
||||
- pf_change_ap(saddr, &th->th_sport, pd->ip_sum,
|
||||
+ pf_change_ap(m, saddr, &th->th_sport, pd->ip_sum,
|
||||
&th->th_sum, &nk->addr[pd->sidx],
|
||||
nk->port[pd->sidx], 0, af);
|
||||
pd->sport = &th->th_sport;
|
||||
@@ -3409,7 +3459,7 @@
|
||||
|
||||
if (PF_ANEQ(daddr, &nk->addr[pd->didx], af) ||
|
||||
nk->port[pd->didx] != dport) {
|
||||
- pf_change_ap(daddr, &th->th_dport, pd->ip_sum,
|
||||
+ pf_change_ap(m, daddr, &th->th_dport, pd->ip_sum,
|
||||
&th->th_sum, &nk->addr[pd->didx],
|
||||
nk->port[pd->didx], 0, af);
|
||||
dport = th->th_dport;
|
||||
@@ -3423,7 +3473,7 @@
|
||||
|
||||
if (PF_ANEQ(saddr, &nk->addr[pd->sidx], af) ||
|
||||
nk->port[pd->sidx] != sport) {
|
||||
- pf_change_ap(saddr, &pd->hdr.udp->uh_sport,
|
||||
+ pf_change_ap(m, saddr, &pd->hdr.udp->uh_sport,
|
||||
pd->ip_sum, &pd->hdr.udp->uh_sum,
|
||||
&nk->addr[pd->sidx],
|
||||
nk->port[pd->sidx], 1, af);
|
||||
@@ -3433,7 +3483,7 @@
|
||||
|
||||
if (PF_ANEQ(daddr, &nk->addr[pd->didx], af) ||
|
||||
nk->port[pd->didx] != dport) {
|
||||
- pf_change_ap(daddr, &pd->hdr.udp->uh_dport,
|
||||
+ pf_change_ap(m, daddr, &pd->hdr.udp->uh_dport,
|
||||
pd->ip_sum, &pd->hdr.udp->uh_sum,
|
||||
&nk->addr[pd->didx],
|
||||
nk->port[pd->didx], 1, af);
|
||||
@@ -3845,7 +3895,7 @@
|
||||
if ((s->src.seqdiff = pf_tcp_iss(pd) - s->src.seqlo) ==
|
||||
0)
|
||||
s->src.seqdiff = 1;
|
||||
- pf_change_a(&th->th_seq, &th->th_sum,
|
||||
+ pf_change_proto_a(m, &th->th_seq, &th->th_sum,
|
||||
htonl(s->src.seqlo + s->src.seqdiff), 0);
|
||||
*rewrite = 1;
|
||||
} else
|
||||
@@ -4175,9 +4225,9 @@
|
||||
while ((src->seqdiff = arc4random() - seq) == 0)
|
||||
;
|
||||
ack = ntohl(th->th_ack) - dst->seqdiff;
|
||||
- pf_change_a(&th->th_seq, &th->th_sum, htonl(seq +
|
||||
+ pf_change_proto_a(m, &th->th_seq, &th->th_sum, htonl(seq +
|
||||
src->seqdiff), 0);
|
||||
- pf_change_a(&th->th_ack, &th->th_sum, htonl(ack), 0);
|
||||
+ pf_change_proto_a(m, &th->th_ack, &th->th_sum, htonl(ack), 0);
|
||||
*copyback = 1;
|
||||
} else {
|
||||
ack = ntohl(th->th_ack);
|
||||
@@ -4227,9 +4277,9 @@
|
||||
ack = ntohl(th->th_ack) - dst->seqdiff;
|
||||
if (src->seqdiff) {
|
||||
/* Modulate sequence numbers */
|
||||
- pf_change_a(&th->th_seq, &th->th_sum, htonl(seq +
|
||||
+ pf_change_proto_a(m, &th->th_seq, &th->th_sum, htonl(seq +
|
||||
src->seqdiff), 0);
|
||||
- pf_change_a(&th->th_ack, &th->th_sum, htonl(ack), 0);
|
||||
+ pf_change_proto_a(m, &th->th_ack, &th->th_sum, htonl(ack), 0);
|
||||
*copyback = 1;
|
||||
}
|
||||
end = seq + pd->p_len;
|
||||
@@ -4729,14 +4779,14 @@
|
||||
|
||||
if (PF_ANEQ(pd->src, &nk->addr[pd->sidx], pd->af) ||
|
||||
nk->port[pd->sidx] != th->th_sport)
|
||||
- pf_change_ap(pd->src, &th->th_sport, pd->ip_sum,
|
||||
- &th->th_sum, &nk->addr[pd->sidx],
|
||||
+ pf_change_ap(m, pd->src, &th->th_sport,
|
||||
+ pd->ip_sum, &th->th_sum, &nk->addr[pd->sidx],
|
||||
nk->port[pd->sidx], 0, pd->af);
|
||||
|
||||
if (PF_ANEQ(pd->dst, &nk->addr[pd->didx], pd->af) ||
|
||||
nk->port[pd->didx] != th->th_dport)
|
||||
- pf_change_ap(pd->dst, &th->th_dport, pd->ip_sum,
|
||||
- &th->th_sum, &nk->addr[pd->didx],
|
||||
+ pf_change_ap(m, pd->dst, &th->th_dport,
|
||||
+ pd->ip_sum, &th->th_sum, &nk->addr[pd->didx],
|
||||
nk->port[pd->didx], 0, pd->af);
|
||||
copyback = 1;
|
||||
}
|
||||
@@ -4807,13 +4857,13 @@
|
||||
|
||||
if (PF_ANEQ(pd->src, &nk->addr[pd->sidx], pd->af) ||
|
||||
nk->port[pd->sidx] != uh->uh_sport)
|
||||
- pf_change_ap(pd->src, &uh->uh_sport, pd->ip_sum,
|
||||
+ pf_change_ap(m, pd->src, &uh->uh_sport, pd->ip_sum,
|
||||
&uh->uh_sum, &nk->addr[pd->sidx],
|
||||
nk->port[pd->sidx], 1, pd->af);
|
||||
|
||||
if (PF_ANEQ(pd->dst, &nk->addr[pd->didx], pd->af) ||
|
||||
nk->port[pd->didx] != uh->uh_dport)
|
||||
- pf_change_ap(pd->dst, &uh->uh_dport, pd->ip_sum,
|
||||
+ pf_change_ap(m, pd->dst, &uh->uh_dport, pd->ip_sum,
|
||||
&uh->uh_sum, &nk->addr[pd->didx],
|
||||
nk->port[pd->didx], 1, pd->af);
|
||||
#ifdef __FreeBSD__
|
||||
@@ -6290,6 +6340,13 @@
|
||||
ip6 = mtod(m0, struct ip6_hdr *);
|
||||
}
|
||||
|
||||
+ if (m0->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6 &
|
||||
+ ~ifp->if_hwassist) {
|
||||
+ uint32_t plen = m0->m_pkthdr.len - sizeof(*ip6);
|
||||
+ in6_delayed_cksum(m0, plen, sizeof(struct ip6_hdr));
|
||||
+ m0->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* If the packet is too large for the outgoing interface,
|
||||
* send back an icmp6 error.
|
||||
--- sys/contrib/pf/net/pf_ioctl.c.orig
|
||||
+++ sys/contrib/pf/net/pf_ioctl.c
|
||||
@@ -4158,11 +4158,6 @@
|
||||
struct ip *h = NULL;
|
||||
int chk;
|
||||
|
||||
- /* We need a proper CSUM befor we start (s. OpenBSD ip_output) */
|
||||
- if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
|
||||
- in_delayed_cksum(*m);
|
||||
- (*m)->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
|
||||
- }
|
||||
if ((*m)->m_pkthdr.len >= (int)sizeof(*h)) {
|
||||
/* if m_pkthdr.len is less than ip header, pf will handle. */
|
||||
h = mtod(*m, struct ip *);
|
||||
@@ -4222,14 +4217,6 @@
|
||||
*/
|
||||
int chk;
|
||||
|
||||
- /* We need a proper CSUM before we start (s. OpenBSD ip_output) */
|
||||
- if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
|
||||
-#ifdef INET
|
||||
- /* XXX-BZ copy&paste error from r126261? */
|
||||
- in_delayed_cksum(*m);
|
||||
-#endif
|
||||
- (*m)->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
|
||||
- }
|
||||
CURVNET_SET(ifp->if_vnet);
|
||||
chk = pf_test6(PF_OUT, ifp, m, NULL, inp);
|
||||
CURVNET_RESTORE();
|
||||
--- sys/contrib/pf/net/pf_norm.c.orig
|
||||
+++ sys/contrib/pf/net/pf_norm.c
|
||||
@@ -1657,13 +1657,14 @@
|
||||
th->th_x2 = 0;
|
||||
nv = *(u_int16_t *)(&th->th_ack + 1);
|
||||
|
||||
- th->th_sum = pf_cksum_fixup(th->th_sum, ov, nv, 0);
|
||||
+ th->th_sum = pf_proto_cksum_fixup(m, th->th_sum, ov, nv, 0);
|
||||
rewrite = 1;
|
||||
}
|
||||
|
||||
/* Remove urgent pointer, if TH_URG is not set */
|
||||
if (!(flags & TH_URG) && th->th_urp) {
|
||||
- th->th_sum = pf_cksum_fixup(th->th_sum, th->th_urp, 0, 0);
|
||||
+ th->th_sum = pf_proto_cksum_fixup(m, th->th_sum, th->th_urp,
|
||||
+ 0, 0);
|
||||
th->th_urp = 0;
|
||||
rewrite = 1;
|
||||
}
|
||||
@@ -1889,7 +1890,7 @@
|
||||
(src->scrub->pfss_flags &
|
||||
PFSS_TIMESTAMP)) {
|
||||
tsval = ntohl(tsval);
|
||||
- pf_change_a(&opt[2],
|
||||
+ pf_change_proto_a(m, &opt[2],
|
||||
&th->th_sum,
|
||||
htonl(tsval +
|
||||
src->scrub->pfss_ts_mod),
|
||||
@@ -1905,7 +1906,7 @@
|
||||
PFSS_TIMESTAMP)) {
|
||||
tsecr = ntohl(tsecr)
|
||||
- dst->scrub->pfss_ts_mod;
|
||||
- pf_change_a(&opt[6],
|
||||
+ pf_change_proto_a(m, &opt[6],
|
||||
&th->th_sum, htonl(tsecr),
|
||||
0);
|
||||
copyback = 1;
|
||||
@@ -2286,8 +2287,8 @@
|
||||
case TCPOPT_MAXSEG:
|
||||
mss = (u_int16_t *)(optp + 2);
|
||||
if ((ntohs(*mss)) > r->max_mss) {
|
||||
- th->th_sum = pf_cksum_fixup(th->th_sum,
|
||||
- *mss, htons(r->max_mss), 0);
|
||||
+ th->th_sum = pf_proto_cksum_fixup(m,
|
||||
+ th->th_sum, *mss, htons(r->max_mss), 0);
|
||||
*mss = htons(r->max_mss);
|
||||
rewrite = 1;
|
||||
}
|
||||
--- sys/contrib/pf/net/pfvar.h.orig
|
||||
+++ sys/contrib/pf/net/pfvar.h
|
||||
@@ -1909,6 +1909,8 @@
|
||||
extern void pf_print_flags(u_int8_t);
|
||||
extern u_int16_t pf_cksum_fixup(u_int16_t, u_int16_t, u_int16_t,
|
||||
u_int8_t);
|
||||
+extern u_int16_t pf_proto_cksum_fixup(struct mbuf *, u_int16_t,
|
||||
+ u_int16_t, u_int16_t, u_int8_t);
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
VNET_DECLARE(struct ifnet *, sync_ifp);
|
||||
@@ -1954,6 +1956,9 @@
|
||||
void *pf_pull_hdr(struct mbuf *, int, void *, int, u_short *, u_short *,
|
||||
sa_family_t);
|
||||
void pf_change_a(void *, u_int16_t *, u_int32_t, u_int8_t);
|
||||
+void pf_change_proto_a(struct mbuf *, void *, u_int16_t *, u_int32_t,
|
||||
+ u_int8_t);
|
||||
+void pf_change_tcp_a(struct mbuf *, void *, u_int16_t *, u_int32_t);
|
||||
int pflog_packet(struct pfi_kif *, struct mbuf *, sa_family_t, u_int8_t,
|
||||
u_int8_t, struct pf_rule *, struct pf_rule *, struct pf_ruleset *,
|
||||
struct pf_pdesc *);
|
||||
--- sys/netinet6/ip6_output.c.orig
|
||||
+++ sys/netinet6/ip6_output.c
|
||||
@@ -184,7 +184,7 @@
|
||||
}\
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
-static void
|
||||
+void
|
||||
in6_delayed_cksum(struct mbuf *m, uint32_t plen, u_short offset)
|
||||
{
|
||||
u_short csum;
|
||||
--- sys/netinet6/ip6_var.h.orig
|
||||
+++ sys/netinet6/ip6_var.h
|
||||
@@ -456,6 +456,7 @@
|
||||
struct rtentry **, u_int);
|
||||
u_int32_t ip6_randomid(void);
|
||||
u_int32_t ip6_randomflowlabel(void);
|
||||
+void in6_delayed_cksum(struct mbuf *m, uint32_t plen, u_short offset);
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* !_NETINET6_IP6_VAR_H_ */
|
16
share/security/patches/EN-16:02/pf-9.patch.asc
Normal file
16
share/security/patches/EN-16:02/pf-9.patch.asc
Normal file
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABCgAGBQJWl2vXAAoJEO1n7NZdz2rnWksQANG3wnvt9x7pSkzPczC76OlN
|
||||
FVDRCnBNcBe4Jpr0KixCGBxY5ICVLPTbyS9REX3cNY5PokjKuFEqvX6EUtE0W6Jp
|
||||
k3Y4AYRvCGCrCbn7HXwlbmRDKZNjvnC0Ek6SQYotcSGeY69RyusZ2tAZKQRv+TGR
|
||||
JO95YKORnU4NvBtm6jDQAvdFodDG2yLpj5Q8V8/N7aA+0CKHp5+RkTUv/2THmrKD
|
||||
8BeMWbtCJBVIAEuChfuDKj5fpWKaCAm7TmZZJHUviY1BmRu2z0CAya7Z//a74d+s
|
||||
uvkDC2ohjqZ13EmC9dQ+WyRIlb8KbBGl5f8zM2wNX2Cqvlt0tAeoEHl/KAJTJ2Ap
|
||||
PAJd6DCz2Fqu/vHzqzRW8zkjUOoRJ4CkwLjHqhxKJcJoG2x8nwCKYpKpF47/6Ys1
|
||||
UGfGva42YjEKqtK9vK7PjMUSFyvJVNQSEsj3kYBPW3cJdx7monF9kcLYpBRBFO4W
|
||||
9RVT8xjHtJv76aWqnsyA5DIlNfIg3x7lMLnXE1hR+jifyZ1mDJxHYIaDzxq/klBt
|
||||
cWIRlfCvtar8bGgNR1O/qncSNgn+3k32861AsfS/F0ca4lYdTAkE/5xXA2YesfyS
|
||||
hWqjchvI6v36JyeshEqL68RXKsnoaB0SxJ3z19Qam0m3QSHNNANyQackPsiTZRxe
|
||||
hLYgXohMz/V8yjbEgOOP
|
||||
=rwun
|
||||
-----END PGP SIGNATURE-----
|
121
share/security/patches/EN-16:03/yplib.patch
Normal file
121
share/security/patches/EN-16:03/yplib.patch
Normal file
|
@ -0,0 +1,121 @@
|
|||
--- lib/libc/yp/yplib.c.orig
|
||||
+++ lib/libc/yp/yplib.c
|
||||
@@ -655,7 +655,7 @@
|
||||
struct timeval tv;
|
||||
struct ypreq_key yprk;
|
||||
int r;
|
||||
-
|
||||
+ int retries = 0;
|
||||
*outval = NULL;
|
||||
*outvallen = 0;
|
||||
|
||||
@@ -700,6 +700,11 @@
|
||||
#endif
|
||||
|
||||
again:
|
||||
+ if (retries > MAX_RETRIES) {
|
||||
+ YPUNLOCK();
|
||||
+ return (YPERR_RPC);
|
||||
+ }
|
||||
+
|
||||
if (_yp_dobind(indomain, &ysd) != 0) {
|
||||
YPUNLOCK();
|
||||
return (YPERR_DOMAIN);
|
||||
@@ -716,6 +721,7 @@
|
||||
if (r != RPC_SUCCESS) {
|
||||
clnt_perror(ysd->dom_client, "yp_match: clnt_call");
|
||||
_yp_unbind(ysd);
|
||||
+ retries++;
|
||||
goto again;
|
||||
}
|
||||
|
||||
@@ -772,7 +778,7 @@
|
||||
struct dom_binding *ysd;
|
||||
struct timeval tv;
|
||||
int r;
|
||||
-
|
||||
+ int retries = 0;
|
||||
/* Sanity check */
|
||||
|
||||
if (indomain == NULL || !strlen(indomain) ||
|
||||
@@ -784,6 +790,11 @@
|
||||
|
||||
YPLOCK();
|
||||
again:
|
||||
+ if (retries > MAX_RETRIES) {
|
||||
+ YPUNLOCK();
|
||||
+ return (YPERR_RPC);
|
||||
+ }
|
||||
+
|
||||
if (_yp_dobind(indomain, &ysd) != 0) {
|
||||
YPUNLOCK();
|
||||
return (YPERR_DOMAIN);
|
||||
@@ -802,6 +813,7 @@
|
||||
if (r != RPC_SUCCESS) {
|
||||
clnt_perror(ysd->dom_client, "yp_first: clnt_call");
|
||||
_yp_unbind(ysd);
|
||||
+ retries++;
|
||||
goto again;
|
||||
}
|
||||
if (!(r = ypprot_err(yprkv.stat))) {
|
||||
@@ -844,7 +856,7 @@
|
||||
struct dom_binding *ysd;
|
||||
struct timeval tv;
|
||||
int r;
|
||||
-
|
||||
+ int retries = 0;
|
||||
/* Sanity check */
|
||||
|
||||
if (inkey == NULL || !strlen(inkey) || inkeylen <= 0 ||
|
||||
@@ -857,6 +869,11 @@
|
||||
|
||||
YPLOCK();
|
||||
again:
|
||||
+ if (retries > MAX_RETRIES) {
|
||||
+ YPUNLOCK();
|
||||
+ return (YPERR_RPC);
|
||||
+ }
|
||||
+
|
||||
if (_yp_dobind(indomain, &ysd) != 0) {
|
||||
YPUNLOCK();
|
||||
return (YPERR_DOMAIN);
|
||||
@@ -877,6 +894,7 @@
|
||||
if (r != RPC_SUCCESS) {
|
||||
clnt_perror(ysd->dom_client, "yp_next: clnt_call");
|
||||
_yp_unbind(ysd);
|
||||
+ retries++;
|
||||
goto again;
|
||||
}
|
||||
if (!(r = ypprot_err(yprkv.stat))) {
|
||||
@@ -920,7 +938,7 @@
|
||||
CLIENT *clnt;
|
||||
u_long status, savstat;
|
||||
int clnt_sock;
|
||||
-
|
||||
+ int retries = 0;
|
||||
/* Sanity check */
|
||||
|
||||
if (indomain == NULL || !strlen(indomain) ||
|
||||
@@ -929,6 +947,10 @@
|
||||
|
||||
YPLOCK();
|
||||
again:
|
||||
+ if (retries > MAX_RETRIES) {
|
||||
+ YPUNLOCK();
|
||||
+ return (YPERR_RPC);
|
||||
+ }
|
||||
|
||||
if (_yp_dobind(indomain, &ysd) != 0) {
|
||||
YPUNLOCK();
|
||||
@@ -958,9 +980,10 @@
|
||||
if (clnt_call(clnt, YPPROC_ALL,
|
||||
(xdrproc_t)xdr_ypreq_nokey, &yprnk,
|
||||
(xdrproc_t)xdr_ypresp_all_seq, &status, tv) != RPC_SUCCESS) {
|
||||
- clnt_perror(ysd->dom_client, "yp_all: clnt_call");
|
||||
+ clnt_perror(clnt, "yp_all: clnt_call");
|
||||
clnt_destroy(clnt);
|
||||
_yp_unbind(ysd);
|
||||
+ retries++;
|
||||
goto again;
|
||||
}
|
||||
|
16
share/security/patches/EN-16:03/yplib.patch.asc
Normal file
16
share/security/patches/EN-16:03/yplib.patch.asc
Normal file
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABCgAGBQJWl2vYAAoJEO1n7NZdz2rnxbYQAKxlkBfJnArM/ESwHCi9dvbC
|
||||
Q4dsDErwVo2uIaxyB29Tl2uy2qR7npiXOCbuaKZHnFr87lTwi0zsELQ3OJEFbzsF
|
||||
XTkRteKfM4el/s4UUzj0IIYnR7w97UvLM5stgrilIegg4yg0okOiGDDpentv/iPb
|
||||
EGzt9PbWncsminLR0bbwMygE3Pb/5NVcdEUzZSEVVFjWt+8N4j1DMQolLIs/pgvh
|
||||
TSWlztQqEFntia5LjBx05WOlg5cnM9NZGYW4ruQ2hVOjVdb/qEYyDKRzDOIkYIGl
|
||||
vHjWltGQNAmB3+EpCg1m4dENBhQPwkmXI9x87c+M3MsgZafOwY9C/igjWyUngDjP
|
||||
lquCAQq8pMk0OvtUctbjp3jMGVOUwhi4x3ZtknnHcR33/PCBTGIi7eekNdXp9g1G
|
||||
0Iu/0meA1HEN3Zll+J4iGUoMIDPj247Lcqp3k/+V7sWDuHRszjW1Thk07OLS/+E4
|
||||
iJ1vLy9FuwBoVOuc5h3P2hc2dAR49rlSh/DC+CIosRWtBN3K5kEi3zGyTPx1jCb9
|
||||
KZnJLRjRsp7Pc8ttCXHprUn1EqqxeIsDHLAJ4v2FjieKawQXfeJPnzhUKL5W1B8F
|
||||
N6GkwxhwwksHfwqOF6Lt7i4Zfy3+HSqO5sJlAvZ0H95in6/rdkC/au0FTYfoowkW
|
||||
XCERr6GWLn+OElTN0zP6
|
||||
=m8uJ
|
||||
-----END PGP SIGNATURE-----
|
21
share/security/patches/SA-16:01/sctp.patch
Normal file
21
share/security/patches/SA-16:01/sctp.patch
Normal file
|
@ -0,0 +1,21 @@
|
|||
--- sys/netinet6/sctp6_usrreq.c.orig
|
||||
+++ sys/netinet6/sctp6_usrreq.c
|
||||
@@ -379,7 +379,6 @@
|
||||
* XXX: We assume that when IPV6 is non NULL, M and OFF are
|
||||
* valid.
|
||||
*/
|
||||
- /* check if we can safely examine src and dst ports */
|
||||
struct sctp_inpcb *inp = NULL;
|
||||
struct sctp_tcb *stcb = NULL;
|
||||
struct sctp_nets *net = NULL;
|
||||
@@ -388,6 +387,10 @@
|
||||
if (ip6cp->ip6c_m == NULL)
|
||||
return;
|
||||
|
||||
+ /* Check if we can safely examine the SCTP header. */
|
||||
+ if (ip6cp->ip6c_m->m_pkthdr.len < ip6cp->ip6c_off + sizeof(sh))
|
||||
+ return;
|
||||
+
|
||||
bzero(&sh, sizeof(sh));
|
||||
bzero(&final, sizeof(final));
|
||||
inp = NULL;
|
16
share/security/patches/SA-16:01/sctp.patch.asc
Normal file
16
share/security/patches/SA-16:01/sctp.patch.asc
Normal file
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABCgAGBQJWl2vZAAoJEO1n7NZdz2rnhLcQAKcsskSsuiYk43iZ3r+xYTxW
|
||||
rnKNXWsg07vvgGTt7SuSieW+U+QJG7tlneksjFdOMlubaEzxhpSptsWYWy+jkR8U
|
||||
revnF2SW1BItKYmXLtYAtyzvHxIuOlJKiyUKflA/MdrNdgPBpLcOgxJw1EJcaY6u
|
||||
5YUTIg3N4KLNSNFlvOVPi9PtM8uf7gR+8rvvbPW/v9ni28qsp8un5biPtgr/ESuV
|
||||
ya4nTFwYi6221na3dB/PyA97WKd7rvkDyZvUA5IDeNGDm1mT15YPRPaknAmlBsa6
|
||||
9vEnObj9oODKsdwsPS+Ov0By3X9CsW2dJlcLIHmC/DW89My3x/Q1pbquqTc5P8DF
|
||||
eu4i0TuYgPlukjWqASi04zoOPibRxNadLaqPr6BKMDX4daUXmP6G+wnWAp89tj/3
|
||||
t1rAsB/z/OXq136vIEgRnEIVYMBk0Ie9Jc5wsm9ZA8WQ7w4+1NJOmhmR5V4hD+IX
|
||||
m0FueELyEKje57ArwryjoBgHUgODQtI1QARPPAvvN1x81J76dQVT+fzBWychWzzk
|
||||
OvvF2mbxwxfIQBB47OQVrrqctxfLZyekmpY6Ma6eCY5dzFdmI3ncHnkmXE2HHklU
|
||||
Oi7NtuwkxQfARKDON3CWU9PBYQkV9aciTDYMO1Lk24ojwye0XL7XWGMPR+/GjT3v
|
||||
cacygRjuFTVLcLIka2w+
|
||||
=AqPl
|
||||
-----END PGP SIGNATURE-----
|
15927
share/security/patches/SA-16:02/ntp-10.patch
Normal file
15927
share/security/patches/SA-16:02/ntp-10.patch
Normal file
File diff suppressed because it is too large
Load diff
16
share/security/patches/SA-16:02/ntp-10.patch.asc
Normal file
16
share/security/patches/SA-16:02/ntp-10.patch.asc
Normal file
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABCgAGBQJWl2vZAAoJEO1n7NZdz2rnza8P/i0CWpBBRnXvnA7OgD6Xq9Im
|
||||
W9uB8Hca47QOoyZXIJ45u5KUxD4wd5urJTG6SPnxrme1Nevg74yIXQFPatYC1lwS
|
||||
gGFMNLR9n7BP/NldYqnCyraf7r0sX4pTHR6oS2D+Ttg9C18OwDeGM04Q/hiMROVJ
|
||||
RdiFYiOzKU4r5EEhFGaMnEmWYYQw5u1VrKKrWJajOnOpIixzcz596xudpraa3AP5
|
||||
Tr0RytKTaHfd5QeP8vRANZSPI5lBpKahoYRJNhmURyiOKXxdOp8A2HjvXk0hdEIk
|
||||
6U6XgQSE1fVpMyoWRB1hm5sVlwH0kD2q7mYdb+TgCdR0tWS3nJRKbrThjP/CYxAy
|
||||
GOVYuIWI6qjI46V6TFi7AyyFrBCEHnkNjtRk4EUwUp1s3ZAsK9qZNxpJfM/QF1wq
|
||||
w4LzNBEsMBrgKv2QJ6PqUP9OXDQJD9p83/W9Tnd97TFt/1VnhzBj6AaOzQd0l0X5
|
||||
c5+Suk80l0dTokP1rjblE6FzZkteOUGY16E3fjK4vXu9c76jujM0YvmqKpyL3ZEN
|
||||
dWw4XwcBgmp1MYCew+HW/kqrzAZYkOk+2PyEsUrrmAqHbLAGqdH5odmrVA7NRPR5
|
||||
YMLynC+4D0tfDaurugMbtgNkycgCvuyd7aULUYjv4Rt+s+lGbZzC7EscZOGO+k/c
|
||||
AzMdAudjDsGdnyEHCIDE
|
||||
=Cnml
|
||||
-----END PGP SIGNATURE-----
|
15928
share/security/patches/SA-16:02/ntp-9.patch
Normal file
15928
share/security/patches/SA-16:02/ntp-9.patch
Normal file
File diff suppressed because it is too large
Load diff
16
share/security/patches/SA-16:02/ntp-9.patch.asc
Normal file
16
share/security/patches/SA-16:02/ntp-9.patch.asc
Normal file
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABCgAGBQJWl2vaAAoJEO1n7NZdz2rnV8gQALVsnYTaTxO/MUewSFss7+i2
|
||||
z5dc+BvS0e5jW+klAvTsgcNdsG1SLsydAW4G89IUJ5QC0wFAIOVcWM7fez+8SERh
|
||||
FyQeY7xHiK5Ek6yO4SUb7pL5pHeDM1kCQMkFK/6SiE2WBEtYMzvjtInnSk+wCphP
|
||||
YWZPpmiAQibLPQebnvJP6IDJ87VUV6jsilAfikexXPXK6MYDNDTyaniKw83dyfAk
|
||||
2+50sTs32aUSgprziqEAAOOD+M1smqD/lutD5UbkdvfTHCopk889idoKVAdC5eLJ
|
||||
z9Xi9IJa7BlTrHV/0jBdM+rtXh9gCUkcwPrB0VJVe8gib93RQA/Y700cnsMLkL+O
|
||||
/aeHTrmXwLj6rS4DsqwW+Dit/4y8PReVyihR5A3zIKqA9MgU8QjHU2aA2PnQ6hyD
|
||||
0dd1ey+hKIQ/S7HDO8tBym5o7sGSkkelFjRxy5NRu5Uz/oz5IguYpFeBsLjYFWre
|
||||
hvsNvmMeIabXk5Cpc+QwAJ1EssAjoJzuGXr6AbIwoHJvoqxKCMmuW1Fxr5+0zuDA
|
||||
ebBU2Kvg6pVVSFSFizBq5/e/krhBM/SbcrGgzj9E4YcLs+/i+lI0LS8gEK1iQ3BA
|
||||
TK4CSJVsVq9a/HPf2GrHqVyurj39r439jq21JT6NgnkHGgf2QzT9UoD8QJ35coa0
|
||||
9Xt31rra4FlY4zzd8D4+
|
||||
=EMVn
|
||||
-----END PGP SIGNATURE-----
|
68
share/security/patches/SA-16:03/linux.patch
Normal file
68
share/security/patches/SA-16:03/linux.patch
Normal file
|
@ -0,0 +1,68 @@
|
|||
--- sys/amd64/linux32/linux32_proto.h.orig
|
||||
+++ sys/amd64/linux32/linux32_proto.h
|
||||
@@ -992,7 +992,7 @@
|
||||
};
|
||||
struct linux_get_robust_list_args {
|
||||
char pid_l_[PADL_(l_int)]; l_int pid; char pid_r_[PADR_(l_int)];
|
||||
- char head_l_[PADL_(struct linux_robust_list_head *)]; struct linux_robust_list_head * head; char head_r_[PADR_(struct linux_robust_list_head *)];
|
||||
+ char head_l_[PADL_(struct linux_robust_list_head **)]; struct linux_robust_list_head ** head; char head_r_[PADR_(struct linux_robust_list_head **)];
|
||||
char len_l_[PADL_(l_size_t *)]; l_size_t * len; char len_r_[PADR_(l_size_t *)];
|
||||
};
|
||||
struct linux_splice_args {
|
||||
--- sys/amd64/linux32/linux32_systrace_args.c.orig
|
||||
+++ sys/amd64/linux32/linux32_systrace_args.c
|
||||
@@ -2088,7 +2088,7 @@
|
||||
case 312: {
|
||||
struct linux_get_robust_list_args *p = params;
|
||||
iarg[0] = p->pid; /* l_int */
|
||||
- uarg[1] = (intptr_t) p->head; /* struct linux_robust_list_head * */
|
||||
+ uarg[1] = (intptr_t) p->head; /* struct linux_robust_list_head ** */
|
||||
uarg[2] = (intptr_t) p->len; /* l_size_t * */
|
||||
*n_args = 3;
|
||||
break;
|
||||
@@ -5363,7 +5363,7 @@
|
||||
p = "l_int";
|
||||
break;
|
||||
case 1:
|
||||
- p = "struct linux_robust_list_head *";
|
||||
+ p = "struct linux_robust_list_head **";
|
||||
break;
|
||||
case 2:
|
||||
p = "l_size_t *";
|
||||
--- sys/amd64/linux32/syscalls.master.orig
|
||||
+++ sys/amd64/linux32/syscalls.master
|
||||
@@ -512,8 +512,8 @@
|
||||
; linux 2.6.17:
|
||||
311 AUE_NULL STD { int linux_set_robust_list(struct linux_robust_list_head *head, \
|
||||
l_size_t len); }
|
||||
-312 AUE_NULL STD { int linux_get_robust_list(l_int pid, struct linux_robust_list_head *head, \
|
||||
- l_size_t *len); }
|
||||
+312 AUE_NULL STD { int linux_get_robust_list(l_int pid, \
|
||||
+ struct linux_robust_list_head **head, l_size_t *len); }
|
||||
313 AUE_NULL STD { int linux_splice(void); }
|
||||
314 AUE_NULL STD { int linux_sync_file_range(void); }
|
||||
315 AUE_NULL STD { int linux_tee(void); }
|
||||
--- sys/compat/linux/linux_futex.c.orig
|
||||
+++ sys/compat/linux/linux_futex.c
|
||||
@@ -1090,7 +1090,7 @@
|
||||
return (EFAULT);
|
||||
}
|
||||
|
||||
- error = copyout(head, args->head, sizeof(struct linux_robust_list_head));
|
||||
+ error = copyout(&head, args->head, sizeof(head));
|
||||
if (error) {
|
||||
LIN_SDT_PROBE1(futex, linux_get_robust_list, copyout_error,
|
||||
error);
|
||||
--- sys/i386/linux/syscalls.master.orig
|
||||
+++ sys/i386/linux/syscalls.master
|
||||
@@ -520,8 +520,8 @@
|
||||
; linux 2.6.17:
|
||||
311 AUE_NULL STD { int linux_set_robust_list(struct linux_robust_list_head *head, \
|
||||
l_size_t len); }
|
||||
-312 AUE_NULL STD { int linux_get_robust_list(l_int pid, struct linux_robust_list_head **head, \
|
||||
- l_size_t *len); }
|
||||
+312 AUE_NULL STD { int linux_get_robust_list(l_int pid, \
|
||||
+ struct linux_robust_list_head **head, l_size_t *len); }
|
||||
313 AUE_NULL STD { int linux_splice(void); }
|
||||
314 AUE_NULL STD { int linux_sync_file_range(void); }
|
||||
315 AUE_NULL STD { int linux_tee(void); }
|
16
share/security/patches/SA-16:03/linux.patch.asc
Normal file
16
share/security/patches/SA-16:03/linux.patch.asc
Normal file
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABCgAGBQJWl2vaAAoJEO1n7NZdz2rn550QAOExAQn5tPNJatXxB7TemVBa
|
||||
NYz7vuSJInrAph8Q3g0ArFDMPxundFsqhc/T1Xd934fcxsjIL0gNKvlZYJaUDLWo
|
||||
0AuBlMmuO5YuVr5Ziy6UxZRgBp+LtpBlTbP4QY9YUB8VT2ijsZkKfjabGLuBpBPT
|
||||
tyoSt6NOrU+aFY7pRhDqiu8C9X1PSkv7xMCPIaR6eNfIi5Oq2uAahNHHi3RJxNqw
|
||||
DAvufZszMsggUXvSqJI+1ymQSqjW//LRchOp7Svqgkt+MTJKTUikgezey7Ovspsm
|
||||
lMW0DPUSUVJIo2KZBCnOJe9DrIlpTfsrfzF1VEb7ASQ/GNhdnnkDa2mB/r5QvCVI
|
||||
KtS9/nnF3+aOyCAriH1qeWH0gDSvunx9/wq7E1mH4CILPNRN0rI/06xpTV2ay7jD
|
||||
xOHoSMsCiIPrMN0o/DpmWiZN3X+elizXNiOqdKkUHz3kkjcYNlhVEUpLSDLUN9v+
|
||||
hAmdC4OQrrAnsAnhi2jILeCO4soFyOSQ/RUDomHJSUBGtLtVpkFTZM200I0fG1bY
|
||||
jDOF2mjren7cBNhtXA9M5oSRLPnaIVABPR62f2Og3+OVnwCvYNufN+U4kOVBAohX
|
||||
8Y8NfFE8TiKKk4XgBNK1PFzm4ebwRNkupLfLLayMA7aJJdfLW+dPg7vLHc5n9c6F
|
||||
Fy1m3f8+DhXt6aFjCbHG
|
||||
=3x4+
|
||||
-----END PGP SIGNATURE-----
|
44
share/security/patches/SA-16:04/linux.patch
Normal file
44
share/security/patches/SA-16:04/linux.patch
Normal file
|
@ -0,0 +1,44 @@
|
|||
--- sys/compat/linux/linux_misc.c.orig
|
||||
+++ sys/compat/linux/linux_misc.c
|
||||
@@ -1304,9 +1304,11 @@
|
||||
if (error)
|
||||
goto out;
|
||||
newcred = crget();
|
||||
+ crextend(newcred, ngrp + 1);
|
||||
p = td->td_proc;
|
||||
PROC_LOCK(p);
|
||||
- oldcred = crcopysafe(p, newcred);
|
||||
+ oldcred = p->p_ucred;
|
||||
+ crcopy(newcred, oldcred);
|
||||
|
||||
/*
|
||||
* cr_groups[0] holds egid. Setting the whole set from
|
||||
--- sys/kern/kern_prot.c.orig
|
||||
+++ sys/kern/kern_prot.c
|
||||
@@ -88,7 +88,6 @@
|
||||
|
||||
SYSCTL_NODE(_security, OID_AUTO, bsd, CTLFLAG_RW, 0, "BSD security policy");
|
||||
|
||||
-static void crextend(struct ucred *cr, int n);
|
||||
static void crsetgroups_locked(struct ucred *cr, int ngrp,
|
||||
gid_t *groups);
|
||||
|
||||
@@ -1997,7 +1996,7 @@
|
||||
/*
|
||||
* Extend the passed in credential to hold n items.
|
||||
*/
|
||||
-static void
|
||||
+void
|
||||
crextend(struct ucred *cr, int n)
|
||||
{
|
||||
int cnt;
|
||||
--- sys/sys/ucred.h.orig
|
||||
+++ sys/sys/ucred.h
|
||||
@@ -105,6 +105,7 @@
|
||||
void crcopy(struct ucred *dest, struct ucred *src);
|
||||
struct ucred *crcopysafe(struct proc *p, struct ucred *cr);
|
||||
struct ucred *crdup(struct ucred *cr);
|
||||
+void crextend(struct ucred *cr, int n);
|
||||
void cred_update_thread(struct thread *td);
|
||||
void crfree(struct ucred *cr);
|
||||
struct ucred *crget(void);
|
16
share/security/patches/SA-16:04/linux.patch.asc
Normal file
16
share/security/patches/SA-16:04/linux.patch.asc
Normal file
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABCgAGBQJWl2vbAAoJEO1n7NZdz2rn0XIQALbLH5z0mI06+5Zhc6rUXUa3
|
||||
ctXum7safaMN/xNlgfOY0LexKdc0zoIDbnVicvdKiao64iSkYROXHWk3GxQInvir
|
||||
KYyr2C9gAFf0l8q8ZE4rFmNxoaKjamIWupGqBudLKd8dID3pZENXuzzuIoCHReBs
|
||||
hFFuyIOGHcarVXq3EalF5J1uUoyRcSrJQ+dX1bpt4c22b1g82aCCmKewmrXbYST0
|
||||
GdrE/YTkMZ8AS3KZBpYLOBO62qmHF1WvK3map1vqMGvTBVUsWc+ls6ihdEadot93
|
||||
owhRWf8kH1ldXZKfKSoQNtTcDpxZWstigCE+r7G5SkaywScymQx16Y0ghpyry5mP
|
||||
yalk0vHKVZ0gejf15Q4FCI6BQavOWhhFYpNFzfIjAA0rorCgZTdZ7HQrWShY1giA
|
||||
7muCuRH6OZ3UgSV8HNiOHQiqLi1FaGU5qkHro1Gz1a4osnsRFGaqCAIgBle2SZUF
|
||||
TXlaJdxpwxDNpp0qUljNb0Y77H4S46FudNFYY0wCuMyfz8iNiayhG5Rz+HTMxiDb
|
||||
fNXU0773x3EP/IbIkYWjsySlcWDfCA2czoze3wLidoCred6WJKyGyHT7jDdxXgWK
|
||||
WP4/rkJK8cNZ3Tfpem5KpeYDQHwKIgo1ZcxjR3t1eFc7+CiAd1Gxpxe1nva6Snek
|
||||
UcwwLM1F5FbxafFI6cMV
|
||||
=qmE4
|
||||
-----END PGP SIGNATURE-----
|
37
share/security/patches/SA-16:05/tcp.patch
Normal file
37
share/security/patches/SA-16:05/tcp.patch
Normal file
|
@ -0,0 +1,37 @@
|
|||
--- sys/netinet/tcp_output.c.orig
|
||||
+++ sys/netinet/tcp_output.c
|
||||
@@ -752,8 +752,8 @@
|
||||
* segments. Options for SYN-ACK segments are handled in TCP
|
||||
* syncache.
|
||||
*/
|
||||
+ to.to_flags = 0;
|
||||
if ((tp->t_flags & TF_NOOPT) == 0) {
|
||||
- to.to_flags = 0;
|
||||
/* Maximum segment size. */
|
||||
if (flags & TH_SYN) {
|
||||
tp->snd_nxt = tp->iss;
|
||||
@@ -1233,7 +1233,7 @@
|
||||
tp->snd_up = tp->snd_una; /* drag it along */
|
||||
|
||||
#ifdef TCP_SIGNATURE
|
||||
- if (tp->t_flags & TF_SIGNATURE) {
|
||||
+ if (to.to_flags & TOF_SIGNATURE) {
|
||||
int sigoff = to.to_signature - opt;
|
||||
tcp_signature_compute(m, 0, len, optlen,
|
||||
(u_char *)(th + 1) + sigoff, IPSEC_DIR_OUTBOUND);
|
||||
@@ -1713,6 +1713,7 @@
|
||||
bcopy((u_char *)&to->to_tsecr, optp, sizeof(to->to_tsecr));
|
||||
optp += sizeof(to->to_tsecr);
|
||||
break;
|
||||
+#ifdef TCP_SIGNATURE
|
||||
case TOF_SIGNATURE:
|
||||
{
|
||||
int siglen = TCPOLEN_SIGNATURE - 2;
|
||||
@@ -1731,6 +1732,7 @@
|
||||
*optp++ = 0;
|
||||
break;
|
||||
}
|
||||
+#endif
|
||||
case TOF_SACK:
|
||||
{
|
||||
int sackblks = 0;
|
16
share/security/patches/SA-16:05/tcp.patch.asc
Normal file
16
share/security/patches/SA-16:05/tcp.patch.asc
Normal file
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABCgAGBQJWl2vcAAoJEO1n7NZdz2rnEmwQALGiV/fnzTqk82xoivjx7BYJ
|
||||
ku4OuN+ymATe2hMQfsVPvpnri6b+3W9alp0H3pvLmUmmpMSacMU5QbTyR6IRx+XN
|
||||
QNIb/ZC8xeB0zyRagsMh2sU6g+vizC/+ZrjCc9M694cVyYjEoDUHGxQJ/KtZ5fBG
|
||||
kGY4xfwxWP+NMZOcikXxEVm2t01vF3kvtEvb86FJ0wJaEqg3DXMGk2c/m/NB7yJ1
|
||||
C/5BVSAwApWOypXIHV6GrqyFoCNqTijgGF9JhFb2SsY1ADcYWmLPgiy32y405It8
|
||||
jZt2lYT6bS5xYO+O3SCTkocUvrO+GLL7NYhdHLiSZIUuT43/DUUdHESASLDDEzsx
|
||||
qzy91Q/zSMbVKlrdYND2XbCwA4EeCBswfdyKclWHIknqpFGvFSsOkq7s4vsa1zuR
|
||||
k2IG+lE4zSfVoOKbB696MQC60MNeg1S1C6hrGMq2p0EtlK5yrKdCGS8dYnV3sDXa
|
||||
u52GKTLgqnh9WdJpY/8VEXf53Sc91BojRB18gh3xAesq6/n4LK8JbpqK15Y7Ity9
|
||||
kPeZtHJuKFgZNqTVINHtcLihiAGccx7AK0zOlNvMwN2G8pLM5YYmkF7Vo/+n78pq
|
||||
/kxWMK9qyn5BFTTwd2XLKRAnKA0gT0wtMWYBOTDuDr1ZjV/zjjQf3ZPH4Zo1YDZf
|
||||
GHUAHT3j0QSi2Hquz9zf
|
||||
=25K+
|
||||
-----END PGP SIGNATURE-----
|
25
share/security/patches/SA-16:06/bsnmpd.patch
Normal file
25
share/security/patches/SA-16:06/bsnmpd.patch
Normal file
|
@ -0,0 +1,25 @@
|
|||
--- etc/Makefile.orig
|
||||
+++ etc/Makefile
|
||||
@@ -82,10 +82,6 @@
|
||||
BIN1+= auto_master
|
||||
.endif
|
||||
|
||||
-.if ${MK_BSNMP} != "no"
|
||||
-BIN1+= snmpd.config
|
||||
-.endif
|
||||
-
|
||||
.if ${MK_FREEBSD_UPDATE} != "no"
|
||||
BIN1+= freebsd-update.conf
|
||||
.endif
|
||||
@@ -219,6 +215,11 @@
|
||||
${BIN2} ${DESTDIR}/etc; \
|
||||
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 600 \
|
||||
master.passwd nsmb.conf opieaccess ${DESTDIR}/etc;
|
||||
+.if ${MK_BSNMP} != "no"
|
||||
+ cd ${.CURDIR}; \
|
||||
+ ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 600 \
|
||||
+ snmpd.config ${DESTDIR}/etc;
|
||||
+.endif
|
||||
.if ${MK_AT} == "no"
|
||||
sed -i "" -e 's;.*/usr/libexec/atrun;#&;' ${DESTDIR}/etc/crontab
|
||||
.endif
|
16
share/security/patches/SA-16:06/bsnmpd.patch.asc
Normal file
16
share/security/patches/SA-16:06/bsnmpd.patch.asc
Normal file
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABCgAGBQJWl2vcAAoJEO1n7NZdz2rnVo4P/RzvYHiNx14BHX39eX9nxJO/
|
||||
9oGg/dTSBPeTv+nOpievz9o3AGnOqXLnWEwjvBDgJAt5147WQP5FIASusQ2exYfg
|
||||
POww/Vnk36gSYxuAqsiwQOJl7nGC78rZNSjb06npmPp4AjVosGav+pNSLmA6uo+d
|
||||
RqsErPbSo+2i1bsuLhnfoT1L9u/pySzMzJfB2lRGBY4XbyeOp7XQAZ2gM4hQXloT
|
||||
gEQrfmuzXE0s9196pK7DxZqmGtsl7tl23lAJfKuyYuNjAEJ/KTuvp7PYj+t9rGYW
|
||||
pEFa1/5ICREs1cWJeFpv6LywWmB8P0dfPYxFS3zBR+mjYN04Cep+pLBS947srDkg
|
||||
Spkz3HQTibNvpuooPI+AHv+5PdGWMJDytZW5hk2t9bpMXAXfegV2zQD8dYSbjCOK
|
||||
lOZb7HlbSMrGKOUdr+uB+fihabRvKgfEpvwkmRM8+gwlhdTO+k0sOQEwKznvSvZV
|
||||
66vMkySs6rqemG5vPD9sgWPNqP9BTqqz0RGe2ZDim3yqkuqYAxLOY2510PfXHXH5
|
||||
+2GMbf3fY8ZqcmcZeERzluvYTMpi4wWCrf2ekELIvBRp8TC29R3hI8SE38f2DcoW
|
||||
HyR3rz6IiktyQ/QVmibhLZjpveQ08yPZb5qLFcgbJh7u5Nbyn2mdbbtnsHjYwJY4
|
||||
abQlvZo/4G8SbEhCsLs0
|
||||
=6rgy
|
||||
-----END PGP SIGNATURE-----
|
Loading…
Reference in a new issue