--- /dev/null
+From git-commits-head-owner@vger.kernel.org Tue May 2 12:59:58 2006
+Date: Tue, 2 May 2006 19:59:21 GMT
+Message-Id: <200605021959.k42JxLiZ015749@hera.kernel.org>
+From: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
+To: git-commits-head@vger.kernel.org
+Subject: [PATCH] via-rhine: zero pad short packets on Rhine I ethernet cards
+
+From: Craig Brind <craigbrind@gmail.com>
+
+[PATCH] via-rhine: zero pad short packets on Rhine I ethernet cards
+
+Fixes Rhine I cards disclosing fragments of previously transmitted frames
+in new transmissions.
+
+Before transmission, any socket buffer (skb) shorter than the ethernet
+minimum length of 60 bytes was zero-padded. On Rhine I cards the data can
+later be copied into an aligned transmission buffer without copying this
+padding. This resulted in the transmission of the frame with the extra
+bytes beyond the provided content leaking the previous contents of this
+buffer on to the network.
+
+Now zero-padding is repeated in the local aligned buffer if one is used.
+
+Following a suggestion from the via-rhine maintainer, no attempt is made
+here to avoid the duplicated effort of padding the skb if it is known that
+an aligned buffer will definitely be used. This is to make the change
+"obviously correct" and allow it to be applied to a stable kernel if
+necessary. There is no change to the flow of control and the changes are
+only to the Rhine I code path.
+
+The patch has run on an in-service Rhine-I host without incident. Frames
+shorter than 60 bytes are now correctly zero-padded when captured on a
+separate host. I see no unusual stats reported by ifconfig, and no unusual
+log messages.
+
+Signed-off-by: Craig Brind <craigbrind@gmail.com>
+Signed-off-by: Roger Luethi <rl@hellgate.ch>
+Cc: Jeff Garzik <jeff@garzik.org>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Jeff Garzik <jeff@garzik.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/via-rhine.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- linux-2.6.16.13.orig/drivers/net/via-rhine.c
++++ linux-2.6.16.13/drivers/net/via-rhine.c
+@@ -129,6 +129,7 @@
+ - Massive clean-up
+ - Rewrite PHY, media handling (remove options, full_duplex, backoff)
+ - Fix Tx engine race for good
++ - Craig Brind: Zero padded aligned buffers for short packets.
+
+ */
+
+@@ -1306,7 +1307,12 @@ static int rhine_start_tx(struct sk_buff
+ rp->stats.tx_dropped++;
+ return 0;
+ }
++
++ /* Padding is not copied and so must be redone. */
+ skb_copy_and_csum_dev(skb, rp->tx_buf[entry]);
++ if (skb->len < ETH_ZLEN)
++ memset(rp->tx_buf[entry] + skb->len, 0,
++ ETH_ZLEN - skb->len);
+ rp->tx_skbuff_dma[entry] = 0;
+ rp->tx_ring[entry].addr = cpu_to_le32(rp->tx_bufs_dma +
+ (rp->tx_buf[entry] -