diff options
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 15 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl3945-base.c | 15 |
2 files changed, 30 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index ad8a348b1c81..9c40742727a2 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -1702,6 +1702,9 @@ static void iwl_print_event_log(struct iwl_priv *priv, u32 start_idx, | |||
1702 | } | 1702 | } |
1703 | } | 1703 | } |
1704 | 1704 | ||
1705 | /* For sanity check only. Actual size is determined by uCode, typ. 512 */ | ||
1706 | #define MAX_EVENT_LOG_SIZE (512) | ||
1707 | |||
1705 | void iwl_dump_nic_event_log(struct iwl_priv *priv) | 1708 | void iwl_dump_nic_event_log(struct iwl_priv *priv) |
1706 | { | 1709 | { |
1707 | u32 base; /* SRAM byte address of event log header */ | 1710 | u32 base; /* SRAM byte address of event log header */ |
@@ -1727,6 +1730,18 @@ void iwl_dump_nic_event_log(struct iwl_priv *priv) | |||
1727 | num_wraps = iwl_read_targ_mem(priv, base + (2 * sizeof(u32))); | 1730 | num_wraps = iwl_read_targ_mem(priv, base + (2 * sizeof(u32))); |
1728 | next_entry = iwl_read_targ_mem(priv, base + (3 * sizeof(u32))); | 1731 | next_entry = iwl_read_targ_mem(priv, base + (3 * sizeof(u32))); |
1729 | 1732 | ||
1733 | if (capacity > MAX_EVENT_LOG_SIZE) { | ||
1734 | IWL_ERR(priv, "Log capacity %d is bogus, limit to %d entries\n", | ||
1735 | capacity, MAX_EVENT_LOG_SIZE); | ||
1736 | capacity = MAX_EVENT_LOG_SIZE; | ||
1737 | } | ||
1738 | |||
1739 | if (next_entry > MAX_EVENT_LOG_SIZE) { | ||
1740 | IWL_ERR(priv, "Log write index %d is bogus, limit to %d\n", | ||
1741 | next_entry, MAX_EVENT_LOG_SIZE); | ||
1742 | next_entry = MAX_EVENT_LOG_SIZE; | ||
1743 | } | ||
1744 | |||
1730 | size = num_wraps ? capacity : next_entry; | 1745 | size = num_wraps ? capacity : next_entry; |
1731 | 1746 | ||
1732 | /* bail out if nothing in log */ | 1747 | /* bail out if nothing in log */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index 23b31e6dcacd..a17afe01c0c0 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
@@ -1603,6 +1603,9 @@ static void iwl3945_print_event_log(struct iwl_priv *priv, u32 start_idx, | |||
1603 | } | 1603 | } |
1604 | } | 1604 | } |
1605 | 1605 | ||
1606 | /* For sanity check only. Actual size is determined by uCode, typ. 512 */ | ||
1607 | #define IWL3945_MAX_EVENT_LOG_SIZE (512) | ||
1608 | |||
1606 | void iwl3945_dump_nic_event_log(struct iwl_priv *priv) | 1609 | void iwl3945_dump_nic_event_log(struct iwl_priv *priv) |
1607 | { | 1610 | { |
1608 | u32 base; /* SRAM byte address of event log header */ | 1611 | u32 base; /* SRAM byte address of event log header */ |
@@ -1624,6 +1627,18 @@ void iwl3945_dump_nic_event_log(struct iwl_priv *priv) | |||
1624 | num_wraps = iwl_read_targ_mem(priv, base + (2 * sizeof(u32))); | 1627 | num_wraps = iwl_read_targ_mem(priv, base + (2 * sizeof(u32))); |
1625 | next_entry = iwl_read_targ_mem(priv, base + (3 * sizeof(u32))); | 1628 | next_entry = iwl_read_targ_mem(priv, base + (3 * sizeof(u32))); |
1626 | 1629 | ||
1630 | if (capacity > IWL3945_MAX_EVENT_LOG_SIZE) { | ||
1631 | IWL_ERR(priv, "Log capacity %d is bogus, limit to %d entries\n", | ||
1632 | capacity, IWL3945_MAX_EVENT_LOG_SIZE); | ||
1633 | capacity = IWL3945_MAX_EVENT_LOG_SIZE; | ||
1634 | } | ||
1635 | |||
1636 | if (next_entry > IWL3945_MAX_EVENT_LOG_SIZE) { | ||
1637 | IWL_ERR(priv, "Log write index %d is bogus, limit to %d\n", | ||
1638 | next_entry, IWL3945_MAX_EVENT_LOG_SIZE); | ||
1639 | next_entry = IWL3945_MAX_EVENT_LOG_SIZE; | ||
1640 | } | ||
1641 | |||
1627 | size = num_wraps ? capacity : next_entry; | 1642 | size = num_wraps ? capacity : next_entry; |
1628 | 1643 | ||
1629 | /* bail out if nothing in log */ | 1644 | /* bail out if nothing in log */ |