netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH netfilter] netfilter: xt_IDLETIMER: fix idletimer_tg_helper non-kosher casts
@ 2021-04-02 20:11 Maciej Żenczykowski
  2021-04-02 21:40 ` Florian Westphal
  0 siblings, 1 reply; 3+ messages in thread
From: Maciej Żenczykowski @ 2021-04-02 20:11 UTC (permalink / raw)
  To: Maciej Żenczykowski, Pablo Neira Ayuso, Florian Westphal
  Cc: Linux Network Development Mailing List,
	Netfilter Development Mailing List, Manoj Basapathi,
	Subash Abhinov Kasiviswanathan

From: Maciej Żenczykowski <maze@google.com>

The code is relying on the identical layout of the beginning
of the v0 and v1 structs, but this can easily lead to code bugs
if one were to try to extend this further...

I use:
  char (*plabel)[MAX_IDLETIMER_LABEL_SIZE]
instead of:
  char label[MAX_IDLETIMER_LABEL_SIZE]
as the helper's argument to get better type safety
(the former checks array size, the latter does not).

Cc: Manoj Basapathi <manojbm@codeaurora.org>
Cc: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Signed-off-by: Maciej Żenczykowski <maze@google.com>
---
 net/netfilter/xt_IDLETIMER.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/net/netfilter/xt_IDLETIMER.c b/net/netfilter/xt_IDLETIMER.c
index 7b2f359bfce4..2b5e81f6e0bd 100644
--- a/net/netfilter/xt_IDLETIMER.c
+++ b/net/netfilter/xt_IDLETIMER.c
@@ -283,18 +283,19 @@ static unsigned int idletimer_tg_target_v1(struct sk_buff *skb,
 	return XT_CONTINUE;
 }
 
-static int idletimer_tg_helper(struct idletimer_tg_info *info)
+static int idletimer_tg_helper(__u32 timeout,
+			       char (*plabel)[MAX_IDLETIMER_LABEL_SIZE])
 {
-	if (info->timeout == 0) {
+	if (timeout == 0) {
 		pr_debug("timeout value is zero\n");
 		return -EINVAL;
 	}
-	if (info->timeout >= INT_MAX / 1000) {
+	if (timeout >= INT_MAX / 1000) {
 		pr_debug("timeout value is too big\n");
 		return -EINVAL;
 	}
-	if (info->label[0] == '\0' ||
-	    strnlen(info->label,
+	if ((*plabel)[0] == '\0' ||
+	    strnlen(*plabel,
 		    MAX_IDLETIMER_LABEL_SIZE) == MAX_IDLETIMER_LABEL_SIZE) {
 		pr_debug("label is empty or not nul-terminated\n");
 		return -EINVAL;
@@ -310,9 +311,8 @@ static int idletimer_tg_checkentry(const struct xt_tgchk_param *par)
 
 	pr_debug("checkentry targinfo%s\n", info->label);
 
-	ret = idletimer_tg_helper(info);
-	if(ret < 0)
-	{
+	ret = idletimer_tg_helper(info->timeout, &info->label);
+	if (ret < 0) {
 		pr_debug("checkentry helper return invalid\n");
 		return -EINVAL;
 	}
@@ -349,9 +349,8 @@ static int idletimer_tg_checkentry_v1(const struct xt_tgchk_param *par)
 	if (info->send_nl_msg)
 		return -EOPNOTSUPP;
 
-	ret = idletimer_tg_helper((struct idletimer_tg_info *)info);
-	if(ret < 0)
-	{
+	ret = idletimer_tg_helper(info->timeout, &info->label);
+	if (ret < 0) {
 		pr_debug("checkentry helper return invalid\n");
 		return -EINVAL;
 	}
-- 
2.31.0.208.g409f899ff0-goog


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH netfilter] netfilter: xt_IDLETIMER: fix idletimer_tg_helper non-kosher casts
  2021-04-02 20:11 [PATCH netfilter] netfilter: xt_IDLETIMER: fix idletimer_tg_helper non-kosher casts Maciej Żenczykowski
@ 2021-04-02 21:40 ` Florian Westphal
  2021-04-02 22:50   ` Maciej Żenczykowski
  0 siblings, 1 reply; 3+ messages in thread
From: Florian Westphal @ 2021-04-02 21:40 UTC (permalink / raw)
  To: Maciej Żenczykowski
  Cc: Maciej Żenczykowski, Pablo Neira Ayuso, Florian Westphal,
	Linux Network Development Mailing List,
	Netfilter Development Mailing List, Manoj Basapathi,
	Subash Abhinov Kasiviswanathan

Maciej Żenczykowski <zenczykowski@gmail.com> wrote:
> From: Maciej Żenczykowski <maze@google.com>
> 
> The code is relying on the identical layout of the beginning
> of the v0 and v1 structs, but this can easily lead to code bugs
> if one were to try to extend this further...

What is the concern?  These structs are part of ABI, they
cannot be changed.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH netfilter] netfilter: xt_IDLETIMER: fix idletimer_tg_helper non-kosher casts
  2021-04-02 21:40 ` Florian Westphal
@ 2021-04-02 22:50   ` Maciej Żenczykowski
  0 siblings, 0 replies; 3+ messages in thread
From: Maciej Żenczykowski @ 2021-04-02 22:50 UTC (permalink / raw)
  To: Florian Westphal
  Cc: Pablo Neira Ayuso, Linux Network Development Mailing List,
	Netfilter Development Mailing List, Manoj Basapathi,
	Subash Abhinov Kasiviswanathan

> > The code is relying on the identical layout of the beginning
> > of the v0 and v1 structs, but this can easily lead to code bugs
> > if one were to try to extend this further...
>
> What is the concern?  These structs are part of ABI, they
> cannot be changed.

That is a reasonable point, but there should have at *least* been
a solid comment about why this sort of cast is safe.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-04-02 22:51 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-02 20:11 [PATCH netfilter] netfilter: xt_IDLETIMER: fix idletimer_tg_helper non-kosher casts Maciej Żenczykowski
2021-04-02 21:40 ` Florian Westphal
2021-04-02 22:50   ` Maciej Żenczykowski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).