* [PATCH net 0/2] action fixes for flow_offload infra compatibility
@ 2019-08-03 13:36 Vlad Buslov
2019-08-03 13:36 ` [PATCH net 1/2] net: sched: police: allow accessing police->params with rtnl Vlad Buslov
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Vlad Buslov @ 2019-08-03 13:36 UTC (permalink / raw)
To: netdev
Cc: pieter.jansenvanvuuren, jhs, xiyou.wangcong, jiri, davem,
Vlad Buslov
Fix rcu warnings due to usage of action helpers that expect rcu read lock
protection from rtnl-protected context of flow_offload infra.
Vlad Buslov (2):
net: sched: police: allow accessing police->params with rtnl
net: sched: sample: allow accessing psample_group with rtnl
include/net/tc_act/tc_police.h | 4 ++--
include/net/tc_act/tc_sample.h | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
--
2.21.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH net 1/2] net: sched: police: allow accessing police->params with rtnl
2019-08-03 13:36 [PATCH net 0/2] action fixes for flow_offload infra compatibility Vlad Buslov
@ 2019-08-03 13:36 ` Vlad Buslov
2019-08-05 11:38 ` Pieter Jansen van Vuuren
2019-08-03 13:36 ` [PATCH net 2/2] net: sched: sample: allow accessing psample_group " Vlad Buslov
2019-08-06 21:15 ` [PATCH net 0/2] action fixes for flow_offload infra compatibility David Miller
2 siblings, 1 reply; 6+ messages in thread
From: Vlad Buslov @ 2019-08-03 13:36 UTC (permalink / raw)
To: netdev
Cc: pieter.jansenvanvuuren, jhs, xiyou.wangcong, jiri, davem,
Vlad Buslov
Recently implemented support for police action in flow_offload infra leads
to following rcu usage warning:
[ 1925.881092] =============================
[ 1925.881094] WARNING: suspicious RCU usage
[ 1925.881098] 5.3.0-rc1+ #574 Not tainted
[ 1925.881100] -----------------------------
[ 1925.881104] include/net/tc_act/tc_police.h:57 suspicious rcu_dereference_check() usage!
[ 1925.881106]
other info that might help us debug this:
[ 1925.881109]
rcu_scheduler_active = 2, debug_locks = 1
[ 1925.881112] 1 lock held by tc/18591:
[ 1925.881115] #0: 00000000b03cb918 (rtnl_mutex){+.+.}, at: tc_new_tfilter+0x47c/0x970
[ 1925.881124]
stack backtrace:
[ 1925.881127] CPU: 2 PID: 18591 Comm: tc Not tainted 5.3.0-rc1+ #574
[ 1925.881130] Hardware name: Supermicro SYS-2028TP-DECR/X10DRT-P, BIOS 2.0b 03/30/2017
[ 1925.881132] Call Trace:
[ 1925.881138] dump_stack+0x85/0xc0
[ 1925.881145] tc_setup_flow_action+0x1771/0x2040
[ 1925.881155] fl_hw_replace_filter+0x11f/0x2e0 [cls_flower]
[ 1925.881175] fl_change+0xd24/0x1b30 [cls_flower]
[ 1925.881200] tc_new_tfilter+0x3e0/0x970
[ 1925.881231] ? tc_del_tfilter+0x720/0x720
[ 1925.881243] rtnetlink_rcv_msg+0x389/0x4b0
[ 1925.881250] ? netlink_deliver_tap+0x95/0x400
[ 1925.881257] ? rtnl_dellink+0x2d0/0x2d0
[ 1925.881264] netlink_rcv_skb+0x49/0x110
[ 1925.881275] netlink_unicast+0x171/0x200
[ 1925.881284] netlink_sendmsg+0x224/0x3f0
[ 1925.881299] sock_sendmsg+0x5e/0x60
[ 1925.881305] ___sys_sendmsg+0x2ae/0x330
[ 1925.881309] ? task_work_add+0x43/0x50
[ 1925.881314] ? fput_many+0x45/0x80
[ 1925.881329] ? __lock_acquire+0x248/0x1930
[ 1925.881342] ? find_held_lock+0x2b/0x80
[ 1925.881347] ? task_work_run+0x7b/0xd0
[ 1925.881359] __sys_sendmsg+0x59/0xa0
[ 1925.881375] do_syscall_64+0x5c/0xb0
[ 1925.881381] entry_SYSCALL_64_after_hwframe+0x49/0xbe
[ 1925.881384] RIP: 0033:0x7feb245047b8
[ 1925.881388] Code: 89 02 48 c7 c0 ff ff ff ff eb bb 0f 1f 80 00 00 00 00 f3 0f 1e fa 48 8d 05 65 8f 0c 00 8b 00 85 c0 75 17 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 58 c3 0f 1f 80 00 00 00 00 48 83
ec 28 89 54
[ 1925.881391] RSP: 002b:00007ffc2d2a5788 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
[ 1925.881395] RAX: ffffffffffffffda RBX: 000000005d4497ed RCX: 00007feb245047b8
[ 1925.881398] RDX: 0000000000000000 RSI: 00007ffc2d2a57f0 RDI: 0000000000000003
[ 1925.881400] RBP: 0000000000000000 R08: 0000000000000001 R09: 0000000000000006
[ 1925.881403] R10: 0000000000404ec2 R11: 0000000000000246 R12: 0000000000000001
[ 1925.881406] R13: 0000000000480640 R14: 0000000000000012 R15: 0000000000000001
Change tcf_police_rate_bytes_ps() and tcf_police_tcfp_burst() helpers to
allow using them from both rtnl and rcu protected contexts.
Fixes: 8c8cfc6ed274 ("net/sched: add police action to the hardware intermediate representation")
Signed-off-by: Vlad Buslov <vladbu@mellanox.com>
---
include/net/tc_act/tc_police.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/net/tc_act/tc_police.h b/include/net/tc_act/tc_police.h
index 8b9ef3664262..cfdc7cb82cad 100644
--- a/include/net/tc_act/tc_police.h
+++ b/include/net/tc_act/tc_police.h
@@ -54,7 +54,7 @@ static inline u64 tcf_police_rate_bytes_ps(const struct tc_action *act)
struct tcf_police *police = to_police(act);
struct tcf_police_params *params;
- params = rcu_dereference_bh(police->params);
+ params = rcu_dereference_bh_rtnl(police->params);
return params->rate.rate_bytes_ps;
}
@@ -63,7 +63,7 @@ static inline s64 tcf_police_tcfp_burst(const struct tc_action *act)
struct tcf_police *police = to_police(act);
struct tcf_police_params *params;
- params = rcu_dereference_bh(police->params);
+ params = rcu_dereference_bh_rtnl(police->params);
return params->tcfp_burst;
}
--
2.21.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net 2/2] net: sched: sample: allow accessing psample_group with rtnl
2019-08-03 13:36 [PATCH net 0/2] action fixes for flow_offload infra compatibility Vlad Buslov
2019-08-03 13:36 ` [PATCH net 1/2] net: sched: police: allow accessing police->params with rtnl Vlad Buslov
@ 2019-08-03 13:36 ` Vlad Buslov
2019-08-05 11:39 ` Pieter Jansen van Vuuren
2019-08-06 21:15 ` [PATCH net 0/2] action fixes for flow_offload infra compatibility David Miller
2 siblings, 1 reply; 6+ messages in thread
From: Vlad Buslov @ 2019-08-03 13:36 UTC (permalink / raw)
To: netdev
Cc: pieter.jansenvanvuuren, jhs, xiyou.wangcong, jiri, davem,
Vlad Buslov
Recently implemented support for sample action in flow_offload infra leads
to following rcu usage warning:
[ 1938.234856] =============================
[ 1938.234858] WARNING: suspicious RCU usage
[ 1938.234863] 5.3.0-rc1+ #574 Not tainted
[ 1938.234866] -----------------------------
[ 1938.234869] include/net/tc_act/tc_sample.h:47 suspicious rcu_dereference_check() usage!
[ 1938.234872]
other info that might help us debug this:
[ 1938.234875]
rcu_scheduler_active = 2, debug_locks = 1
[ 1938.234879] 1 lock held by tc/19540:
[ 1938.234881] #0: 00000000b03cb918 (rtnl_mutex){+.+.}, at: tc_new_tfilter+0x47c/0x970
[ 1938.234900]
stack backtrace:
[ 1938.234905] CPU: 2 PID: 19540 Comm: tc Not tainted 5.3.0-rc1+ #574
[ 1938.234908] Hardware name: Supermicro SYS-2028TP-DECR/X10DRT-P, BIOS 2.0b 03/30/2017
[ 1938.234911] Call Trace:
[ 1938.234922] dump_stack+0x85/0xc0
[ 1938.234930] tc_setup_flow_action+0xed5/0x2040
[ 1938.234944] fl_hw_replace_filter+0x11f/0x2e0 [cls_flower]
[ 1938.234965] fl_change+0xd24/0x1b30 [cls_flower]
[ 1938.234990] tc_new_tfilter+0x3e0/0x970
[ 1938.235021] ? tc_del_tfilter+0x720/0x720
[ 1938.235028] rtnetlink_rcv_msg+0x389/0x4b0
[ 1938.235038] ? netlink_deliver_tap+0x95/0x400
[ 1938.235044] ? rtnl_dellink+0x2d0/0x2d0
[ 1938.235053] netlink_rcv_skb+0x49/0x110
[ 1938.235063] netlink_unicast+0x171/0x200
[ 1938.235073] netlink_sendmsg+0x224/0x3f0
[ 1938.235091] sock_sendmsg+0x5e/0x60
[ 1938.235097] ___sys_sendmsg+0x2ae/0x330
[ 1938.235111] ? __handle_mm_fault+0x12cd/0x19e0
[ 1938.235125] ? __handle_mm_fault+0x12cd/0x19e0
[ 1938.235138] ? find_held_lock+0x2b/0x80
[ 1938.235147] ? do_user_addr_fault+0x22d/0x490
[ 1938.235160] __sys_sendmsg+0x59/0xa0
[ 1938.235178] do_syscall_64+0x5c/0xb0
[ 1938.235187] entry_SYSCALL_64_after_hwframe+0x49/0xbe
[ 1938.235192] RIP: 0033:0x7ff9a4d597b8
[ 1938.235197] Code: 89 02 48 c7 c0 ff ff ff ff eb bb 0f 1f 80 00 00 00 00 f3 0f 1e fa 48 8d 05 65 8f 0c 00 8b 00 85 c0 75 17 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 58 c3 0f 1f 80 00 00 00 00 48 83
ec 28 89 54
[ 1938.235200] RSP: 002b:00007ffcfe381c48 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
[ 1938.235205] RAX: ffffffffffffffda RBX: 000000005d4497f9 RCX: 00007ff9a4d597b8
[ 1938.235208] RDX: 0000000000000000 RSI: 00007ffcfe381cb0 RDI: 0000000000000003
[ 1938.235211] RBP: 0000000000000000 R08: 0000000000000001 R09: 0000000000000006
[ 1938.235214] R10: 0000000000404ec2 R11: 0000000000000246 R12: 0000000000000001
[ 1938.235217] R13: 0000000000480640 R14: 0000000000000012 R15: 0000000000000001
Change tcf_sample_psample_group() helper to allow using it from both rtnl
and rcu protected contexts.
Fixes: a7a7be6087b0 ("net/sched: add sample action to the hardware intermediate representation")
Signed-off-by: Vlad Buslov <vladbu@mellanox.com>
---
include/net/tc_act/tc_sample.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/net/tc_act/tc_sample.h b/include/net/tc_act/tc_sample.h
index 0a559d4b6f0f..b4fce0fae645 100644
--- a/include/net/tc_act/tc_sample.h
+++ b/include/net/tc_act/tc_sample.h
@@ -44,7 +44,7 @@ static inline int tcf_sample_trunc_size(const struct tc_action *a)
static inline struct psample_group *
tcf_sample_psample_group(const struct tc_action *a)
{
- return rcu_dereference(to_sample(a)->psample_group);
+ return rcu_dereference_rtnl(to_sample(a)->psample_group);
}
#endif /* __NET_TC_SAMPLE_H */
--
2.21.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH net 1/2] net: sched: police: allow accessing police->params with rtnl
2019-08-03 13:36 ` [PATCH net 1/2] net: sched: police: allow accessing police->params with rtnl Vlad Buslov
@ 2019-08-05 11:38 ` Pieter Jansen van Vuuren
0 siblings, 0 replies; 6+ messages in thread
From: Pieter Jansen van Vuuren @ 2019-08-05 11:38 UTC (permalink / raw)
To: Vlad Buslov, netdev; +Cc: jhs, xiyou.wangcong, jiri, davem
On 2019/08/03 14:36, Vlad Buslov wrote:
> Recently implemented support for police action in flow_offload infra leads
> to following rcu usage warning:
>
> [ 1925.881092] =============================
> [ 1925.881094] WARNING: suspicious RCU usage
> [ 1925.881098] 5.3.0-rc1+ #574 Not tainted
> [ 1925.881100] -----------------------------
> [ 1925.881104] include/net/tc_act/tc_police.h:57 suspicious rcu_dereference_check() usage!
> [ 1925.881106]
> other info that might help us debug this:
>
> [ 1925.881109]
> rcu_scheduler_active = 2, debug_locks = 1
> [ 1925.881112] 1 lock held by tc/18591:
> [ 1925.881115] #0: 00000000b03cb918 (rtnl_mutex){+.+.}, at: tc_new_tfilter+0x47c/0x970
> [ 1925.881124]
> stack backtrace:
> [ 1925.881127] CPU: 2 PID: 18591 Comm: tc Not tainted 5.3.0-rc1+ #574
> [ 1925.881130] Hardware name: Supermicro SYS-2028TP-DECR/X10DRT-P, BIOS 2.0b 03/30/2017
> [ 1925.881132] Call Trace:
> [ 1925.881138] dump_stack+0x85/0xc0
> [ 1925.881145] tc_setup_flow_action+0x1771/0x2040
> [ 1925.881155] fl_hw_replace_filter+0x11f/0x2e0 [cls_flower]
> [ 1925.881175] fl_change+0xd24/0x1b30 [cls_flower]
> [ 1925.881200] tc_new_tfilter+0x3e0/0x970
> [ 1925.881231] ? tc_del_tfilter+0x720/0x720
> [ 1925.881243] rtnetlink_rcv_msg+0x389/0x4b0
> [ 1925.881250] ? netlink_deliver_tap+0x95/0x400
> [ 1925.881257] ? rtnl_dellink+0x2d0/0x2d0
> [ 1925.881264] netlink_rcv_skb+0x49/0x110
> [ 1925.881275] netlink_unicast+0x171/0x200
> [ 1925.881284] netlink_sendmsg+0x224/0x3f0
> [ 1925.881299] sock_sendmsg+0x5e/0x60
> [ 1925.881305] ___sys_sendmsg+0x2ae/0x330
> [ 1925.881309] ? task_work_add+0x43/0x50
> [ 1925.881314] ? fput_many+0x45/0x80
> [ 1925.881329] ? __lock_acquire+0x248/0x1930
> [ 1925.881342] ? find_held_lock+0x2b/0x80
> [ 1925.881347] ? task_work_run+0x7b/0xd0
> [ 1925.881359] __sys_sendmsg+0x59/0xa0
> [ 1925.881375] do_syscall_64+0x5c/0xb0
> [ 1925.881381] entry_SYSCALL_64_after_hwframe+0x49/0xbe
> [ 1925.881384] RIP: 0033:0x7feb245047b8
> [ 1925.881388] Code: 89 02 48 c7 c0 ff ff ff ff eb bb 0f 1f 80 00 00 00 00 f3 0f 1e fa 48 8d 05 65 8f 0c 00 8b 00 85 c0 75 17 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 58 c3 0f 1f 80 00 00 00 00 48 83
> ec 28 89 54
> [ 1925.881391] RSP: 002b:00007ffc2d2a5788 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
> [ 1925.881395] RAX: ffffffffffffffda RBX: 000000005d4497ed RCX: 00007feb245047b8
> [ 1925.881398] RDX: 0000000000000000 RSI: 00007ffc2d2a57f0 RDI: 0000000000000003
> [ 1925.881400] RBP: 0000000000000000 R08: 0000000000000001 R09: 0000000000000006
> [ 1925.881403] R10: 0000000000404ec2 R11: 0000000000000246 R12: 0000000000000001
> [ 1925.881406] R13: 0000000000480640 R14: 0000000000000012 R15: 0000000000000001
>
> Change tcf_police_rate_bytes_ps() and tcf_police_tcfp_burst() helpers to
> allow using them from both rtnl and rcu protected contexts.
>
> Fixes: 8c8cfc6ed274 ("net/sched: add police action to the hardware intermediate representation")
> Signed-off-by: Vlad Buslov <vladbu@mellanox.com>
Thank you Vlad.
Reviewed-by: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net 2/2] net: sched: sample: allow accessing psample_group with rtnl
2019-08-03 13:36 ` [PATCH net 2/2] net: sched: sample: allow accessing psample_group " Vlad Buslov
@ 2019-08-05 11:39 ` Pieter Jansen van Vuuren
0 siblings, 0 replies; 6+ messages in thread
From: Pieter Jansen van Vuuren @ 2019-08-05 11:39 UTC (permalink / raw)
To: Vlad Buslov, netdev; +Cc: jhs, xiyou.wangcong, jiri, davem
On 2019/08/03 14:36, Vlad Buslov wrote:
> Recently implemented support for sample action in flow_offload infra leads
> to following rcu usage warning:
>
> [ 1938.234856] =============================
> [ 1938.234858] WARNING: suspicious RCU usage
> [ 1938.234863] 5.3.0-rc1+ #574 Not tainted
> [ 1938.234866] -----------------------------
> [ 1938.234869] include/net/tc_act/tc_sample.h:47 suspicious rcu_dereference_check() usage!
> [ 1938.234872]
> other info that might help us debug this:
>
> [ 1938.234875]
> rcu_scheduler_active = 2, debug_locks = 1
> [ 1938.234879] 1 lock held by tc/19540:
> [ 1938.234881] #0: 00000000b03cb918 (rtnl_mutex){+.+.}, at: tc_new_tfilter+0x47c/0x970
> [ 1938.234900]
> stack backtrace:
> [ 1938.234905] CPU: 2 PID: 19540 Comm: tc Not tainted 5.3.0-rc1+ #574
> [ 1938.234908] Hardware name: Supermicro SYS-2028TP-DECR/X10DRT-P, BIOS 2.0b 03/30/2017
> [ 1938.234911] Call Trace:
> [ 1938.234922] dump_stack+0x85/0xc0
> [ 1938.234930] tc_setup_flow_action+0xed5/0x2040
> [ 1938.234944] fl_hw_replace_filter+0x11f/0x2e0 [cls_flower]
> [ 1938.234965] fl_change+0xd24/0x1b30 [cls_flower]
> [ 1938.234990] tc_new_tfilter+0x3e0/0x970
> [ 1938.235021] ? tc_del_tfilter+0x720/0x720
> [ 1938.235028] rtnetlink_rcv_msg+0x389/0x4b0
> [ 1938.235038] ? netlink_deliver_tap+0x95/0x400
> [ 1938.235044] ? rtnl_dellink+0x2d0/0x2d0
> [ 1938.235053] netlink_rcv_skb+0x49/0x110
> [ 1938.235063] netlink_unicast+0x171/0x200
> [ 1938.235073] netlink_sendmsg+0x224/0x3f0
> [ 1938.235091] sock_sendmsg+0x5e/0x60
> [ 1938.235097] ___sys_sendmsg+0x2ae/0x330
> [ 1938.235111] ? __handle_mm_fault+0x12cd/0x19e0
> [ 1938.235125] ? __handle_mm_fault+0x12cd/0x19e0
> [ 1938.235138] ? find_held_lock+0x2b/0x80
> [ 1938.235147] ? do_user_addr_fault+0x22d/0x490
> [ 1938.235160] __sys_sendmsg+0x59/0xa0
> [ 1938.235178] do_syscall_64+0x5c/0xb0
> [ 1938.235187] entry_SYSCALL_64_after_hwframe+0x49/0xbe
> [ 1938.235192] RIP: 0033:0x7ff9a4d597b8
> [ 1938.235197] Code: 89 02 48 c7 c0 ff ff ff ff eb bb 0f 1f 80 00 00 00 00 f3 0f 1e fa 48 8d 05 65 8f 0c 00 8b 00 85 c0 75 17 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 58 c3 0f 1f 80 00 00 00 00 48 83
> ec 28 89 54
> [ 1938.235200] RSP: 002b:00007ffcfe381c48 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
> [ 1938.235205] RAX: ffffffffffffffda RBX: 000000005d4497f9 RCX: 00007ff9a4d597b8
> [ 1938.235208] RDX: 0000000000000000 RSI: 00007ffcfe381cb0 RDI: 0000000000000003
> [ 1938.235211] RBP: 0000000000000000 R08: 0000000000000001 R09: 0000000000000006
> [ 1938.235214] R10: 0000000000404ec2 R11: 0000000000000246 R12: 0000000000000001
> [ 1938.235217] R13: 0000000000480640 R14: 0000000000000012 R15: 0000000000000001
>
> Change tcf_sample_psample_group() helper to allow using it from both rtnl
> and rcu protected contexts.
>
> Fixes: a7a7be6087b0 ("net/sched: add sample action to the hardware intermediate representation")
> Signed-off-by: Vlad Buslov <vladbu@mellanox.com>
Thanks
Reviewed-by: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net 0/2] action fixes for flow_offload infra compatibility
2019-08-03 13:36 [PATCH net 0/2] action fixes for flow_offload infra compatibility Vlad Buslov
2019-08-03 13:36 ` [PATCH net 1/2] net: sched: police: allow accessing police->params with rtnl Vlad Buslov
2019-08-03 13:36 ` [PATCH net 2/2] net: sched: sample: allow accessing psample_group " Vlad Buslov
@ 2019-08-06 21:15 ` David Miller
2 siblings, 0 replies; 6+ messages in thread
From: David Miller @ 2019-08-06 21:15 UTC (permalink / raw)
To: vladbu; +Cc: netdev, pieter.jansenvanvuuren, jhs, xiyou.wangcong, jiri
From: Vlad Buslov <vladbu@mellanox.com>
Date: Sat, 3 Aug 2019 16:36:17 +0300
> Fix rcu warnings due to usage of action helpers that expect rcu read lock
> protection from rtnl-protected context of flow_offload infra.
Series applied.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2019-08-06 21:15 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-08-03 13:36 [PATCH net 0/2] action fixes for flow_offload infra compatibility Vlad Buslov
2019-08-03 13:36 ` [PATCH net 1/2] net: sched: police: allow accessing police->params with rtnl Vlad Buslov
2019-08-05 11:38 ` Pieter Jansen van Vuuren
2019-08-03 13:36 ` [PATCH net 2/2] net: sched: sample: allow accessing psample_group " Vlad Buslov
2019-08-05 11:39 ` Pieter Jansen van Vuuren
2019-08-06 21:15 ` [PATCH net 0/2] action fixes for flow_offload infra compatibility David Miller
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).