* [PATCH 5.10] wifi: iwlwifi: add a few rate index validity checks
@ 2025-01-28 9:58 Dmitry Antipov
2025-01-28 16:17 ` Sasha Levin
2025-01-29 9:36 ` Greg Kroah-Hartman
0 siblings, 2 replies; 5+ messages in thread
From: Dmitry Antipov @ 2025-01-28 9:58 UTC (permalink / raw)
To: stable, Greg Kroah-Hartman
Cc: lvc-project, Anjaneyulu, Gregory Greenman, Johannes Berg,
Dmitry Antipov
From: Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
commit efbe8f81952fe469d38655744627d860879dcde8 upstream.
Validate index before access iwl_rate_mcs to keep rate->index
inside the valid boundaries. Use MCS_0_INDEX if index is less
than MCS_0_INDEX and MCS_9_INDEX if index is greater than
MCS_9_INDEX.
Signed-off-by: Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230614123447.79f16b3aef32.If1137f894775d6d07b78cbf3a6163ffce6399507@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
---
drivers/net/wireless/intel/iwlwifi/dvm/rs.c | 9 ++++++---
drivers/net/wireless/intel/iwlwifi/mvm/rs.c | 12 ++++++++----
2 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/rs.c b/drivers/net/wireless/intel/iwlwifi/dvm/rs.c
index 548540dd0c0f..a2b477bc574a 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/rs.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/rs.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved.
- * Copyright (C) 2019 - 2020 Intel Corporation
+ * Copyright (C) 2019 - 2020, 2023 Intel Corporation
*
* Contact Information:
* Intel Linux Wireless <linuxwifi@intel.com>
@@ -130,7 +130,7 @@ static int iwl_hwrate_to_plcp_idx(u32 rate_n_flags)
return idx;
}
- return -1;
+ return IWL_RATE_INVALID;
}
static void rs_rate_scale_perform(struct iwl_priv *priv,
@@ -3151,7 +3151,10 @@ static ssize_t rs_sta_dbgfs_scale_table_read(struct file *file,
for (i = 0; i < LINK_QUAL_MAX_RETRY_NUM; i++) {
index = iwl_hwrate_to_plcp_idx(
le32_to_cpu(lq_sta->lq.rs_table[i].rate_n_flags));
- if (is_legacy(tbl->lq_type)) {
+ if (index == IWL_RATE_INVALID) {
+ desc += sprintf(buff + desc, " rate[%d] 0x%X invalid rate\n",
+ i, le32_to_cpu(lq_sta->lq.rs_table[i].rate_n_flags));
+ } else if (is_legacy(tbl->lq_type)) {
desc += sprintf(buff+desc, " rate[%d] 0x%X %smbps\n",
i, le32_to_cpu(lq_sta->lq.rs_table[i].rate_n_flags),
iwl_rate_mcs[index].mbps);
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
index ed7382e7ea17..0a9634d9006c 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
@@ -1,7 +1,8 @@
// SPDX-License-Identifier: GPL-2.0-only
/******************************************************************************
*
- * Copyright(c) 2005 - 2014, 2018 - 2020 Intel Corporation. All rights reserved.
+ * Copyright(c) 2005 - 2014, 2018 - 2020, 2023 Intel Corporation.
+ * All rights reserved.
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
*
@@ -1120,10 +1121,13 @@ static void rs_get_lower_rate_down_column(struct iwl_lq_sta *lq_sta,
rate->bw = RATE_MCS_CHAN_WIDTH_20;
- WARN_ON_ONCE(rate->index < IWL_RATE_MCS_0_INDEX ||
- rate->index > IWL_RATE_MCS_9_INDEX);
+ if (WARN_ON_ONCE(rate->index < IWL_RATE_MCS_0_INDEX))
+ rate->index = rs_ht_to_legacy[IWL_RATE_MCS_0_INDEX];
+ else if (WARN_ON_ONCE(rate->index > IWL_RATE_MCS_9_INDEX))
+ rate->index = rs_ht_to_legacy[IWL_RATE_MCS_9_INDEX];
+ else
+ rate->index = rs_ht_to_legacy[rate->index];
- rate->index = rs_ht_to_legacy[rate->index];
rate->ldpc = false;
} else {
/* Downgrade to SISO with same MCS if in MIMO */
--
2.48.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH 5.10] wifi: iwlwifi: add a few rate index validity checks
2025-01-28 9:58 [PATCH 5.10] wifi: iwlwifi: add a few rate index validity checks Dmitry Antipov
@ 2025-01-28 16:17 ` Sasha Levin
2025-01-29 9:36 ` Greg Kroah-Hartman
1 sibling, 0 replies; 5+ messages in thread
From: Sasha Levin @ 2025-01-28 16:17 UTC (permalink / raw)
To: stable; +Cc: Dmitry Antipov, Sasha Levin
[ Sasha's backport helper bot ]
Hi,
The upstream commit SHA1 provided is correct: efbe8f81952fe469d38655744627d860879dcde8
WARNING: Author mismatch between patch and upstream commit:
Backport author: Dmitry Antipov<dmantipov@yandex.ru>
Commit author: Anjaneyulu<pagadala.yesu.anjaneyulu@intel.com>
Status in newer kernel trees:
6.13.y | Branch not found
6.12.y | Present (exact SHA1)
6.6.y | Present (exact SHA1)
6.1.y | Not found
5.15.y | Not found
5.10.y | Not found
Note: The patch differs from the upstream commit:
---
1: efbe8f81952fe ! 1: 7963551783c9b wifi: iwlwifi: add a few rate index validity checks
@@ Metadata
## Commit message ##
wifi: iwlwifi: add a few rate index validity checks
+ commit efbe8f81952fe469d38655744627d860879dcde8 upstream.
+
Validate index before access iwl_rate_mcs to keep rate->index
inside the valid boundaries. Use MCS_0_INDEX if index is less
- than MCS_0_INDEX and MCS_9_INDEX if index is greater then
+ than MCS_0_INDEX and MCS_9_INDEX if index is greater than
MCS_9_INDEX.
Signed-off-by: Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230614123447.79f16b3aef32.If1137f894775d6d07b78cbf3a6163ffce6399507@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+ Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
## drivers/net/wireless/intel/iwlwifi/dvm/rs.c ##
@@
/******************************************************************************
*
* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved.
-- * Copyright (C) 2019 - 2020, 2022 Intel Corporation
-+ * Copyright (C) 2019 - 2020, 2022 - 2023 Intel Corporation
- *****************************************************************************/
- #include <linux/kernel.h>
- #include <linux/skbuff.h>
+- * Copyright (C) 2019 - 2020 Intel Corporation
++ * Copyright (C) 2019 - 2020, 2023 Intel Corporation
+ *
+ * Contact Information:
+ * Intel Linux Wireless <linuxwifi@intel.com>
@@ drivers/net/wireless/intel/iwlwifi/dvm/rs.c: static int iwl_hwrate_to_plcp_idx(u32 rate_n_flags)
return idx;
}
@@ drivers/net/wireless/intel/iwlwifi/mvm/rs.c
// SPDX-License-Identifier: GPL-2.0-only
/******************************************************************************
*
-- * Copyright(c) 2005 - 2014, 2018 - 2022 Intel Corporation. All rights reserved.
-+ * Copyright(c) 2005 - 2014, 2018 - 2023 Intel Corporation. All rights reserved.
+- * Copyright(c) 2005 - 2014, 2018 - 2020 Intel Corporation. All rights reserved.
++ * Copyright(c) 2005 - 2014, 2018 - 2020, 2023 Intel Corporation.
++ * All rights reserved.
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
- *****************************************************************************/
+ *
@@ drivers/net/wireless/intel/iwlwifi/mvm/rs.c: static void rs_get_lower_rate_down_column(struct iwl_lq_sta *lq_sta,
rate->bw = RATE_MCS_CHAN_WIDTH_20;
---
Results of testing on various branches:
| Branch | Patch Apply | Build Test |
|---------------------------|-------------|------------|
| stable/linux-5.10.y | Success | Success |
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH 5.10] wifi: iwlwifi: add a few rate index validity checks
2025-01-28 9:58 [PATCH 5.10] wifi: iwlwifi: add a few rate index validity checks Dmitry Antipov
2025-01-28 16:17 ` Sasha Levin
@ 2025-01-29 9:36 ` Greg Kroah-Hartman
2025-01-29 14:25 ` [PATCH v2 " Dmitry Antipov
1 sibling, 1 reply; 5+ messages in thread
From: Greg Kroah-Hartman @ 2025-01-29 9:36 UTC (permalink / raw)
To: Dmitry Antipov
Cc: stable, lvc-project, Anjaneyulu, Gregory Greenman, Johannes Berg
On Tue, Jan 28, 2025 at 12:58:02PM +0300, Dmitry Antipov wrote:
> From: Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
>
> commit efbe8f81952fe469d38655744627d860879dcde8 upstream.
>
> Validate index before access iwl_rate_mcs to keep rate->index
> inside the valid boundaries. Use MCS_0_INDEX if index is less
> than MCS_0_INDEX and MCS_9_INDEX if index is greater than
> MCS_9_INDEX.
>
> Signed-off-by: Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
> Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
> Link: https://lore.kernel.org/r/20230614123447.79f16b3aef32.If1137f894775d6d07b78cbf3a6163ffce6399507@changeid
> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
> Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
> ---
> drivers/net/wireless/intel/iwlwifi/dvm/rs.c | 9 ++++++---
> drivers/net/wireless/intel/iwlwifi/mvm/rs.c | 12 ++++++++----
> 2 files changed, 14 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/rs.c b/drivers/net/wireless/intel/iwlwifi/dvm/rs.c
> index 548540dd0c0f..a2b477bc574a 100644
> --- a/drivers/net/wireless/intel/iwlwifi/dvm/rs.c
> +++ b/drivers/net/wireless/intel/iwlwifi/dvm/rs.c
> @@ -2,7 +2,7 @@
> /******************************************************************************
> *
> * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved.
> - * Copyright (C) 2019 - 2020 Intel Corporation
> + * Copyright (C) 2019 - 2020, 2023 Intel Corporation
> *
> * Contact Information:
> * Intel Linux Wireless <linuxwifi@intel.com>
> @@ -130,7 +130,7 @@ static int iwl_hwrate_to_plcp_idx(u32 rate_n_flags)
> return idx;
> }
>
> - return -1;
> + return IWL_RATE_INVALID;
> }
>
> static void rs_rate_scale_perform(struct iwl_priv *priv,
> @@ -3151,7 +3151,10 @@ static ssize_t rs_sta_dbgfs_scale_table_read(struct file *file,
> for (i = 0; i < LINK_QUAL_MAX_RETRY_NUM; i++) {
> index = iwl_hwrate_to_plcp_idx(
> le32_to_cpu(lq_sta->lq.rs_table[i].rate_n_flags));
> - if (is_legacy(tbl->lq_type)) {
> + if (index == IWL_RATE_INVALID) {
> + desc += sprintf(buff + desc, " rate[%d] 0x%X invalid rate\n",
> + i, le32_to_cpu(lq_sta->lq.rs_table[i].rate_n_flags));
> + } else if (is_legacy(tbl->lq_type)) {
> desc += sprintf(buff+desc, " rate[%d] 0x%X %smbps\n",
> i, le32_to_cpu(lq_sta->lq.rs_table[i].rate_n_flags),
> iwl_rate_mcs[index].mbps);
> diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
> index ed7382e7ea17..0a9634d9006c 100644
> --- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
> +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
> @@ -1,7 +1,8 @@
> // SPDX-License-Identifier: GPL-2.0-only
> /******************************************************************************
> *
> - * Copyright(c) 2005 - 2014, 2018 - 2020 Intel Corporation. All rights reserved.
> + * Copyright(c) 2005 - 2014, 2018 - 2020, 2023 Intel Corporation.
> + * All rights reserved.
Same here, why?
Also, what about 5.15.y?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v2 5.10] wifi: iwlwifi: add a few rate index validity checks
2025-01-29 9:36 ` Greg Kroah-Hartman
@ 2025-01-29 14:25 ` Dmitry Antipov
2025-01-29 16:47 ` Sasha Levin
0 siblings, 1 reply; 5+ messages in thread
From: Dmitry Antipov @ 2025-01-29 14:25 UTC (permalink / raw)
To: stable, Greg Kroah-Hartman
Cc: lvc-project, Anjaneyulu, Gregory Greenman, Johannes Berg,
Dmitry Antipov
From: Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
commit efbe8f81952fe469d38655744627d860879dcde8 upstream.
Validate index before access iwl_rate_mcs to keep rate->index
inside the valid boundaries. Use MCS_0_INDEX if index is less
than MCS_0_INDEX and MCS_9_INDEX if index is greater than
MCS_9_INDEX.
Signed-off-by: Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230614123447.79f16b3aef32.If1137f894775d6d07b78cbf3a6163ffce6399507@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
---
v2: (re)adjust copyright notice
---
drivers/net/wireless/intel/iwlwifi/dvm/rs.c | 9 ++++++---
drivers/net/wireless/intel/iwlwifi/mvm/rs.c | 11 +++++++----
2 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/rs.c b/drivers/net/wireless/intel/iwlwifi/dvm/rs.c
index 548540dd0c0f..e1ab5b01f1c4 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/rs.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/rs.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved.
- * Copyright (C) 2019 - 2020 Intel Corporation
+ * Copyright (C) 2019 - 2020, 2022 - 2023 Intel Corporation
*
* Contact Information:
* Intel Linux Wireless <linuxwifi@intel.com>
@@ -130,7 +130,7 @@ static int iwl_hwrate_to_plcp_idx(u32 rate_n_flags)
return idx;
}
- return -1;
+ return IWL_RATE_INVALID;
}
static void rs_rate_scale_perform(struct iwl_priv *priv,
@@ -3151,7 +3151,10 @@ static ssize_t rs_sta_dbgfs_scale_table_read(struct file *file,
for (i = 0; i < LINK_QUAL_MAX_RETRY_NUM; i++) {
index = iwl_hwrate_to_plcp_idx(
le32_to_cpu(lq_sta->lq.rs_table[i].rate_n_flags));
- if (is_legacy(tbl->lq_type)) {
+ if (index == IWL_RATE_INVALID) {
+ desc += sprintf(buff + desc, " rate[%d] 0x%X invalid rate\n",
+ i, le32_to_cpu(lq_sta->lq.rs_table[i].rate_n_flags));
+ } else if (is_legacy(tbl->lq_type)) {
desc += sprintf(buff+desc, " rate[%d] 0x%X %smbps\n",
i, le32_to_cpu(lq_sta->lq.rs_table[i].rate_n_flags),
iwl_rate_mcs[index].mbps);
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
index ed7382e7ea17..9ca4f6427f77 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only
/******************************************************************************
*
- * Copyright(c) 2005 - 2014, 2018 - 2020 Intel Corporation. All rights reserved.
+ * Copyright(c) 2005 - 2014, 2018 - 2023 Intel Corporation. All rights reserved.
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
*
@@ -1120,10 +1120,13 @@ static void rs_get_lower_rate_down_column(struct iwl_lq_sta *lq_sta,
rate->bw = RATE_MCS_CHAN_WIDTH_20;
- WARN_ON_ONCE(rate->index < IWL_RATE_MCS_0_INDEX ||
- rate->index > IWL_RATE_MCS_9_INDEX);
+ if (WARN_ON_ONCE(rate->index < IWL_RATE_MCS_0_INDEX))
+ rate->index = rs_ht_to_legacy[IWL_RATE_MCS_0_INDEX];
+ else if (WARN_ON_ONCE(rate->index > IWL_RATE_MCS_9_INDEX))
+ rate->index = rs_ht_to_legacy[IWL_RATE_MCS_9_INDEX];
+ else
+ rate->index = rs_ht_to_legacy[rate->index];
- rate->index = rs_ht_to_legacy[rate->index];
rate->ldpc = false;
} else {
/* Downgrade to SISO with same MCS if in MIMO */
--
2.48.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH v2 5.10] wifi: iwlwifi: add a few rate index validity checks
2025-01-29 14:25 ` [PATCH v2 " Dmitry Antipov
@ 2025-01-29 16:47 ` Sasha Levin
0 siblings, 0 replies; 5+ messages in thread
From: Sasha Levin @ 2025-01-29 16:47 UTC (permalink / raw)
To: stable; +Cc: Dmitry Antipov, Sasha Levin
[ Sasha's backport helper bot ]
Hi,
The upstream commit SHA1 provided is correct: efbe8f81952fe469d38655744627d860879dcde8
WARNING: Author mismatch between patch and upstream commit:
Backport author: Dmitry Antipov<dmantipov@yandex.ru>
Commit author: Anjaneyulu<pagadala.yesu.anjaneyulu@intel.com>
Status in newer kernel trees:
6.13.y | Branch not found
6.12.y | Present (exact SHA1)
6.6.y | Present (exact SHA1)
6.1.y | Not found
5.15.y | Not found
5.10.y | Not found
Note: The patch differs from the upstream commit:
---
1: efbe8f81952fe ! 1: 6281b199ae74f wifi: iwlwifi: add a few rate index validity checks
@@ Metadata
## Commit message ##
wifi: iwlwifi: add a few rate index validity checks
+ commit efbe8f81952fe469d38655744627d860879dcde8 upstream.
+
Validate index before access iwl_rate_mcs to keep rate->index
inside the valid boundaries. Use MCS_0_INDEX if index is less
- than MCS_0_INDEX and MCS_9_INDEX if index is greater then
+ than MCS_0_INDEX and MCS_9_INDEX if index is greater than
MCS_9_INDEX.
Signed-off-by: Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230614123447.79f16b3aef32.If1137f894775d6d07b78cbf3a6163ffce6399507@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+ Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
## drivers/net/wireless/intel/iwlwifi/dvm/rs.c ##
@@
/******************************************************************************
*
* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved.
-- * Copyright (C) 2019 - 2020, 2022 Intel Corporation
+- * Copyright (C) 2019 - 2020 Intel Corporation
+ * Copyright (C) 2019 - 2020, 2022 - 2023 Intel Corporation
- *****************************************************************************/
- #include <linux/kernel.h>
- #include <linux/skbuff.h>
+ *
+ * Contact Information:
+ * Intel Linux Wireless <linuxwifi@intel.com>
@@ drivers/net/wireless/intel/iwlwifi/dvm/rs.c: static int iwl_hwrate_to_plcp_idx(u32 rate_n_flags)
return idx;
}
@@ drivers/net/wireless/intel/iwlwifi/mvm/rs.c
// SPDX-License-Identifier: GPL-2.0-only
/******************************************************************************
*
-- * Copyright(c) 2005 - 2014, 2018 - 2022 Intel Corporation. All rights reserved.
+- * Copyright(c) 2005 - 2014, 2018 - 2020 Intel Corporation. All rights reserved.
+ * Copyright(c) 2005 - 2014, 2018 - 2023 Intel Corporation. All rights reserved.
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
- *****************************************************************************/
+ *
@@ drivers/net/wireless/intel/iwlwifi/mvm/rs.c: static void rs_get_lower_rate_down_column(struct iwl_lq_sta *lq_sta,
rate->bw = RATE_MCS_CHAN_WIDTH_20;
---
Results of testing on various branches:
| Branch | Patch Apply | Build Test |
|---------------------------|-------------|------------|
| stable/linux-5.10.y | Success | Success |
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-01-29 16:47 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-28 9:58 [PATCH 5.10] wifi: iwlwifi: add a few rate index validity checks Dmitry Antipov
2025-01-28 16:17 ` Sasha Levin
2025-01-29 9:36 ` Greg Kroah-Hartman
2025-01-29 14:25 ` [PATCH v2 " Dmitry Antipov
2025-01-29 16:47 ` Sasha Levin
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.