lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 7 Dec 2009 11:02:36 -0500
From:	Neil Horman <nhorman@...driver.com>
To:	netdev@...r.kernel.org, e1000-devel@...ts.sourceforge.net
Cc:	davem@...emloft.net, jeffrey.t.kirsher@...el.com,
	jesse.brandeburg@...el.com, bruce.w.allan@...el.com,
	peter.p.waskiewicz.jr@...el.com, john.ronciak@...el.com
Subject: Re: [PATCH 2/3] e1000e: increase skb size to prevent dma over skb
	boundary (v2)

Sorry to reply to myself, but given the comments regarding the e1000 driver, I
should take the same changes into account here.  New version of the patch, much
cleaner than previously.


Update e1000e driver to not allow dma beyond the end of the allocated sk
    
Signed-off-by: Neil Horman <nhorman@...driver.com>


netdev.c |   14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)


diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index c3105c5..84e1b5d 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -2332,6 +2332,16 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter)
 	/* Setup buffer sizes */
 	rctl &= ~E1000_RCTL_SZ_4096;
 	rctl |= E1000_RCTL_BSEX;
+	/*
+	 * We need to normalize the rx_buffer_len here
+	 * since the hardware only knows about 7 discrete
+	 * frame lengths here.  To accomodate that we need
+	 * to set the rx length in the hardware to the next highest
+	 * size over the rx_buffer_len, then increase rx_buffer_len
+	 * to match it, so that we can get a full mtu sized frame
+	 */
+	adapter->rx_buffer_len = roundup_pow_of_two(adapter->rx_buffer_len);
+
 	switch (adapter->rx_buffer_len) {
 	case 256:
 		rctl |= E1000_RCTL_SZ_256;
@@ -2346,7 +2356,6 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter)
 		rctl &= ~E1000_RCTL_BSEX;
 		break;
 	case 2048:
-	default:
 		rctl |= E1000_RCTL_SZ_2048;
 		rctl &= ~E1000_RCTL_BSEX;
 		break;
@@ -2359,6 +2368,9 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter)
 	case 16384:
 		rctl |= E1000_RCTL_SZ_16384;
 		break;
+	default:
+		panic("Bad rx_buffer_len size\n");
+		break;
 	}
 
 	/*
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