Skip to content

Commit

Permalink
net: ipa: always validate filter and route tables
Browse files Browse the repository at this point in the history
[ Upstream commit 546948b ]

All checks in ipa_table_validate_build() are computed at build time,
so build that unconditionally.

In ipa_table_valid() calls to ipa_table_valid_one() are missing the
IPA pointer parameter is missing in (a bug that shows up only when
IPA_VALIDATE is defined).  Don't bother checking whether hashed
table memory regions are valid if hashed tables are not supported.

With those things fixed, have these table validation functions built
unconditionally (not dependent on IPA_VALIDATE).

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
alexelder authored and gregkh committed Sep 18, 2021
1 parent 8c09385 commit bc80232
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 35 deletions.
36 changes: 17 additions & 19 deletions drivers/net/ipa/ipa_table.c
Expand Up @@ -120,8 +120,6 @@
*/
#define IPA_ZERO_RULE_SIZE (2 * sizeof(__le32))

#ifdef IPA_VALIDATE

/* Check things that can be validated at build time. */
static void ipa_table_validate_build(void)
{
Expand Down Expand Up @@ -169,7 +167,7 @@ ipa_table_valid_one(struct ipa *ipa, enum ipa_mem_id mem_id, bool route)
return true;

/* Hashed table regions can be zero size if hashing is not supported */
if (hashed && !mem->size)
if (ipa_table_hash_support(ipa) && !mem->size)
return true;

dev_err(dev, "%s table region %u size 0x%02x, expected 0x%02x\n",
Expand All @@ -183,14 +181,22 @@ bool ipa_table_valid(struct ipa *ipa)
{
bool valid;

valid = ipa_table_valid_one(IPA_MEM_V4_FILTER, false);
valid = valid && ipa_table_valid_one(IPA_MEM_V4_FILTER_HASHED, false);
valid = valid && ipa_table_valid_one(IPA_MEM_V6_FILTER, false);
valid = valid && ipa_table_valid_one(IPA_MEM_V6_FILTER_HASHED, false);
valid = valid && ipa_table_valid_one(IPA_MEM_V4_ROUTE, true);
valid = valid && ipa_table_valid_one(IPA_MEM_V4_ROUTE_HASHED, true);
valid = valid && ipa_table_valid_one(IPA_MEM_V6_ROUTE, true);
valid = valid && ipa_table_valid_one(IPA_MEM_V6_ROUTE_HASHED, true);
valid = ipa_table_valid_one(ipa, IPA_MEM_V4_FILTER, false);
valid = valid && ipa_table_valid_one(ipa, IPA_MEM_V6_FILTER, false);
valid = valid && ipa_table_valid_one(ipa, IPA_MEM_V4_ROUTE, true);
valid = valid && ipa_table_valid_one(ipa, IPA_MEM_V6_ROUTE, true);

if (!ipa_table_hash_support(ipa))
return valid;

valid = valid && ipa_table_valid_one(ipa, IPA_MEM_V4_FILTER_HASHED,
false);
valid = valid && ipa_table_valid_one(ipa, IPA_MEM_V6_FILTER_HASHED,
false);
valid = valid && ipa_table_valid_one(ipa, IPA_MEM_V4_ROUTE_HASHED,
true);
valid = valid && ipa_table_valid_one(ipa, IPA_MEM_V6_ROUTE_HASHED,
true);

return valid;
}
Expand All @@ -217,14 +223,6 @@ bool ipa_filter_map_valid(struct ipa *ipa, u32 filter_map)
return true;
}

#else /* !IPA_VALIDATE */
static void ipa_table_validate_build(void)

{
}

#endif /* !IPA_VALIDATE */

/* Zero entry count means no table, so just return a 0 address */
static dma_addr_t ipa_table_addr(struct ipa *ipa, bool filter_mask, u16 count)
{
Expand Down
16 changes: 0 additions & 16 deletions drivers/net/ipa/ipa_table.h
Expand Up @@ -16,8 +16,6 @@ struct ipa;
/* The maximum number of route table entries (IPv4, IPv6; hashed or not) */
#define IPA_ROUTE_COUNT_MAX 15

#ifdef IPA_VALIDATE

/**
* ipa_table_valid() - Validate route and filter table memory regions
* @ipa: IPA pointer
Expand All @@ -35,20 +33,6 @@ bool ipa_table_valid(struct ipa *ipa);
*/
bool ipa_filter_map_valid(struct ipa *ipa, u32 filter_mask);

#else /* !IPA_VALIDATE */

static inline bool ipa_table_valid(struct ipa *ipa)
{
return true;
}

static inline bool ipa_filter_map_valid(struct ipa *ipa, u32 filter_mask)
{
return true;
}

#endif /* !IPA_VALIDATE */

/**
* ipa_table_hash_support() - Return true if hashed tables are supported
* @ipa: IPA pointer
Expand Down

0 comments on commit bc80232

Please sign in to comment.