* [bug report] netfilter: load nf_log_syslog on enabling nf_conntrack_log_invalid
@ 2025-08-04 8:21 Dan Carpenter
2025-08-04 9:05 ` Lance Yang
0 siblings, 1 reply; 7+ messages in thread
From: Dan Carpenter @ 2025-08-04 8:21 UTC (permalink / raw)
To: Lance Yang; +Cc: netfilter-devel
Hello Lance Yang,
Commit e89a68046687 ("netfilter: load nf_log_syslog on enabling
nf_conntrack_log_invalid") from May 26, 2025 (linux-next), leads to
the following Smatch static checker warning:
net/netfilter/nf_conntrack_standalone.c:575 nf_conntrack_log_invalid_sysctl()
warn: missing error code? 'ret'
net/netfilter/nf_conntrack_standalone.c
559 static int
560 nf_conntrack_log_invalid_sysctl(const struct ctl_table *table, int write,
561 void *buffer, size_t *lenp, loff_t *ppos)
562 {
563 int ret, i;
564
565 ret = proc_dou8vec_minmax(table, write, buffer, lenp, ppos);
566 if (ret < 0 || !write)
567 return ret;
568
569 if (*(u8 *)table->data == 0)
570 return ret;
return 0?
571
572 /* Load nf_log_syslog only if no logger is currently registered */
573 for (i = 0; i < NFPROTO_NUMPROTO; i++) {
574 if (nf_log_is_registered(i))
--> 575 return ret;
This feels like it should be return -EBUSY? Or potentially return 0.
576 }
577 request_module("%s", "nf_log_syslog");
578
579 return ret;
return 0.
580 }
regards,
dan carpenter
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [bug report] netfilter: load nf_log_syslog on enabling nf_conntrack_log_invalid
2025-08-04 8:21 [bug report] netfilter: load nf_log_syslog on enabling nf_conntrack_log_invalid Dan Carpenter
@ 2025-08-04 9:05 ` Lance Yang
2025-08-04 9:24 ` Dan Carpenter
0 siblings, 1 reply; 7+ messages in thread
From: Lance Yang @ 2025-08-04 9:05 UTC (permalink / raw)
To: Dan Carpenter; +Cc: netfilter-devel
On 2025/8/4 16:21, Dan Carpenter wrote:
> Hello Lance Yang,
>
> Commit e89a68046687 ("netfilter: load nf_log_syslog on enabling
> nf_conntrack_log_invalid") from May 26, 2025 (linux-next), leads to
> the following Smatch static checker warning:
>
> net/netfilter/nf_conntrack_standalone.c:575 nf_conntrack_log_invalid_sysctl()
> warn: missing error code? 'ret'
Thanks for pointing this out!
>
> net/netfilter/nf_conntrack_standalone.c
> 559 static int
> 560 nf_conntrack_log_invalid_sysctl(const struct ctl_table *table, int write,
> 561 void *buffer, size_t *lenp, loff_t *ppos)
> 562 {
> 563 int ret, i;
> 564
> 565 ret = proc_dou8vec_minmax(table, write, buffer, lenp, ppos);
> 566 if (ret < 0 || !write)
> 567 return ret;
> 568
> 569 if (*(u8 *)table->data == 0)
> 570 return ret;
>
> return 0?
That's a good question. proc_dou8vec_minmax() returns 0 on a successful
write. So when a user writes '0' to disable the feature, ret is already 0.
Returning it is the correct behavior to signal success.
>
> 571
> 572 /* Load nf_log_syslog only if no logger is currently registered */
> 573 for (i = 0; i < NFPROTO_NUMPROTO; i++) {
> 574 if (nf_log_is_registered(i))
> --> 575 return ret;
>
> This feels like it should be return -EBUSY? Or potentially return 0.
We simply return ret (which is 0) to signal success, as no further action
(like loading the nf_log_syslog module) is needed.
>
> 576 }
> 577 request_module("%s", "nf_log_syslog");
> 578
> 579 return ret;
>
> return 0.
It's 0 as well.
Emm... do you know a way to make the Smatch static checker happy?
Thanks,
Lance
>
> 580 }
>
> regards,
> dan carpenter
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [bug report] netfilter: load nf_log_syslog on enabling nf_conntrack_log_invalid
2025-08-04 9:05 ` Lance Yang
@ 2025-08-04 9:24 ` Dan Carpenter
2025-08-04 9:57 ` Lance Yang
0 siblings, 1 reply; 7+ messages in thread
From: Dan Carpenter @ 2025-08-04 9:24 UTC (permalink / raw)
To: Lance Yang; +Cc: netfilter-devel
On Mon, Aug 04, 2025 at 05:05:32PM +0800, Lance Yang wrote:
>
>
> On 2025/8/4 16:21, Dan Carpenter wrote:
> > Hello Lance Yang,
> >
> > Commit e89a68046687 ("netfilter: load nf_log_syslog on enabling
> > nf_conntrack_log_invalid") from May 26, 2025 (linux-next), leads to
> > the following Smatch static checker warning:
> >
> > net/netfilter/nf_conntrack_standalone.c:575 nf_conntrack_log_invalid_sysctl()
> > warn: missing error code? 'ret'
>
> Thanks for pointing this out!
>
> >
> > net/netfilter/nf_conntrack_standalone.c
> > 559 static int
> > 560 nf_conntrack_log_invalid_sysctl(const struct ctl_table *table, int write,
> > 561 void *buffer, size_t *lenp, loff_t *ppos)
> > 562 {
> > 563 int ret, i;
> > 564
> > 565 ret = proc_dou8vec_minmax(table, write, buffer, lenp, ppos);
> > 566 if (ret < 0 || !write)
> > 567 return ret;
> > 568
> > 569 if (*(u8 *)table->data == 0)
> > 570 return ret;
> >
> > return 0?
>
> That's a good question. proc_dou8vec_minmax() returns 0 on a successful
> write. So when a user writes '0' to disable the feature, ret is already 0.
> Returning it is the correct behavior to signal success.
>
> >
> > 571
> > 572 /* Load nf_log_syslog only if no logger is currently registered */
> > 573 for (i = 0; i < NFPROTO_NUMPROTO; i++) {
> > 574 if (nf_log_is_registered(i))
> > --> 575 return ret;
> >
> > This feels like it should be return -EBUSY? Or potentially return 0.
>
> We simply return ret (which is 0) to signal success, as no further action
> (like loading the nf_log_syslog module) is needed.
>
> >
> > 576 }
> > 577 request_module("%s", "nf_log_syslog");
> > 578
> > 579 return ret;
> >
> > return 0.
>
> It's 0 as well.
>
> Emm... do you know a way to make the Smatch static checker happy?
>
Returning 0 would make the code so much more clear. Readers probably
assume that proc_dou8vec_minmax() returns positive values on success
and that's why we are returning ret. I know that I had to check.
regards,
dan carpenter
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [bug report] netfilter: load nf_log_syslog on enabling nf_conntrack_log_invalid
2025-08-04 9:24 ` Dan Carpenter
@ 2025-08-04 9:57 ` Lance Yang
2025-08-04 10:04 ` Lance Yang
2025-08-04 10:10 ` Dan Carpenter
0 siblings, 2 replies; 7+ messages in thread
From: Lance Yang @ 2025-08-04 9:57 UTC (permalink / raw)
To: Dan Carpenter; +Cc: netfilter-devel
On 2025/8/4 17:24, Dan Carpenter wrote:
> On Mon, Aug 04, 2025 at 05:05:32PM +0800, Lance Yang wrote:
>>
>>
>> On 2025/8/4 16:21, Dan Carpenter wrote:
>>> Hello Lance Yang,
>>>
>>> Commit e89a68046687 ("netfilter: load nf_log_syslog on enabling
>>> nf_conntrack_log_invalid") from May 26, 2025 (linux-next), leads to
>>> the following Smatch static checker warning:
>>>
>>> net/netfilter/nf_conntrack_standalone.c:575 nf_conntrack_log_invalid_sysctl()
>>> warn: missing error code? 'ret'
>>
>> Thanks for pointing this out!
>>
>>>
>>> net/netfilter/nf_conntrack_standalone.c
>>> 559 static int
>>> 560 nf_conntrack_log_invalid_sysctl(const struct ctl_table *table, int write,
>>> 561 void *buffer, size_t *lenp, loff_t *ppos)
>>> 562 {
>>> 563 int ret, i;
>>> 564
>>> 565 ret = proc_dou8vec_minmax(table, write, buffer, lenp, ppos);
>>> 566 if (ret < 0 || !write)
>>> 567 return ret;
>>> 568
>>> 569 if (*(u8 *)table->data == 0)
>>> 570 return ret;
>>>
>>> return 0?
>>
>> That's a good question. proc_dou8vec_minmax() returns 0 on a successful
>> write. So when a user writes '0' to disable the feature, ret is already 0.
>> Returning it is the correct behavior to signal success.
>>
>>>
>>> 571
>>> 572 /* Load nf_log_syslog only if no logger is currently registered */
>>> 573 for (i = 0; i < NFPROTO_NUMPROTO; i++) {
>>> 574 if (nf_log_is_registered(i))
>>> --> 575 return ret;
>>>
>>> This feels like it should be return -EBUSY? Or potentially return 0.
>>
>> We simply return ret (which is 0) to signal success, as no further action
>> (like loading the nf_log_syslog module) is needed.
>>
>>>
>>> 576 }
>>> 577 request_module("%s", "nf_log_syslog");
>>> 578
>>> 579 return ret;
>>>
>>> return 0.
>>
>> It's 0 as well.
>>
>> Emm... do you know a way to make the Smatch static checker happy?
>>
>
> Returning 0 would make the code so much more clear. Readers probably
Yep, I see your point ;)
> assume that proc_dou8vec_minmax() returns positive values on success
IIUC, proc_dou8vec_minmax only returns 0 for success or a negative
error code, so there's no positive value case here ...
> and that's why we are returning ret. I know that I had to check.
>
It should make the code clearer and also make the Smatch checker happy:
ret = proc_dou8vec_minmax(table, write, buffer, lenp, ppos);
- if (ret < 0 || !write)
+ if (ret != 0 || !write)
return ret;
By checking for "ret != 0", it becomes explicit that ret can only be
zero after that. wdyt?
Also, if you'd like, please feel free to send a patch for it ;p
Thanks,
Lance
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [bug report] netfilter: load nf_log_syslog on enabling nf_conntrack_log_invalid
2025-08-04 9:57 ` Lance Yang
@ 2025-08-04 10:04 ` Lance Yang
2025-08-04 10:10 ` Dan Carpenter
1 sibling, 0 replies; 7+ messages in thread
From: Lance Yang @ 2025-08-04 10:04 UTC (permalink / raw)
To: Dan Carpenter; +Cc: netfilter-devel
On 2025/8/4 17:57, Lance Yang wrote:
>
>
> On 2025/8/4 17:24, Dan Carpenter wrote:
>> On Mon, Aug 04, 2025 at 05:05:32PM +0800, Lance Yang wrote:
>>>
>>>
>>> On 2025/8/4 16:21, Dan Carpenter wrote:
>>>> Hello Lance Yang,
>>>>
>>>> Commit e89a68046687 ("netfilter: load nf_log_syslog on enabling
>>>> nf_conntrack_log_invalid") from May 26, 2025 (linux-next), leads to
>>>> the following Smatch static checker warning:
>>>>
>>>> net/netfilter/nf_conntrack_standalone.c:575
>>>> nf_conntrack_log_invalid_sysctl()
>>>> warn: missing error code? 'ret'
>>>
>>> Thanks for pointing this out!
>>>
>>>>
>>>> net/netfilter/nf_conntrack_standalone.c
>>>> 559 static int
>>>> 560 nf_conntrack_log_invalid_sysctl(const struct ctl_table
>>>> *table, int write,
>>>> 561 void *buffer, size_t
>>>> *lenp, loff_t *ppos)
>>>> 562 {
>>>> 563 int ret, i;
>>>> 564
>>>> 565 ret = proc_dou8vec_minmax(table, write, buffer,
>>>> lenp, ppos);
>>>> 566 if (ret < 0 || !write)
>>>> 567 return ret;
>>>> 568
>>>> 569 if (*(u8 *)table->data == 0)
>>>> 570 return ret;
>>>>
>>>> return 0?
>>>
>>> That's a good question. proc_dou8vec_minmax() returns 0 on a successful
>>> write. So when a user writes '0' to disable the feature, ret is
>>> already 0.
>>> Returning it is the correct behavior to signal success.
>>>
>>>>
>>>> 571
>>>> 572 /* Load nf_log_syslog only if no logger is
>>>> currently registered */
>>>> 573 for (i = 0; i < NFPROTO_NUMPROTO; i++) {
>>>> 574 if (nf_log_is_registered(i))
>>>> --> 575 return ret;
>>>>
>>>> This feels like it should be return -EBUSY? Or potentially return 0.
>>>
>>> We simply return ret (which is 0) to signal success, as no further
>>> action
>>> (like loading the nf_log_syslog module) is needed.
>>>
>>>>
>>>> 576 }
>>>> 577 request_module("%s", "nf_log_syslog");
>>>> 578
>>>> 579 return ret;
>>>>
>>>> return 0.
>>>
>>> It's 0 as well.
>>>
>>> Emm... do you know a way to make the Smatch static checker happy?
>>>
>>
>> Returning 0 would make the code so much more clear. Readers probably
>
> Yep, I see your point ;)
>
>> assume that proc_dou8vec_minmax() returns positive values on success
>
> IIUC, proc_dou8vec_minmax only returns 0 for success or a negative
> error code, so there's no positive value case here ...
Correction:
IIUC, proc_dou8vec_minmax only returns 0 for success or a negative
error code on a write, so there's no positive value case here ...
>
>> and that's why we are returning ret. I know that I had to check.
>>
>
> It should make the code clearer and also make the Smatch checker happy:
>
> ret = proc_dou8vec_minmax(table, write, buffer, lenp, ppos);
> - if (ret < 0 || !write)
> + if (ret != 0 || !write)
> return ret;
>
> By checking for "ret != 0", it becomes explicit that ret can only be
> zero after that. wdyt?
>
> Also, if you'd like, please feel free to send a patch for it ;p
>
> Thanks,
> Lance
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [bug report] netfilter: load nf_log_syslog on enabling nf_conntrack_log_invalid
2025-08-04 9:57 ` Lance Yang
2025-08-04 10:04 ` Lance Yang
@ 2025-08-04 10:10 ` Dan Carpenter
2025-08-04 10:24 ` Lance Yang
1 sibling, 1 reply; 7+ messages in thread
From: Dan Carpenter @ 2025-08-04 10:10 UTC (permalink / raw)
To: Lance Yang; +Cc: netfilter-devel
On Mon, Aug 04, 2025 at 05:57:09PM +0800, Lance Yang wrote:
>
>
> On 2025/8/4 17:24, Dan Carpenter wrote:
> > On Mon, Aug 04, 2025 at 05:05:32PM +0800, Lance Yang wrote:
> > >
> > >
> > > On 2025/8/4 16:21, Dan Carpenter wrote:
> > > > Hello Lance Yang,
> > > >
> > > > Commit e89a68046687 ("netfilter: load nf_log_syslog on enabling
> > > > nf_conntrack_log_invalid") from May 26, 2025 (linux-next), leads to
> > > > the following Smatch static checker warning:
> > > >
> > > > net/netfilter/nf_conntrack_standalone.c:575 nf_conntrack_log_invalid_sysctl()
> > > > warn: missing error code? 'ret'
> > >
> > > Thanks for pointing this out!
> > >
> > > >
> > > > net/netfilter/nf_conntrack_standalone.c
> > > > 559 static int
> > > > 560 nf_conntrack_log_invalid_sysctl(const struct ctl_table *table, int write,
> > > > 561 void *buffer, size_t *lenp, loff_t *ppos)
> > > > 562 {
> > > > 563 int ret, i;
> > > > 564
> > > > 565 ret = proc_dou8vec_minmax(table, write, buffer, lenp, ppos);
> > > > 566 if (ret < 0 || !write)
> > > > 567 return ret;
> > > > 568
> > > > 569 if (*(u8 *)table->data == 0)
> > > > 570 return ret;
> > > >
> > > > return 0?
> > >
> > > That's a good question. proc_dou8vec_minmax() returns 0 on a successful
> > > write. So when a user writes '0' to disable the feature, ret is already 0.
> > > Returning it is the correct behavior to signal success.
> > >
> > > >
> > > > 571
> > > > 572 /* Load nf_log_syslog only if no logger is currently registered */
> > > > 573 for (i = 0; i < NFPROTO_NUMPROTO; i++) {
> > > > 574 if (nf_log_is_registered(i))
> > > > --> 575 return ret;
> > > >
> > > > This feels like it should be return -EBUSY? Or potentially return 0.
> > >
> > > We simply return ret (which is 0) to signal success, as no further action
> > > (like loading the nf_log_syslog module) is needed.
> > >
> > > >
> > > > 576 }
> > > > 577 request_module("%s", "nf_log_syslog");
> > > > 578
> > > > 579 return ret;
> > > >
> > > > return 0.
> > >
> > > It's 0 as well.
> > >
> > > Emm... do you know a way to make the Smatch static checker happy?
> > >
> >
> > Returning 0 would make the code so much more clear. Readers probably
>
> Yep, I see your point ;)
>
> > assume that proc_dou8vec_minmax() returns positive values on success
>
> IIUC, proc_dou8vec_minmax only returns 0 for success or a negative
> error code, so there's no positive value case here ...
>
> > and that's why we are returning ret. I know that I had to check.
> >
>
> It should make the code clearer and also make the Smatch checker happy:
>
> ret = proc_dou8vec_minmax(table, write, buffer, lenp, ppos);
> - if (ret < 0 || !write)
> + if (ret != 0 || !write)
> return ret;
>
> By checking for "ret != 0", it becomes explicit that ret can only be
> zero after that. wdyt?
The ret check there should either be the way you wrote it or:
if (ret || !write)
either one is fine. Adding a "!= 0" is not really idiomatic because
ret is not a number, it's an error code.
If you have the cross function database, then Smatch knows that ret
can't be positive... I build with the DB on my desktop but the cross
function DB doesn't scale well enough to be usable by the zero-day bot
so I see this warning on my desktop but the zero-day bot will not
print a warning.
regards,
dan carpenter
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [bug report] netfilter: load nf_log_syslog on enabling nf_conntrack_log_invalid
2025-08-04 10:10 ` Dan Carpenter
@ 2025-08-04 10:24 ` Lance Yang
0 siblings, 0 replies; 7+ messages in thread
From: Lance Yang @ 2025-08-04 10:24 UTC (permalink / raw)
To: Dan Carpenter; +Cc: netfilter-devel
On 2025/8/4 18:10, Dan Carpenter wrote:
> On Mon, Aug 04, 2025 at 05:57:09PM +0800, Lance Yang wrote:
>>
>>
>> On 2025/8/4 17:24, Dan Carpenter wrote:
>>> On Mon, Aug 04, 2025 at 05:05:32PM +0800, Lance Yang wrote:
>>>>
>>>>
>>>> On 2025/8/4 16:21, Dan Carpenter wrote:
>>>>> Hello Lance Yang,
>>>>>
>>>>> Commit e89a68046687 ("netfilter: load nf_log_syslog on enabling
>>>>> nf_conntrack_log_invalid") from May 26, 2025 (linux-next), leads to
>>>>> the following Smatch static checker warning:
>>>>>
>>>>> net/netfilter/nf_conntrack_standalone.c:575 nf_conntrack_log_invalid_sysctl()
>>>>> warn: missing error code? 'ret'
>>>>
>>>> Thanks for pointing this out!
>>>>
>>>>>
>>>>> net/netfilter/nf_conntrack_standalone.c
>>>>> 559 static int
>>>>> 560 nf_conntrack_log_invalid_sysctl(const struct ctl_table *table, int write,
>>>>> 561 void *buffer, size_t *lenp, loff_t *ppos)
>>>>> 562 {
>>>>> 563 int ret, i;
>>>>> 564
>>>>> 565 ret = proc_dou8vec_minmax(table, write, buffer, lenp, ppos);
>>>>> 566 if (ret < 0 || !write)
>>>>> 567 return ret;
>>>>> 568
>>>>> 569 if (*(u8 *)table->data == 0)
>>>>> 570 return ret;
>>>>>
>>>>> return 0?
>>>>
>>>> That's a good question. proc_dou8vec_minmax() returns 0 on a successful
>>>> write. So when a user writes '0' to disable the feature, ret is already 0.
>>>> Returning it is the correct behavior to signal success.
>>>>
>>>>>
>>>>> 571
>>>>> 572 /* Load nf_log_syslog only if no logger is currently registered */
>>>>> 573 for (i = 0; i < NFPROTO_NUMPROTO; i++) {
>>>>> 574 if (nf_log_is_registered(i))
>>>>> --> 575 return ret;
>>>>>
>>>>> This feels like it should be return -EBUSY? Or potentially return 0.
>>>>
>>>> We simply return ret (which is 0) to signal success, as no further action
>>>> (like loading the nf_log_syslog module) is needed.
>>>>
>>>>>
>>>>> 576 }
>>>>> 577 request_module("%s", "nf_log_syslog");
>>>>> 578
>>>>> 579 return ret;
>>>>>
>>>>> return 0.
>>>>
>>>> It's 0 as well.
>>>>
>>>> Emm... do you know a way to make the Smatch static checker happy?
>>>>
>>>
>>> Returning 0 would make the code so much more clear. Readers probably
>>
>> Yep, I see your point ;)
>>
>>> assume that proc_dou8vec_minmax() returns positive values on success
>>
>> IIUC, proc_dou8vec_minmax only returns 0 for success or a negative
>> error code, so there's no positive value case here ...
>>
>>> and that's why we are returning ret. I know that I had to check.
>>>
>>
>> It should make the code clearer and also make the Smatch checker happy:
>>
>> ret = proc_dou8vec_minmax(table, write, buffer, lenp, ppos);
>> - if (ret < 0 || !write)
>> + if (ret != 0 || !write)
>> return ret;
>>
>> By checking for "ret != 0", it becomes explicit that ret can only be
>> zero after that. wdyt?
>
> The ret check there should either be the way you wrote it or:
>
> if (ret || !write)
>
> either one is fine. Adding a "!= 0" is not really idiomatic because
> ret is not a number, it's an error code.
Yes. "if (ret || !write)" is much more idiomatic ;)
> If you have the cross function database, then Smatch knows that ret
> can't be positive... I build with the DB on my desktop but the cross
> function DB doesn't scale well enough to be usable by the zero-day bot
> so I see this warning on my desktop but the zero-day bot will not
> print a warning.
Ah, got it. Would you be interested in sending a patch for it?
Thanks,
Lance
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-08-04 10:24 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-04 8:21 [bug report] netfilter: load nf_log_syslog on enabling nf_conntrack_log_invalid Dan Carpenter
2025-08-04 9:05 ` Lance Yang
2025-08-04 9:24 ` Dan Carpenter
2025-08-04 9:57 ` Lance Yang
2025-08-04 10:04 ` Lance Yang
2025-08-04 10:10 ` Dan Carpenter
2025-08-04 10:24 ` Lance Yang
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.