summaryrefslogtreecommitdiffstats
path: root/freed-ora/current/f16
diff options
context:
space:
mode:
authorAlexandre Oliva <lxoliva@fsfla.org>2012-10-05 18:43:00 +0000
committerAlexandre Oliva <lxoliva@fsfla.org>2012-10-05 18:43:00 +0000
commit2dbc1e093b1fcd3c705fbaa7475ef763cb057ad9 (patch)
treefe8f3a19772e1e4c7a1820e1720da627c11703bd /freed-ora/current/f16
parentdb4670b826672e1e3c4cccdd9683028c2a5dee45 (diff)
downloadlinux-libre-raptor-2dbc1e093b1fcd3c705fbaa7475ef763cb057ad9.tar.gz
linux-libre-raptor-2dbc1e093b1fcd3c705fbaa7475ef763cb057ad9.zip
3.4.12-1.fc16.gnu
Diffstat (limited to 'freed-ora/current/f16')
-rw-r--r--freed-ora/current/f16/af_netlink-credentials-cve-2012-3520.patch114
-rw-r--r--freed-ora/current/f16/kernel.spec65
-rw-r--r--freed-ora/current/f16/net-Allow-driver-to-limit-number-of-GSO-segments-per-skb.patch70
-rw-r--r--freed-ora/current/f16/patch-3.4-gnu-3.4.11-gnu.xz.sign7
-rw-r--r--freed-ora/current/f16/patch-3.4-gnu-3.4.12-gnu.xz.sign7
-rw-r--r--freed-ora/current/f16/rds-set-correct-msg_namelen.patch219
-rw-r--r--freed-ora/current/f16/sfc-Fix-maximum-number-of-TSO-segments-and-minimum-TX-queue-size.patch156
-rw-r--r--freed-ora/current/f16/sources2
-rw-r--r--freed-ora/current/f16/tcp-Apply-device-TSO-segment-limit-earlier.patch124
9 files changed, 46 insertions, 718 deletions
diff --git a/freed-ora/current/f16/af_netlink-credentials-cve-2012-3520.patch b/freed-ora/current/f16/af_netlink-credentials-cve-2012-3520.patch
deleted file mode 100644
index c324a4a90..000000000
--- a/freed-ora/current/f16/af_netlink-credentials-cve-2012-3520.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-Subject: [PATCH] af_netlink: force credentials passing [CVE-2012-3520]
-From: Eric Dumazet <eric.dumazet@gmail.com>
-To: David Miller <davem@davemloft.net>
-Cc: netdev <netdev@vger.kernel.org>, Petr Matousek <pmatouse@redhat.com>,
- Florian Weimer <fweimer@redhat.com>,
- Pablo Neira Ayuso <pablo@netfilter.org>
-Content-Type: text/plain; charset="UTF-8"
-Date: Tue, 21 Aug 2012 18:21:17 +0200
-Message-ID: <1345566077.5158.530.camel@edumazet-glaptop>
-Mime-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Sender: netdev-owner@vger.kernel.org
-Precedence: bulk
-List-ID: <netdev.vger.kernel.org>
-X-Mailing-List: netdev@vger.kernel.org
-X-RedHat-Spam-Score: -6.999 (BAYES_00,DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,FREEMAIL_FROM,RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,T_DKIM_INVALID)
-X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22
-X-Scanned-By: MIMEDefang 2.68 on 10.5.110.16
-Status: RO
-Content-Length: 3042
-Lines: 91
-
-From: Eric Dumazet <edumazet@google.com>
-
-Pablo Neira Ayuso discovered that avahi and
-potentially NetworkManager accept spoofed Netlink messages because of a
-kernel bug. The kernel passes all-zero SCM_CREDENTIALS ancillary data
-to the receiver if the sender did not provide such data, instead of not
-including any such data at all or including the correct data from the
-peer (as it is the case with AF_UNIX).
-
-This bug was introduced in commit 16e572626961
-(af_unix: dont send SCM_CREDENTIALS by default)
-
-This patch forces passing credentials for netlink, as
-before the regression.
-
-Another fix would be to not add SCM_CREDENTIALS in
-netlink messages if not provided by the sender, but it
-might break some programs.
-
-With help from Florian Weimer & Petr Matousek
-
-This issue is designated as CVE-2012-3520
-
-Signed-off-by: Eric Dumazet <edumazet@google.com>
-Cc: Petr Matousek <pmatouse@redhat.com>
-Cc: Florian Weimer <fweimer@redhat.com>
-Cc: Pablo Neira Ayuso <pablo@netfilter.org>
----
- include/net/scm.h | 4 +++-
- net/netlink/af_netlink.c | 2 +-
- net/unix/af_unix.c | 4 ++--
- 3 files changed, 6 insertions(+), 4 deletions(-)
-
-diff --git a/include/net/scm.h b/include/net/scm.h
-index 079d788..7dc0854 100644
---- a/include/net/scm.h
-+++ b/include/net/scm.h
-@@ -70,9 +70,11 @@ static __inline__ void scm_destroy(struct scm_cookie *scm)
- }
-
- static __inline__ int scm_send(struct socket *sock, struct msghdr *msg,
-- struct scm_cookie *scm)
-+ struct scm_cookie *scm, bool forcecreds)
- {
- memset(scm, 0, sizeof(*scm));
-+ if (forcecreds)
-+ scm_set_cred(scm, task_tgid(current), current_cred());
- unix_get_peersec_dgram(sock, scm);
- if (msg->msg_controllen <= 0)
- return 0;
-diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
-index 5463969..1445d73 100644
---- a/net/netlink/af_netlink.c
-+++ b/net/netlink/af_netlink.c
-@@ -1362,7 +1362,7 @@ static int netlink_sendmsg(struct kiocb *kiocb, struct socket *sock,
- if (NULL == siocb->scm)
- siocb->scm = &scm;
-
-- err = scm_send(sock, msg, siocb->scm);
-+ err = scm_send(sock, msg, siocb->scm, true);
- if (err < 0)
- return err;
-
-diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
-index e4768c1..c5ee4ff 100644
---- a/net/unix/af_unix.c
-+++ b/net/unix/af_unix.c
-@@ -1450,7 +1450,7 @@ static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock,
- if (NULL == siocb->scm)
- siocb->scm = &tmp_scm;
- wait_for_unix_gc();
-- err = scm_send(sock, msg, siocb->scm);
-+ err = scm_send(sock, msg, siocb->scm, false);
- if (err < 0)
- return err;
-
-@@ -1619,7 +1619,7 @@ static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock,
- if (NULL == siocb->scm)
- siocb->scm = &tmp_scm;
- wait_for_unix_gc();
-- err = scm_send(sock, msg, siocb->scm);
-+ err = scm_send(sock, msg, siocb->scm, false);
- if (err < 0)
- return err;
-
-
-
---
-To unsubscribe from this list: send the line "unsubscribe netdev" in
-the body of a message to majordomo@vger.kernel.org
-More majordomo info at http://vger.kernel.org/majordomo-info.html
-
diff --git a/freed-ora/current/f16/kernel.spec b/freed-ora/current/f16/kernel.spec
index f85ac939c..f6c58d422 100644
--- a/freed-ora/current/f16/kernel.spec
+++ b/freed-ora/current/f16/kernel.spec
@@ -104,7 +104,7 @@ Summary: The Linux kernel
%if 0%{?released_kernel}
# Do we have a -stable update to apply?
-%define stable_update 11
+%define stable_update 12
# Is it a -stable RC?
%define stable_rc 0
# Set rpm version accordingly
@@ -756,16 +756,6 @@ Patch22056: crypto-aesni-intel-fix-wrong-kfree-pointer.patch
#rhbz 714271
Patch22060: CPU-hotplug-cpusets-suspend-Dont-modify-cpusets-during.patch
-#rhbz 820039 843554
-Patch22061: rds-set-correct-msg_namelen.patch
-
-#rhbz 845558 844714
-Patch22070: net-Allow-driver-to-limit-number-of-GSO-segments-per-skb.patch
-Patch22071: sfc-Fix-maximum-number-of-TSO-segments-and-minimum-TX-queue-size.patch
-Patch22072: tcp-Apply-device-TSO-segment-limit-earlier.patch
-
-Patch22075: af_netlink-credentials-cve-2012-3520.patch
-
# END OF PATCH DEFINITIONS
%endif
@@ -846,19 +836,30 @@ Provides: cpufrequtils = 1:009-0.6.p1
Obsoletes: cpufreq-utils < 1:009-0.6.p1
Obsoletes: cpufrequtils < 1:009-0.6.p1
Obsoletes: cpuspeed < 1:1.5-16
+Requires: kernel-libre-tools-libs = %{version}-%{release}
%description -n kernel-libre-tools
This package contains the tools/ directory from the kernel source
- the perf tool and the supporting documentation.
-%package -n kernel-libre-tools-devel
-Provides: kernel-tools-devel = %{rpmversion}-%{pkg_release}
+%package -n kernel-libre-tools-libs
+Provides: kernel-tools-libs = %{rpmversion}-%{pkg_release}
+Summary: Libraries for the kernels-tools
+Group: Development/System
+License: GPLv2
+%description -n kernel-libre-tools-libs
+This package contains the libraries built from the tools/ directory
+from the kernel source.
+
+%package -n kernel-libre-tools-libs-devel
+Provides: kernel-tools-libs-devel = %{rpmversion}-%{pkg_release}
Summary: Assortment of tools for the Linux kernel
Group: Development/System
License: GPLv2
Requires: kernel-libre-tools = %{version}-%{release}
Provides: cpupowerutils-devel = 1:009-0.6.p1
Obsoletes: cpupowerutils-devel < 1:009-0.6.p1
-%description -n kernel-libre-tools-devel
+Requires: kernel-libre-tools-libs = %{version}-%{release}
+%description -n kernel-libre-tools-libs-devel
This package contains the development files for the tools/ directory from
the kernel source.
@@ -1412,16 +1413,6 @@ ApplyPatch crypto-aesni-intel-fix-wrong-kfree-pointer.patch
#rhbz 714271
ApplyPatch CPU-hotplug-cpusets-suspend-Dont-modify-cpusets-during.patch
-#rhbz 820039 843554
-ApplyPatch rds-set-correct-msg_namelen.patch
-
-#rhbz 845558 844714
-ApplyPatch net-Allow-driver-to-limit-number-of-GSO-segments-per-skb.patch
-ApplyPatch sfc-Fix-maximum-number-of-TSO-segments-and-minimum-TX-queue-size.patch
-ApplyPatch tcp-Apply-device-TSO-segment-limit-earlier.patch
-
-ApplyPatch af_netlink-credentials-cve-2012-3520.patch
-
# END OF PATCH APPLICATIONS
%endif
@@ -2039,8 +2030,6 @@ fi
%{_bindir}/centrino-decode
%{_bindir}/powernow-k8-decode
%endif
-%{_libdir}/libcpupower.so.0
-%{_libdir}/libcpupower.so.0.0.0
%{_unitdir}/cpupower.service
%config(noreplace) %{_sysconfdir}/sysconfig/cpupower
%endif
@@ -2051,7 +2040,11 @@ fi
%endif
%ifarch %{cpupowerarchs}
-%files -n kernel-libre-tools-devel
+%files -n kernel-libre-tools-libs
+%{_libdir}/libcpupower.so.0
+%{_libdir}/libcpupower.so.0.0.0
+
+%files -n kernel-libre-tools-libs-devel
%{_libdir}/libcpupower.so
%{_includedir}/cpufreq.h
%endif
@@ -2120,6 +2113,24 @@ fi
# and build.
%changelog
+* Tue Oct 2 2012 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- GNU Linux-libre 3.4.12
+
+* Tue Oct 02 2012 Dave Jones <davej@redhat.com> 3.4.12-1
+- Linux v3.4.12
+ merged: drm-radeon-force-dma32-to-fix-regression-rs4xx-rs6xx.patch
+ merged: rds-set-correct-msg_namelen.patch
+ merged: net-Allow-driver-to-limit-number-of-GSO-segments-per-skb.patch
+ merged: sfc-Fix-maximum-number-of-TSO-segments-and-minimum-TX-queue-size.patch
+ merged: tcp-Apply-device-TSO-segment-limit-earlier.patch
+ merged: af_netlink-credentials-cve-2012-3520.patch
+
+* Fri Sep 28 2012 Josh Boyer <jwboyer@redhat.com> - 3.4.11-3
+- Split out kernel-tools-libs (rhbz 859943)
+
+* Fri Sep 21 2012 Josh Boyer <jwboyer@redhat.com> 3.4.11-2
+- Add patch to fix radeon regression from Jerome Glisse (rhbz 785375)
+
* Sun Sep 16 2012 Alexandre Oliva <lxoliva@fsfla.org> -libre
- GNU Linux-libre 3.4.11
diff --git a/freed-ora/current/f16/net-Allow-driver-to-limit-number-of-GSO-segments-per-skb.patch b/freed-ora/current/f16/net-Allow-driver-to-limit-number-of-GSO-segments-per-skb.patch
deleted file mode 100644
index bebccf3d0..000000000
--- a/freed-ora/current/f16/net-Allow-driver-to-limit-number-of-GSO-segments-per-skb.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From 30b678d844af3305cda5953467005cebb5d7b687 Mon Sep 17 00:00:00 2001
-From: Ben Hutchings <bhutchings@solarflare.com>
-Date: Mon, 30 Jul 2012 15:57:00 +0000
-Subject: [PATCH] net: Allow driver to limit number of GSO segments per skb
-
-A peer (or local user) may cause TCP to use a nominal MSS of as little
-as 88 (actual MSS of 76 with timestamps). Given that we have a
-sufficiently prodigious local sender and the peer ACKs quickly enough,
-it is nevertheless possible to grow the window for such a connection
-to the point that we will try to send just under 64K at once. This
-results in a single skb that expands to 861 segments.
-
-In some drivers with TSO support, such an skb will require hundreds of
-DMA descriptors; a substantial fraction of a TX ring or even more than
-a full ring. The TX queue selected for the skb may stall and trigger
-the TX watchdog repeatedly (since the problem skb will be retried
-after the TX reset). This particularly affects sfc, for which the
-issue is designated as CVE-2012-3412.
-
-Therefore:
-1. Add the field net_device::gso_max_segs holding the device-specific
- limit.
-2. In netif_skb_features(), if the number of segments is too high then
- mask out GSO features to force fall back to software GSO.
-
-Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- include/linux/netdevice.h | 2 ++
- net/core/dev.c | 4 ++++
- 2 files changed, 6 insertions(+), 0 deletions(-)
-
-diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
-index eb06e58..a9db4f3 100644
---- a/include/linux/netdevice.h
-+++ b/include/linux/netdevice.h
-@@ -1300,6 +1300,8 @@ struct net_device {
- /* for setting kernel sock attribute on TCP connection setup */
- #define GSO_MAX_SIZE 65536
- unsigned int gso_max_size;
-+#define GSO_MAX_SEGS 65535
-+ u16 gso_max_segs;
-
- #ifdef CONFIG_DCB
- /* Data Center Bridging netlink ops */
-diff --git a/net/core/dev.c b/net/core/dev.c
-index 0cb3fe8..f91abf8 100644
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -2134,6 +2134,9 @@ netdev_features_t netif_skb_features(struct sk_buff *skb)
- __be16 protocol = skb->protocol;
- netdev_features_t features = skb->dev->features;
-
-+ if (skb_shinfo(skb)->gso_segs > skb->dev->gso_max_segs)
-+ features &= ~NETIF_F_GSO_MASK;
-+
- if (protocol == htons(ETH_P_8021Q)) {
- struct vlan_ethhdr *veh = (struct vlan_ethhdr *)skb->data;
- protocol = veh->h_vlan_encapsulated_proto;
-@@ -5986,6 +5989,7 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,
- dev_net_set(dev, &init_net);
-
- dev->gso_max_size = GSO_MAX_SIZE;
-+ dev->gso_max_segs = GSO_MAX_SEGS;
-
- INIT_LIST_HEAD(&dev->napi_list);
- INIT_LIST_HEAD(&dev->unreg_list);
---
-1.7.7.6
-
diff --git a/freed-ora/current/f16/patch-3.4-gnu-3.4.11-gnu.xz.sign b/freed-ora/current/f16/patch-3.4-gnu-3.4.11-gnu.xz.sign
deleted file mode 100644
index 00375129a..000000000
--- a/freed-ora/current/f16/patch-3.4-gnu-3.4.11-gnu.xz.sign
+++ /dev/null
@@ -1,7 +0,0 @@
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v2.0.18 (GNU/Linux)
-
-iEYEABECAAYFAlBT5zYACgkQvLfPh359R6csfgCcCdnP3t1m7CpjIOSziT6REHXV
-UvsAnjICuzFqpDe5gWecIAwBTUfviUCq
-=Oj4v
------END PGP SIGNATURE-----
diff --git a/freed-ora/current/f16/patch-3.4-gnu-3.4.12-gnu.xz.sign b/freed-ora/current/f16/patch-3.4-gnu-3.4.12-gnu.xz.sign
new file mode 100644
index 000000000..18fd333cf
--- /dev/null
+++ b/freed-ora/current/f16/patch-3.4-gnu-3.4.12-gnu.xz.sign
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.18 (GNU/Linux)
+
+iEYEABECAAYFAlBrUZ8ACgkQvLfPh359R6cAAQCfTNDfduk+9L6htIb6pdVNDL1P
+IFIAoJaI1g6QuT+jmv3+0sv/FmJl5XSJ
+=oAhp
+-----END PGP SIGNATURE-----
diff --git a/freed-ora/current/f16/rds-set-correct-msg_namelen.patch b/freed-ora/current/f16/rds-set-correct-msg_namelen.patch
deleted file mode 100644
index 340d0cd68..000000000
--- a/freed-ora/current/f16/rds-set-correct-msg_namelen.patch
+++ /dev/null
@@ -1,219 +0,0 @@
-From 06b6a1cf6e776426766298d055bb3991957d90a7 Mon Sep 17 00:00:00 2001
-From: Weiping Pan <wpan@redhat.com>
-Date: Mon, 23 Jul 2012 10:37:48 +0800
-Subject: [PATCH] rds: set correct msg_namelen
-
-Jay Fenlason (fenlason@redhat.com) found a bug,
-that recvfrom() on an RDS socket can return the contents of random kernel
-memory to userspace if it was called with a address length larger than
-sizeof(struct sockaddr_in).
-rds_recvmsg() also fails to set the addr_len paramater properly before
-returning, but that's just a bug.
-There are also a number of cases wher recvfrom() can return an entirely bogus
-address. Anything in rds_recvmsg() that returns a non-negative value but does
-not go through the "sin = (struct sockaddr_in *)msg->msg_name;" code path
-at the end of the while(1) loop will return up to 128 bytes of kernel memory
-to userspace.
-
-And I write two test programs to reproduce this bug, you will see that in
-rds_server, fromAddr will be overwritten and the following sock_fd will be
-destroyed.
-Yes, it is the programmer's fault to set msg_namelen incorrectly, but it is
-better to make the kernel copy the real length of address to user space in
-such case.
-
-How to run the test programs ?
-I test them on 32bit x86 system, 3.5.0-rc7.
-
-1 compile
-gcc -o rds_client rds_client.c
-gcc -o rds_server rds_server.c
-
-2 run ./rds_server on one console
-
-3 run ./rds_client on another console
-
-4 you will see something like:
-server is waiting to receive data...
-old socket fd=3
-server received data from client:data from client
-msg.msg_namelen=32
-new socket fd=-1067277685
-sendmsg()
-: Bad file descriptor
-
-/***************** rds_client.c ********************/
-
-int main(void)
-{
- int sock_fd;
- struct sockaddr_in serverAddr;
- struct sockaddr_in toAddr;
- char recvBuffer[128] = "data from client";
- struct msghdr msg;
- struct iovec iov;
-
- sock_fd = socket(AF_RDS, SOCK_SEQPACKET, 0);
- if (sock_fd < 0) {
- perror("create socket error\n");
- exit(1);
- }
-
- memset(&serverAddr, 0, sizeof(serverAddr));
- serverAddr.sin_family = AF_INET;
- serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
- serverAddr.sin_port = htons(4001);
-
- if (bind(sock_fd, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) {
- perror("bind() error\n");
- close(sock_fd);
- exit(1);
- }
-
- memset(&toAddr, 0, sizeof(toAddr));
- toAddr.sin_family = AF_INET;
- toAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
- toAddr.sin_port = htons(4000);
- msg.msg_name = &toAddr;
- msg.msg_namelen = sizeof(toAddr);
- msg.msg_iov = &iov;
- msg.msg_iovlen = 1;
- msg.msg_iov->iov_base = recvBuffer;
- msg.msg_iov->iov_len = strlen(recvBuffer) + 1;
- msg.msg_control = 0;
- msg.msg_controllen = 0;
- msg.msg_flags = 0;
-
- if (sendmsg(sock_fd, &msg, 0) == -1) {
- perror("sendto() error\n");
- close(sock_fd);
- exit(1);
- }
-
- printf("client send data:%s\n", recvBuffer);
-
- memset(recvBuffer, '\0', 128);
-
- msg.msg_name = &toAddr;
- msg.msg_namelen = sizeof(toAddr);
- msg.msg_iov = &iov;
- msg.msg_iovlen = 1;
- msg.msg_iov->iov_base = recvBuffer;
- msg.msg_iov->iov_len = 128;
- msg.msg_control = 0;
- msg.msg_controllen = 0;
- msg.msg_flags = 0;
- if (recvmsg(sock_fd, &msg, 0) == -1) {
- perror("recvmsg() error\n");
- close(sock_fd);
- exit(1);
- }
-
- printf("receive data from server:%s\n", recvBuffer);
-
- close(sock_fd);
-
- return 0;
-}
-
-/***************** rds_server.c ********************/
-
-int main(void)
-{
- struct sockaddr_in fromAddr;
- int sock_fd;
- struct sockaddr_in serverAddr;
- unsigned int addrLen;
- char recvBuffer[128];
- struct msghdr msg;
- struct iovec iov;
-
- sock_fd = socket(AF_RDS, SOCK_SEQPACKET, 0);
- if(sock_fd < 0) {
- perror("create socket error\n");
- exit(0);
- }
-
- memset(&serverAddr, 0, sizeof(serverAddr));
- serverAddr.sin_family = AF_INET;
- serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
- serverAddr.sin_port = htons(4000);
- if (bind(sock_fd, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) {
- perror("bind error\n");
- close(sock_fd);
- exit(1);
- }
-
- printf("server is waiting to receive data...\n");
- msg.msg_name = &fromAddr;
-
- /*
- * I add 16 to sizeof(fromAddr), ie 32,
- * and pay attention to the definition of fromAddr,
- * recvmsg() will overwrite sock_fd,
- * since kernel will copy 32 bytes to userspace.
- *
- * If you just use sizeof(fromAddr), it works fine.
- * */
- msg.msg_namelen = sizeof(fromAddr) + 16;
- /* msg.msg_namelen = sizeof(fromAddr); */
- msg.msg_iov = &iov;
- msg.msg_iovlen = 1;
- msg.msg_iov->iov_base = recvBuffer;
- msg.msg_iov->iov_len = 128;
- msg.msg_control = 0;
- msg.msg_controllen = 0;
- msg.msg_flags = 0;
-
- while (1) {
- printf("old socket fd=%d\n", sock_fd);
- if (recvmsg(sock_fd, &msg, 0) == -1) {
- perror("recvmsg() error\n");
- close(sock_fd);
- exit(1);
- }
- printf("server received data from client:%s\n", recvBuffer);
- printf("msg.msg_namelen=%d\n", msg.msg_namelen);
- printf("new socket fd=%d\n", sock_fd);
- strcat(recvBuffer, "--data from server");
- if (sendmsg(sock_fd, &msg, 0) == -1) {
- perror("sendmsg()\n");
- close(sock_fd);
- exit(1);
- }
- }
-
- close(sock_fd);
- return 0;
-}
-
-Signed-off-by: Weiping Pan <wpan@redhat.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- net/rds/recv.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/net/rds/recv.c b/net/rds/recv.c
-index 5c6e9f1..9f0f17c 100644
---- a/net/rds/recv.c
-+++ b/net/rds/recv.c
-@@ -410,6 +410,8 @@ int rds_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
-
- rdsdebug("size %zu flags 0x%x timeo %ld\n", size, msg_flags, timeo);
-
-+ msg->msg_namelen = 0;
-+
- if (msg_flags & MSG_OOB)
- goto out;
-
-@@ -485,6 +487,7 @@ int rds_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
- sin->sin_port = inc->i_hdr.h_sport;
- sin->sin_addr.s_addr = inc->i_saddr;
- memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
-+ msg->msg_namelen = sizeof(*sin);
- }
- break;
- }
---
-1.7.11.2
-
diff --git a/freed-ora/current/f16/sfc-Fix-maximum-number-of-TSO-segments-and-minimum-TX-queue-size.patch b/freed-ora/current/f16/sfc-Fix-maximum-number-of-TSO-segments-and-minimum-TX-queue-size.patch
deleted file mode 100644
index 07ec616e0..000000000
--- a/freed-ora/current/f16/sfc-Fix-maximum-number-of-TSO-segments-and-minimum-TX-queue-size.patch
+++ /dev/null
@@ -1,156 +0,0 @@
-From 7e6d06f0de3f74ca929441add094518ae332257c Mon Sep 17 00:00:00 2001
-From: Ben Hutchings <bhutchings@solarflare.com>
-Date: Mon, 30 Jul 2012 15:57:44 +0000
-Subject: [PATCH] sfc: Fix maximum number of TSO segments and minimum TX queue
- size
-
-Currently an skb requiring TSO may not fit within a minimum-size TX
-queue. The TX queue selected for the skb may stall and trigger the TX
-watchdog repeatedly (since the problem skb will be retried after the
-TX reset). This issue is designated as CVE-2012-3412.
-
-Set the maximum number of TSO segments for our devices to 100. This
-should make no difference to behaviour unless the actual MSS is less
-than about 700. Increase the minimum TX queue size accordingly to
-allow for 2 worst-case skbs, so that there will definitely be space
-to add an skb after we wake a queue.
-
-To avoid invalidating existing configurations, change
-efx_ethtool_set_ringparam() to fix up values that are too small rather
-than returning -EINVAL.
-
-Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/sfc/efx.c | 6 ++++++
- drivers/net/ethernet/sfc/efx.h | 14 ++++++++++----
- drivers/net/ethernet/sfc/ethtool.c | 16 +++++++++++-----
- drivers/net/ethernet/sfc/tx.c | 19 +++++++++++++++++++
- 4 files changed, 46 insertions(+), 9 deletions(-)
-
-diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c
-index 70554a1..65a8d49 100644
---- a/drivers/net/ethernet/sfc/efx.c
-+++ b/drivers/net/ethernet/sfc/efx.c
-@@ -1503,6 +1503,11 @@ static int efx_probe_all(struct efx_nic *efx)
- goto fail2;
- }
-
-+ BUILD_BUG_ON(EFX_DEFAULT_DMAQ_SIZE < EFX_RXQ_MIN_ENT);
-+ if (WARN_ON(EFX_DEFAULT_DMAQ_SIZE < EFX_TXQ_MIN_ENT(efx))) {
-+ rc = -EINVAL;
-+ goto fail3;
-+ }
- efx->rxq_entries = efx->txq_entries = EFX_DEFAULT_DMAQ_SIZE;
-
- rc = efx_probe_filters(efx);
-@@ -2070,6 +2075,7 @@ static int efx_register_netdev(struct efx_nic *efx)
- net_dev->irq = efx->pci_dev->irq;
- net_dev->netdev_ops = &efx_netdev_ops;
- SET_ETHTOOL_OPS(net_dev, &efx_ethtool_ops);
-+ net_dev->gso_max_segs = EFX_TSO_MAX_SEGS;
-
- rtnl_lock();
-
-diff --git a/drivers/net/ethernet/sfc/efx.h b/drivers/net/ethernet/sfc/efx.h
-index be8f915..70755c9 100644
---- a/drivers/net/ethernet/sfc/efx.h
-+++ b/drivers/net/ethernet/sfc/efx.h
-@@ -30,6 +30,7 @@ extern netdev_tx_t
- efx_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb);
- extern void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index);
- extern int efx_setup_tc(struct net_device *net_dev, u8 num_tc);
-+extern unsigned int efx_tx_max_skb_descs(struct efx_nic *efx);
-
- /* RX */
- extern int efx_probe_rx_queue(struct efx_rx_queue *rx_queue);
-@@ -52,10 +53,15 @@ extern void efx_schedule_slow_fill(struct efx_rx_queue *rx_queue);
- #define EFX_MAX_EVQ_SIZE 16384UL
- #define EFX_MIN_EVQ_SIZE 512UL
-
--/* The smallest [rt]xq_entries that the driver supports. Callers of
-- * efx_wake_queue() assume that they can subsequently send at least one
-- * skb. Falcon/A1 may require up to three descriptors per skb_frag. */
--#define EFX_MIN_RING_SIZE (roundup_pow_of_two(2 * 3 * MAX_SKB_FRAGS))
-+/* Maximum number of TCP segments we support for soft-TSO */
-+#define EFX_TSO_MAX_SEGS 100
-+
-+/* The smallest [rt]xq_entries that the driver supports. RX minimum
-+ * is a bit arbitrary. For TX, we must have space for at least 2
-+ * TSO skbs.
-+ */
-+#define EFX_RXQ_MIN_ENT 128U
-+#define EFX_TXQ_MIN_ENT(efx) (2 * efx_tx_max_skb_descs(efx))
-
- /* Filters */
- extern int efx_probe_filters(struct efx_nic *efx);
-diff --git a/drivers/net/ethernet/sfc/ethtool.c b/drivers/net/ethernet/sfc/ethtool.c
-index 10536f9..8cba2df 100644
---- a/drivers/net/ethernet/sfc/ethtool.c
-+++ b/drivers/net/ethernet/sfc/ethtool.c
-@@ -680,21 +680,27 @@ static int efx_ethtool_set_ringparam(struct net_device *net_dev,
- struct ethtool_ringparam *ring)
- {
- struct efx_nic *efx = netdev_priv(net_dev);
-+ u32 txq_entries;
-
- if (ring->rx_mini_pending || ring->rx_jumbo_pending ||
- ring->rx_pending > EFX_MAX_DMAQ_SIZE ||
- ring->tx_pending > EFX_MAX_DMAQ_SIZE)
- return -EINVAL;
-
-- if (ring->rx_pending < EFX_MIN_RING_SIZE ||
-- ring->tx_pending < EFX_MIN_RING_SIZE) {
-+ if (ring->rx_pending < EFX_RXQ_MIN_ENT) {
- netif_err(efx, drv, efx->net_dev,
-- "TX and RX queues cannot be smaller than %ld\n",
-- EFX_MIN_RING_SIZE);
-+ "RX queues cannot be smaller than %u\n",
-+ EFX_RXQ_MIN_ENT);
- return -EINVAL;
- }
-
-- return efx_realloc_channels(efx, ring->rx_pending, ring->tx_pending);
-+ txq_entries = max(ring->tx_pending, EFX_TXQ_MIN_ENT(efx));
-+ if (txq_entries != ring->tx_pending)
-+ netif_warn(efx, drv, efx->net_dev,
-+ "increasing TX queue size to minimum of %u\n",
-+ txq_entries);
-+
-+ return efx_realloc_channels(efx, ring->rx_pending, txq_entries);
- }
-
- static int efx_ethtool_set_pauseparam(struct net_device *net_dev,
-diff --git a/drivers/net/ethernet/sfc/tx.c b/drivers/net/ethernet/sfc/tx.c
-index 9b225a7..1871343 100644
---- a/drivers/net/ethernet/sfc/tx.c
-+++ b/drivers/net/ethernet/sfc/tx.c
-@@ -119,6 +119,25 @@ efx_max_tx_len(struct efx_nic *efx, dma_addr_t dma_addr)
- return len;
- }
-
-+unsigned int efx_tx_max_skb_descs(struct efx_nic *efx)
-+{
-+ /* Header and payload descriptor for each output segment, plus
-+ * one for every input fragment boundary within a segment
-+ */
-+ unsigned int max_descs = EFX_TSO_MAX_SEGS * 2 + MAX_SKB_FRAGS;
-+
-+ /* Possibly one more per segment for the alignment workaround */
-+ if (EFX_WORKAROUND_5391(efx))
-+ max_descs += EFX_TSO_MAX_SEGS;
-+
-+ /* Possibly more for PCIe page boundaries within input fragments */
-+ if (PAGE_SIZE > EFX_PAGE_SIZE)
-+ max_descs += max_t(unsigned int, MAX_SKB_FRAGS,
-+ DIV_ROUND_UP(GSO_MAX_SIZE, EFX_PAGE_SIZE));
-+
-+ return max_descs;
-+}
-+
- /*
- * Add a socket buffer to a TX queue
- *
---
-1.7.7.6
-
diff --git a/freed-ora/current/f16/sources b/freed-ora/current/f16/sources
index c10a38af5..7f9edcbb7 100644
--- a/freed-ora/current/f16/sources
+++ b/freed-ora/current/f16/sources
@@ -1,2 +1,2 @@
a5e128ca059cceb8b69148b41ff4ac6f linux-libre-3.4-gnu.tar.xz
-00eaf4013fc8cfe73498d910b0b5c826 patch-3.4-gnu-3.4.11-gnu.xz
+005f184222e0ae0854a6ab2e03f2b04a patch-3.4-gnu-3.4.12-gnu.xz
diff --git a/freed-ora/current/f16/tcp-Apply-device-TSO-segment-limit-earlier.patch b/freed-ora/current/f16/tcp-Apply-device-TSO-segment-limit-earlier.patch
deleted file mode 100644
index d6fa7f49e..000000000
--- a/freed-ora/current/f16/tcp-Apply-device-TSO-segment-limit-earlier.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-From 1485348d2424e1131ea42efc033cbd9366462b01 Mon Sep 17 00:00:00 2001
-From: Ben Hutchings <bhutchings@solarflare.com>
-Date: Mon, 30 Jul 2012 16:11:42 +0000
-Subject: [PATCH] tcp: Apply device TSO segment limit earlier
-
-Cache the device gso_max_segs in sock::sk_gso_max_segs and use it to
-limit the size of TSO skbs. This avoids the need to fall back to
-software GSO for local TCP senders.
-
-Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- include/net/sock.h | 2 ++
- net/core/sock.c | 1 +
- net/ipv4/tcp.c | 4 +++-
- net/ipv4/tcp_cong.c | 3 ++-
- net/ipv4/tcp_output.c | 21 ++++++++++++---------
- 5 files changed, 20 insertions(+), 11 deletions(-)
-
---- linux-3.4.noarch.orig/include/net/sock.h
-+++ linux-3.4.noarch/include/net/sock.h
-@@ -216,6 +216,7 @@ struct cg_proto;
- * @sk_route_nocaps: forbidden route capabilities (e.g NETIF_F_GSO_MASK)
- * @sk_gso_type: GSO type (e.g. %SKB_GSO_TCPV4)
- * @sk_gso_max_size: Maximum GSO segment size to build
-+ * @sk_gso_max_segs: Maximum number of GSO segments
- * @sk_lingertime: %SO_LINGER l_linger setting
- * @sk_backlog: always used with the per-socket spinlock held
- * @sk_callback_lock: used with the callbacks in the end of this struct
-@@ -335,6 +336,7 @@ struct sock {
- netdev_features_t sk_route_nocaps;
- int sk_gso_type;
- unsigned int sk_gso_max_size;
-+ u16 sk_gso_max_segs;
- int sk_rcvlowat;
- unsigned long sk_lingertime;
- struct sk_buff_head sk_error_queue;
---- linux-3.4.noarch.orig/net/core/sock.c
-+++ linux-3.4.noarch/net/core/sock.c
-@@ -1411,6 +1411,7 @@ void sk_setup_caps(struct sock *sk, stru
- } else {
- sk->sk_route_caps |= NETIF_F_SG | NETIF_F_HW_CSUM;
- sk->sk_gso_max_size = dst->dev->gso_max_size;
-+ sk->sk_gso_max_segs = dst->dev->gso_max_segs;
- }
- }
- }
---- linux-3.4.noarch.orig/net/ipv4/tcp.c
-+++ linux-3.4.noarch/net/ipv4/tcp.c
-@@ -740,7 +740,9 @@ static unsigned int tcp_xmit_size_goal(s
- old_size_goal + mss_now > xmit_size_goal)) {
- xmit_size_goal = old_size_goal;
- } else {
-- tp->xmit_size_goal_segs = xmit_size_goal / mss_now;
-+ tp->xmit_size_goal_segs =
-+ min_t(u16, xmit_size_goal / mss_now,
-+ sk->sk_gso_max_segs);
- xmit_size_goal = tp->xmit_size_goal_segs * mss_now;
- }
- }
---- linux-3.4.noarch.orig/net/ipv4/tcp_cong.c
-+++ linux-3.4.noarch/net/ipv4/tcp_cong.c
-@@ -291,7 +291,8 @@ int tcp_is_cwnd_limited(const struct soc
- left = tp->snd_cwnd - in_flight;
- if (sk_can_gso(sk) &&
- left * sysctl_tcp_tso_win_divisor < tp->snd_cwnd &&
-- left * tp->mss_cache < sk->sk_gso_max_size)
-+ left * tp->mss_cache < sk->sk_gso_max_size &&
-+ left < sk->sk_gso_max_segs)
- return 1;
- return left <= tcp_max_tso_deferred_mss(tp);
- }
---- linux-3.4.noarch.orig/net/ipv4/tcp_output.c
-+++ linux-3.4.noarch/net/ipv4/tcp_output.c
-@@ -1318,21 +1318,21 @@ static void tcp_cwnd_validate(struct soc
- * when we would be allowed to send the split-due-to-Nagle skb fully.
- */
- static unsigned int tcp_mss_split_point(const struct sock *sk, const struct sk_buff *skb,
-- unsigned int mss_now, unsigned int cwnd)
-+ unsigned int mss_now, unsigned int max_segs)
- {
- const struct tcp_sock *tp = tcp_sk(sk);
-- u32 needed, window, cwnd_len;
-+ u32 needed, window, max_len;
-
- window = tcp_wnd_end(tp) - TCP_SKB_CB(skb)->seq;
-- cwnd_len = mss_now * cwnd;
-+ max_len = mss_now * max_segs;
-
-- if (likely(cwnd_len <= window && skb != tcp_write_queue_tail(sk)))
-- return cwnd_len;
-+ if (likely(max_len <= window && skb != tcp_write_queue_tail(sk)))
-+ return max_len;
-
- needed = min(skb->len, window);
-
-- if (cwnd_len <= needed)
-- return cwnd_len;
-+ if (max_len <= needed)
-+ return max_len;
-
- return needed - needed % mss_now;
- }
-@@ -1560,7 +1560,8 @@ static int tcp_tso_should_defer(struct s
- limit = min(send_win, cong_win);
-
- /* If a full-sized TSO skb can be sent, do it. */
-- if (limit >= sk->sk_gso_max_size)
-+ if (limit >= min_t(unsigned int, sk->sk_gso_max_size,
-+ sk->sk_gso_max_segs * tp->mss_cache))
- goto send_now;
-
- /* Middle in queue won't get any more data, full sendable already? */
-@@ -1786,7 +1787,9 @@ static int tcp_write_xmit(struct sock *s
- limit = mss_now;
- if (tso_segs > 1 && !tcp_urg_mode(tp))
- limit = tcp_mss_split_point(sk, skb, mss_now,
-- cwnd_quota);
-+ min_t(unsigned int,
-+ cwnd_quota,
-+ sk->sk_gso_max_segs));
-
- if (skb->len > limit &&
- unlikely(tso_fragment(sk, skb, limit, mss_now, gfp)))
OpenPOWER on IntegriCloud