diff options
author | Eric Dumazet <edumazet@google.com> | 2014-11-23 15:27:41 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-11-23 21:01:42 -0500 |
commit | c33d23c21501f8e3e045e73b55a49167e1f3a721 (patch) | |
tree | 0563a34aa82a66b761c1bb87c93419f24308401f /drivers/net/ethernet/cisco | |
parent | e5d08d718a7cd72c6aa79b5f0c309d9f0d7e4a95 (diff) |
enic: use netdev_rss_key_fill() helper
Use of well known RSS key might increase attack surface.
Switch to a random one, using generic helper so that all
ports share a common key.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Christian Benvenuti <benve@cisco.com>
Cc: Govindarajulu Varadarajan <_govind@gmx.com>
Cc: Sujith Sankar <ssujith@cisco.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/cisco')
-rw-r--r-- | drivers/net/ethernet/cisco/enic/enic_main.c | 24 | ||||
-rw-r--r-- | drivers/net/ethernet/cisco/enic/vnic_rss.h | 9 |
2 files changed, 19 insertions, 14 deletions
diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c index 46647407d585..86ee350e57f0 100644 --- a/drivers/net/ethernet/cisco/enic/enic_main.c +++ b/drivers/net/ethernet/cisco/enic/enic_main.c | |||
@@ -1890,23 +1890,23 @@ static int enic_dev_hang_reset(struct enic *enic) | |||
1890 | 1890 | ||
1891 | static int enic_set_rsskey(struct enic *enic) | 1891 | static int enic_set_rsskey(struct enic *enic) |
1892 | { | 1892 | { |
1893 | union vnic_rss_key *rss_key_buf_va; | ||
1893 | dma_addr_t rss_key_buf_pa; | 1894 | dma_addr_t rss_key_buf_pa; |
1894 | union vnic_rss_key *rss_key_buf_va = NULL; | 1895 | u8 rss_key[ENIC_RSS_LEN]; |
1895 | union vnic_rss_key rss_key = { | 1896 | int i, kidx, bidx, err; |
1896 | .key[0].b = {85, 67, 83, 97, 119, 101, 115, 111, 109, 101}, | ||
1897 | .key[1].b = {80, 65, 76, 79, 117, 110, 105, 113, 117, 101}, | ||
1898 | .key[2].b = {76, 73, 78, 85, 88, 114, 111, 99, 107, 115}, | ||
1899 | .key[3].b = {69, 78, 73, 67, 105, 115, 99, 111, 111, 108}, | ||
1900 | }; | ||
1901 | int err; | ||
1902 | 1897 | ||
1903 | rss_key_buf_va = pci_alloc_consistent(enic->pdev, | 1898 | rss_key_buf_va = pci_zalloc_consistent(enic->pdev, |
1904 | sizeof(union vnic_rss_key), &rss_key_buf_pa); | 1899 | sizeof(union vnic_rss_key), |
1900 | &rss_key_buf_pa); | ||
1905 | if (!rss_key_buf_va) | 1901 | if (!rss_key_buf_va) |
1906 | return -ENOMEM; | 1902 | return -ENOMEM; |
1907 | 1903 | ||
1908 | memcpy(rss_key_buf_va, &rss_key, sizeof(union vnic_rss_key)); | 1904 | netdev_rss_key_fill(rss_key, ENIC_RSS_LEN); |
1909 | 1905 | for (i = 0; i < ENIC_RSS_LEN; i++) { | |
1906 | kidx = i / ENIC_RSS_BYTES_PER_KEY; | ||
1907 | bidx = i % ENIC_RSS_BYTES_PER_KEY; | ||
1908 | rss_key_buf_va->key[kidx].b[bidx] = rss_key[i]; | ||
1909 | } | ||
1910 | spin_lock_bh(&enic->devcmd_lock); | 1910 | spin_lock_bh(&enic->devcmd_lock); |
1911 | err = enic_set_rss_key(enic, | 1911 | err = enic_set_rss_key(enic, |
1912 | rss_key_buf_pa, | 1912 | rss_key_buf_pa, |
diff --git a/drivers/net/ethernet/cisco/enic/vnic_rss.h b/drivers/net/ethernet/cisco/enic/vnic_rss.h index fa421baf45b8..881fa18542b3 100644 --- a/drivers/net/ethernet/cisco/enic/vnic_rss.h +++ b/drivers/net/ethernet/cisco/enic/vnic_rss.h | |||
@@ -20,11 +20,16 @@ | |||
20 | #define _VNIC_RSS_H_ | 20 | #define _VNIC_RSS_H_ |
21 | 21 | ||
22 | /* RSS key array */ | 22 | /* RSS key array */ |
23 | |||
24 | #define ENIC_RSS_BYTES_PER_KEY 10 | ||
25 | #define ENIC_RSS_KEYS 4 | ||
26 | #define ENIC_RSS_LEN (ENIC_RSS_BYTES_PER_KEY * ENIC_RSS_KEYS) | ||
27 | |||
23 | union vnic_rss_key { | 28 | union vnic_rss_key { |
24 | struct { | 29 | struct { |
25 | u8 b[10]; | 30 | u8 b[ENIC_RSS_BYTES_PER_KEY]; |
26 | u8 b_pad[6]; | 31 | u8 b_pad[6]; |
27 | } key[4]; | 32 | } key[ENIC_RSS_KEYS]; |
28 | u64 raw[8]; | 33 | u64 raw[8]; |
29 | }; | 34 | }; |
30 | 35 | ||