2023-01-23 08:20:07

by Gavrilov Ilia

[permalink] [raw]
Subject: [PATCH] netfilter: conntrack: remote a return value of the 'seq_print_acct' function.

The static 'seq_print_acct' function always returns 0.

Change the return value to 'void' and remove unnecessary checks.

Found by InfoTeCS on behalf of Linux Verification Center
(linuxtesting.org) with SVACE.

Fixes: 1ca9e41770cb ("netfilter: Remove uses of seq_<foo> return values")
Signed-off-by: Ilia.Gavrilov <[email protected]>
---
net/netfilter/nf_conntrack_standalone.c | 26 ++++++++++---------------
1 file changed, 10 insertions(+), 16 deletions(-)

diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c
index 0250725e38a4..bee99d4bcf36 100644
--- a/net/netfilter/nf_conntrack_standalone.c
+++ b/net/netfilter/nf_conntrack_standalone.c
@@ -275,22 +275,18 @@ static const char* l4proto_name(u16 proto)
return "unknown";
}

-static unsigned int
+static void
seq_print_acct(struct seq_file *s, const struct nf_conn *ct, int dir)
{
- struct nf_conn_acct *acct;
- struct nf_conn_counter *counter;
+ struct nf_conn_acct *acct = nf_conn_acct_find(ct);

- acct = nf_conn_acct_find(ct);
- if (!acct)
- return 0;
-
- counter = acct->counter;
- seq_printf(s, "packets=%llu bytes=%llu ",
- (unsigned long long)atomic64_read(&counter[dir].packets),
- (unsigned long long)atomic64_read(&counter[dir].bytes));
+ if (acct) {
+ struct nf_conn_counter *counter = acct->counter;

- return 0;
+ seq_printf(s, "packets=%llu bytes=%llu ",
+ (unsigned long long)atomic64_read(&counter[dir].packets),
+ (unsigned long long)atomic64_read(&counter[dir].bytes));
+ }
}

/* return 0 on success, 1 in case of error */
@@ -342,8 +338,7 @@ static int ct_seq_show(struct seq_file *s, void *v)
if (seq_has_overflowed(s))
goto release;

- if (seq_print_acct(s, ct, IP_CT_DIR_ORIGINAL))
- goto release;
+ seq_print_acct(s, ct, IP_CT_DIR_ORIGINAL);

if (!(test_bit(IPS_SEEN_REPLY_BIT, &ct->status)))
seq_puts(s, "[UNREPLIED] ");
@@ -352,8 +347,7 @@ static int ct_seq_show(struct seq_file *s, void *v)

ct_show_zone(s, ct, NF_CT_ZONE_DIR_REPL);

- if (seq_print_acct(s, ct, IP_CT_DIR_REPLY))
- goto release;
+ seq_print_acct(s, ct, IP_CT_DIR_REPLY);

if (test_bit(IPS_HW_OFFLOAD_BIT, &ct->status))
seq_puts(s, "[HW_OFFLOAD] ");
--
2.30.2


2023-01-23 13:28:58

by Leon Romanovsky

[permalink] [raw]
Subject: Re: [PATCH] netfilter: conntrack: remote a return value of the 'seq_print_acct' function.

