aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/i40evf/i40e_common.c
diff options
context:
space:
mode:
authorShannon Nelson <shannon.nelson@intel.com>2014-07-10 03:58:20 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2014-08-27 03:40:14 -0400
commitf905dd62be8853644357044a455f83e63e8c68ef (patch)
tree8c6f216fbeb85c6b7a66e6b513edb94f5620c7cd /drivers/net/ethernet/intel/i40evf/i40e_common.c
parent7b592f6168e3091bc0868812b6a4a3126be5b82d (diff)
i40e/i40evf: add max buf len to aq debug print helper
There is at least one case in the Firmware API where the response to a command changes the buffer size field in the AQ descriptor to a larger number than what the request's buffer size started as. This is in addition to setting an error flag and is in order to tell the requester how much larger a buffer is required for the answer. We need to be sure not to use that number when dumping the contents of the data buffer because it can send us into the weeds and generate an invalid pointer exception. This patch adds a max buffer size parameter to the print helper to be sure the code knows when to stop. Change-ID: Ib84f7ed72140fe9d600086d8f2002fc5d8753092 Signed-off-by: Shannon Nelson <shannon.nelson@intel.com> Tested-by: Jim Young <jamesx.m.young@intel.com> Tested-by: Sibai Li <sibai.li@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel/i40evf/i40e_common.c')
-rw-r--r--drivers/net/ethernet/intel/i40evf/i40e_common.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_common.c b/drivers/net/ethernet/intel/i40evf/i40e_common.c
index 4ea90bf239bb..952560551964 100644
--- a/drivers/net/ethernet/intel/i40evf/i40e_common.c
+++ b/drivers/net/ethernet/intel/i40evf/i40e_common.c
@@ -75,13 +75,15 @@ i40e_status i40e_set_mac_type(struct i40e_hw *hw)
75 * @mask: debug mask 75 * @mask: debug mask
76 * @desc: pointer to admin queue descriptor 76 * @desc: pointer to admin queue descriptor
77 * @buffer: pointer to command buffer 77 * @buffer: pointer to command buffer
78 * @buf_len: max length of buffer
78 * 79 *
79 * Dumps debug log about adminq command with descriptor contents. 80 * Dumps debug log about adminq command with descriptor contents.
80 **/ 81 **/
81void i40evf_debug_aq(struct i40e_hw *hw, enum i40e_debug_mask mask, void *desc, 82void i40evf_debug_aq(struct i40e_hw *hw, enum i40e_debug_mask mask, void *desc,
82 void *buffer) 83 void *buffer, u16 buf_len)
83{ 84{
84 struct i40e_aq_desc *aq_desc = (struct i40e_aq_desc *)desc; 85 struct i40e_aq_desc *aq_desc = (struct i40e_aq_desc *)desc;
86 u16 len = le16_to_cpu(aq_desc->datalen);
85 u8 *aq_buffer = (u8 *)buffer; 87 u8 *aq_buffer = (u8 *)buffer;
86 u32 data[4]; 88 u32 data[4];
87 u32 i = 0; 89 u32 i = 0;
@@ -105,7 +107,9 @@ void i40evf_debug_aq(struct i40e_hw *hw, enum i40e_debug_mask mask, void *desc,
105 if ((buffer != NULL) && (aq_desc->datalen != 0)) { 107 if ((buffer != NULL) && (aq_desc->datalen != 0)) {
106 memset(data, 0, sizeof(data)); 108 memset(data, 0, sizeof(data));
107 i40e_debug(hw, mask, "AQ CMD Buffer:\n"); 109 i40e_debug(hw, mask, "AQ CMD Buffer:\n");
108 for (i = 0; i < le16_to_cpu(aq_desc->datalen); i++) { 110 if (buf_len < len)
111 len = buf_len;
112 for (i = 0; i < len; i++) {
109 data[((i % 16) / 4)] |= 113 data[((i % 16) / 4)] |=
110 ((u32)aq_buffer[i]) << (8 * (i % 4)); 114 ((u32)aq_buffer[i]) << (8 * (i % 4));
111 if ((i % 16) == 15) { 115 if ((i % 16) == 15) {