On Mon, Jan 23, 2023 at 08:19:50AM +0000, Gavrilov Ilia wrote:
> The static 'seq_print_acct' function always returns 0.
>
> Change the return value to 'void' and remove unnecessary checks.
>
> Found by InfoTeCS on behalf of Linux Verification Center
> (linuxtesting.org) with SVACE.
>
> Fixes: 1ca9e41770cb ("netfilter: Remove uses of seq_<foo> return values")
> Signed-off-by: Ilia.Gavrilov <[email protected]>
> ---
> net/netfilter/nf_conntrack_standalone.c | 26 ++++++++++---------------
> 1 file changed, 10 insertions(+), 16 deletions(-)
>
> diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c
> index 0250725e38a4..bee99d4bcf36 100644
> --- a/net/netfilter/nf_conntrack_standalone.c
> +++ b/net/netfilter/nf_conntrack_standalone.c
> @@ -275,22 +275,18 @@ static const char* l4proto_name(u16 proto)
> return "unknown";
> }
>
> -static unsigned int
> +static void
> seq_print_acct(struct seq_file *s, const struct nf_conn *ct, int dir)
> {
> - struct nf_conn_acct *acct;
> - struct nf_conn_counter *counter;
> + struct nf_conn_acct *acct = nf_conn_acct_find(ct);
>
> - acct = nf_conn_acct_find(ct);
> - if (!acct)
> - return 0;
> -
> - counter = acct->counter;
> - seq_printf(s, "packets=%llu bytes=%llu ",
> - (unsigned long long)atomic64_read(&counter[dir].packets),
> - (unsigned long long)atomic64_read(&counter[dir].bytes));
> + if (acct) {
> + struct nf_conn_counter *counter = acct->counter;
>
> - return 0;
> + seq_printf(s, "packets=%llu bytes=%llu ",
> + (unsigned long long)atomic64_read(&counter[dir].packets),
> + (unsigned long long)atomic64_read(&counter[dir].bytes));
> + }

The preferred linux kernel style is to perform if (check_error) return;
In this case, this pattern should stay.

acct = nf_conn_acct_find(ct);
if (!acct)
return;

Thanks

2023-01-23 14:06:47

by Gavrilov Ilia

[permalink] [raw]
Subject: Re: [PATCH] netfilter: conntrack: remote a return value of the 'seq_print_acct' function.




С уважением,
Илья Гаврилов
Ведущий программист
Отдел разработки
АО "ИнфоТеКС" в г. Санкт-Петербург
127287, г. Москва, Старый Петровско-Разумовский проезд, дом 1/23, стр. 1
T: +7 495 737-61-92 ( доб. 4921)
Ф: +7 495 737-72-78


[email protected]
http://www.infotecs.ru


On 1/23/23 16:28, Leon Romanovsky wrote:
> On Mon, Jan 23, 2023 at 08:19:50AM +0000, Gavrilov Ilia wrote:
>> The static 'seq_print_acct' function always returns 0.
>>
>> Change the return value to 'void' and remove unnecessary checks.
>>
>> Found by InfoTeCS on behalf of Linux Verification Center
>> (linuxtesting.org) with SVACE.
>>
>> Fixes: 1ca9e41770cb ("netfilter: Remove uses of seq_<foo> return values")
>> Signed-off-by: Ilia.Gavrilov <[email protected]>
>> ---
>> net/netfilter/nf_conntrack_standalone.c | 26 ++++++++++---------------
>> 1 file changed, 10 insertions(+), 16 deletions(-)
>>
>> diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c
>> index 0250725e38a4..bee99d4bcf36 100644
>> --- a/net/netfilter/nf_conntrack_standalone.c
>> +++ b/net/netfilter/nf_conntrack_standalone.c
>> @@ -275,22 +275,18 @@ static const char* l4proto_name(u16 proto)
>> return "unknown";
>> }
>>
>> -static unsigned int
>> +static void
>> seq_print_acct(struct seq_file *s, const struct nf_conn *ct, int dir)
>> {
>> -struct nf_conn_acct *acct;
>> -struct nf_conn_counter *counter;
>> +struct nf_conn_acct *acct = nf_conn_acct_find(ct);
>>
>> -acct = nf_conn_acct_find(ct);
>> -if (!acct)
>> -return 0;
>> -
>> -counter = acct->counter;
>> -seq_printf(s, "packets=%llu bytes=%llu ",
>> - (unsigned long long)atomic64_read(&counter[dir].packets),
>> - (unsigned long long)atomic64_read(&counter[dir].bytes));
>> +if (acct) {
>> +struct nf_conn_counter *counter = acct->counter;
>>
>> -return 0;
>> +seq_printf(s, "packets=%llu bytes=%llu ",
>> + (unsigned long long)atomic64_read(&counter[dir].packets),
>> + (unsigned long long)atomic64_read(&counter[dir].bytes));
>> +}
>
> The preferred linux kernel style is to perform if (check_error) return;
> In this case, this pattern should stay.
>
> acct = nf_conn_acct_find(ct);
> if (!acct)
> return;
>
> Thanks

Thank you for review. I'll fix it in v2.

2023-01-23 14:32:03

by Gavrilov Ilia

[permalink] [raw]
Subject: [PATCH v2] netfilter: conntrack: remote a return value of the 'seq_print_acct' function.

The static 'seq_print_acct' function always returns 0.

Change the return value to 'void' and remove unnecessary checks.

Found by InfoTeCS on behalf of Linux Verification Center
(linuxtesting.org) with SVACE.

Fixes: 1ca9e41770cb ("netfilter: Remove uses of seq_<foo> return values")
Signed-off-by: Ilia.Gavrilov <[email protected]>
---
V2: Fix coding style
net/netfilter/nf_conntrack_standalone.c | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c
index 0250725e38a4..6819d07f9692 100644
--- a/net/netfilter/nf_conntrack_standalone.c
+++ b/net/netfilter/nf_conntrack_standalone.c
@@ -275,7 +275,7 @@ static const char* l4proto_name(u16 proto)
return "unknown";
}

-static unsigned int
+static void
seq_print_acct(struct seq_file *s, const struct nf_conn *ct, int dir)
{
struct nf_conn_acct *acct;
@@ -283,14 +283,12 @@ seq_print_acct(struct seq_file *s, const struct nf_conn *ct, int dir)

acct = nf_conn_acct_find(ct);
if (!acct)
- return 0;
+ return;

counter = acct->counter;
seq_printf(s, "packets=%llu bytes=%llu ",
(unsigned long long)atomic64_read(&counter[dir].packets),
(unsigned long long)atomic64_read(&counter[dir].bytes));
-
- return 0;
}

/* return 0 on success, 1 in case of error */
@@ -342,8 +340,7 @@ static int ct_seq_show(struct seq_file *s, void *v)
if (seq_has_overflowed(s))
goto release;

- if (seq_print_acct(s, ct, IP_CT_DIR_ORIGINAL))
- goto release;
+ seq_print_acct(s, ct, IP_CT_DIR_ORIGINAL);

if (!(test_bit(IPS_SEEN_REPLY_BIT, &ct->status)))
seq_puts(s, "[UNREPLIED] ");
@@ -352,8 +349,7 @@ static int ct_seq_show(struct seq_file *s, void *v)

ct_show_zone(s, ct, NF_CT_ZONE_DIR_REPL);

- if (seq_print_acct(s, ct, IP_CT_DIR_REPLY))
- goto release;
+ seq_print_acct(s, ct, IP_CT_DIR_REPLY);

if (test_bit(IPS_HW_OFFLOAD_BIT, &ct->status))
seq_puts(s, "[HW_OFFLOAD] ");
--
2.30.2

2023-01-23 17:49:31

by Leon Romanovsky

[permalink] [raw]
Subject: Re: [PATCH v2] netfilter: conntrack: remote a return value of the 'seq_print_acct' function.

On Mon, Jan 23, 2023 at 02:31:54PM +0000, Gavrilov Ilia wrote:
> The static 'seq_print_acct' function always returns 0.
>
> Change the return value to 'void' and remove unnecessary checks.
>
> Found by InfoTeCS on behalf of Linux Verification Center
> (linuxtesting.org) with SVACE.
>
> Fixes: 1ca9e41770cb ("netfilter: Remove uses of seq_<foo> return values")
> Signed-off-by: Ilia.Gavrilov <[email protected]>
> ---
> V2: Fix coding style
> net/netfilter/nf_conntrack_standalone.c | 12 ++++--------
> 1 file changed, 4 insertions(+), 8 deletions(-)
>

Thanks,
Reviewed-by: Leon Romanovsky <[email protected]>

2023-02-01 11:18:12

by Pablo Neira Ayuso

[permalink] [raw]
Subject: Re: [PATCH v2] netfilter: conntrack: remote a return value of the 'seq_print_acct' function.

On Mon, Jan 23, 2023 at 02:31:54PM +0000, Gavrilov Ilia wrote:
> The static 'seq_print_acct' function always returns 0.
>
> Change the return value to 'void' and remove unnecessary checks.
>
> Found by InfoTeCS on behalf of Linux Verification Center
> (linuxtesting.org) with SVACE.

Applied, thanks