From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Ding Tianhong <dingtianhong@huawei.com>,
"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 3.10 52/86] vlan: Fix lockdep warning when vlan dev handle notification
Date: Wed, 28 May 2014 21:37:27 -0700 [thread overview]
Message-ID: <20140529043520.543255181@linuxfoundation.org> (raw)
In-Reply-To: <20140529043513.451722422@linuxfoundation.org>
3.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: dingtianhong <dingtianhong@huawei.com>
[ Upstream commit dc8eaaa006350d24030502a4521542e74b5cb39f ]
When I open the LOCKDEP config and run these steps:
modprobe 8021q
vconfig add eth2 20
vconfig add eth2.20 30
ifconfig eth2 xx.xx.xx.xx
then the Call Trace happened:
[32524.386288] =============================================
[32524.386293] [ INFO: possible recursive locking detected ]
[32524.386298] 3.14.0-rc2-0.7-default+ #35 Tainted: G O
[32524.386302] ---------------------------------------------
[32524.386306] ifconfig/3103 is trying to acquire lock:
[32524.386310] (&vlan_netdev_addr_lock_key/1){+.....}, at: [<ffffffff814275f4>] dev_mc_sync+0x64/0xb0
[32524.386326]
[32524.386326] but task is already holding lock:
[32524.386330] (&vlan_netdev_addr_lock_key/1){+.....}, at: [<ffffffff8141af83>] dev_set_rx_mode+0x23/0x40
[32524.386341]
[32524.386341] other info that might help us debug this:
[32524.386345] Possible unsafe locking scenario:
[32524.386345]
[32524.386350] CPU0
[32524.386352] ----
[32524.386354] lock(&vlan_netdev_addr_lock_key/1);
[32524.386359] lock(&vlan_netdev_addr_lock_key/1);
[32524.386364]
[32524.386364] *** DEADLOCK ***
[32524.386364]
[32524.386368] May be due to missing lock nesting notation
[32524.386368]
[32524.386373] 2 locks held by ifconfig/3103:
[32524.386376] #0: (rtnl_mutex){+.+.+.}, at: [<ffffffff81431d42>] rtnl_lock+0x12/0x20
[32524.386387] #1: (&vlan_netdev_addr_lock_key/1){+.....}, at: [<ffffffff8141af83>] dev_set_rx_mode+0x23/0x40
[32524.386398]
[32524.386398] stack backtrace:
[32524.386403] CPU: 1 PID: 3103 Comm: ifconfig Tainted: G O 3.14.0-rc2-0.7-default+ #35
[32524.386409] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2007
[32524.386414] ffffffff81ffae40 ffff8800d9625ae8 ffffffff814f68a2 ffff8800d9625bc8
[32524.386421] ffffffff810a35fb ffff8800d8a8d9d0 00000000d9625b28 ffff8800d8a8e5d0
[32524.386428] 000003cc00000000 0000000000000002 ffff8800d8a8e5f8 0000000000000000
[32524.386435] Call Trace:
[32524.386441] [<ffffffff814f68a2>] dump_stack+0x6a/0x78
[32524.386448] [<ffffffff810a35fb>] __lock_acquire+0x7ab/0x1940
[32524.386454] [<ffffffff810a323a>] ? __lock_acquire+0x3ea/0x1940
[32524.386459] [<ffffffff810a4874>] lock_acquire+0xe4/0x110
[32524.386464] [<ffffffff814275f4>] ? dev_mc_sync+0x64/0xb0
[32524.386471] [<ffffffff814fc07a>] _raw_spin_lock_nested+0x2a/0x40
[32524.386476] [<ffffffff814275f4>] ? dev_mc_sync+0x64/0xb0
[32524.386481] [<ffffffff814275f4>] dev_mc_sync+0x64/0xb0
[32524.386489] [<ffffffffa0500cab>] vlan_dev_set_rx_mode+0x2b/0x50 [8021q]
[32524.386495] [<ffffffff8141addf>] __dev_set_rx_mode+0x5f/0xb0
[32524.386500] [<ffffffff8141af8b>] dev_set_rx_mode+0x2b/0x40
[32524.386506] [<ffffffff8141b3cf>] __dev_open+0xef/0x150
[32524.386511] [<ffffffff8141b177>] __dev_change_flags+0xa7/0x190
[32524.386516] [<ffffffff8141b292>] dev_change_flags+0x32/0x80
[32524.386524] [<ffffffff8149ca56>] devinet_ioctl+0x7d6/0x830
[32524.386532] [<ffffffff81437b0b>] ? dev_ioctl+0x34b/0x660
[32524.386540] [<ffffffff814a05b0>] inet_ioctl+0x80/0xa0
[32524.386550] [<ffffffff8140199d>] sock_do_ioctl+0x2d/0x60
[32524.386558] [<ffffffff81401a52>] sock_ioctl+0x82/0x2a0
[32524.386568] [<ffffffff811a7123>] do_vfs_ioctl+0x93/0x590
[32524.386578] [<ffffffff811b2705>] ? rcu_read_lock_held+0x45/0x50
[32524.386586] [<ffffffff811b39e5>] ? __fget_light+0x105/0x110
[32524.386594] [<ffffffff811a76b1>] SyS_ioctl+0x91/0xb0
[32524.386604] [<ffffffff815057e2>] system_call_fastpath+0x16/0x1b
========================================================================
The reason is that all of the addr_lock_key for vlan dev have the same class,
so if we change the status for vlan dev, the vlan dev and its real dev will
hold the same class of addr_lock_key together, so the warning happened.
we should distinguish the lock depth for vlan dev and its real dev.
v1->v2: Convert the vlan_netdev_addr_lock_key to an array of eight elements, which
could support to add 8 vlan id on a same vlan dev, I think it is enough for current
scene, because a netdev's name is limited to IFNAMSIZ which could not hold 8 vlan id,
and the vlan dev would not meet the same class key with its real dev.
The new function vlan_dev_get_lockdep_subkey() will return the subkey and make the vlan
dev could get a suitable class key.
v2->v3: According David's suggestion, I use the subclass to distinguish the lock key for vlan dev
and its real dev, but it make no sense, because the difference for subclass in the
lock_class_key doesn't mean that the difference class for lock_key, so I use lock_depth
to distinguish the different depth for every vlan dev, the same depth of the vlan dev
could have the same lock_class_key, I import the MAX_LOCK_DEPTH from the include/linux/sched.h,
I think it is enough here, the lockdep should never exceed that value.
v3->v4: Add a huge array of locking keys will waste static kernel memory and is not a appropriate method,
we could use _nested() variants to fix the problem, calculate the depth for every vlan dev,
and use the depth as the subclass for addr_lock_key.
Signed-off-by: Ding Tianhong <dingtianhong@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/8021q/vlan_dev.c | 46 +++++++++++++++++++++++++++++++++++++++++-----
net/core/dev.c | 1 +
2 files changed, 42 insertions(+), 5 deletions(-)
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -512,10 +512,48 @@ static void vlan_dev_change_rx_flags(str
}
}
+static int vlan_calculate_locking_subclass(struct net_device *real_dev)
+{
+ int subclass = 0;
+
+ while (is_vlan_dev(real_dev)) {
+ subclass++;
+ real_dev = vlan_dev_priv(real_dev)->real_dev;
+ }
+
+ return subclass;
+}
+
+static void vlan_dev_mc_sync(struct net_device *to, struct net_device *from)
+{
+ int err = 0, subclass;
+
+ subclass = vlan_calculate_locking_subclass(to);
+
+ spin_lock_nested(&to->addr_list_lock, subclass);
+ err = __hw_addr_sync(&to->mc, &from->mc, to->addr_len);
+ if (!err)
+ __dev_set_rx_mode(to);
+ spin_unlock(&to->addr_list_lock);
+}
+
+static void vlan_dev_uc_sync(struct net_device *to, struct net_device *from)
+{
+ int err = 0, subclass;
+
+ subclass = vlan_calculate_locking_subclass(to);
+
+ spin_lock_nested(&to->addr_list_lock, subclass);
+ err = __hw_addr_sync(&to->uc, &from->uc, to->addr_len);
+ if (!err)
+ __dev_set_rx_mode(to);
+ spin_unlock(&to->addr_list_lock);
+}
+
static void vlan_dev_set_rx_mode(struct net_device *vlan_dev)
{
- dev_mc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev);
- dev_uc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev);
+ vlan_dev_mc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev);
+ vlan_dev_uc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev);
}
/*
@@ -624,9 +662,7 @@ static int vlan_dev_init(struct net_devi
SET_NETDEV_DEVTYPE(dev, &vlan_type);
- if (is_vlan_dev(real_dev))
- subclass = 1;
-
+ subclass = vlan_calculate_locking_subclass(dev);
vlan_dev_set_lockdep_class(dev, subclass);
vlan_dev_priv(dev)->vlan_pcpu_stats = alloc_percpu(struct vlan_pcpu_stats);
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4634,6 +4634,7 @@ void __dev_set_rx_mode(struct net_device
if (ops->ndo_set_rx_mode)
ops->ndo_set_rx_mode(dev);
}
+EXPORT_SYMBOL(__dev_set_rx_mode);
void dev_set_rx_mode(struct net_device *dev)
{
next prev parent reply other threads:[~2014-05-29 4:37 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-29 4:36 [PATCH 3.10 00/86] 3.10.41-stable review Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 01/86] scsi: fix our current target reap infrastructure Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 02/86] SCSI: dual scan thread bug fix Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 03/86] SCSI: megaraid: missing bounds check in mimd_to_kioc() Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 04/86] blktrace: fix accounting of partially completed requests Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 05/86] netfilter: nf_conntrack: reserve two bytes for nf_ct_ext->len Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 06/86] netfilter: Cant fail and free after table replacement Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 07/86] tracepoint: Do not waste memory on mods with no tracepoints Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 08/86] firewire: ohci: beautify some macro definitions Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 09/86] firewire: ohci: fix probe failure with Agere/LSI controllers Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 10/86] arm: multi_v7_defconfig: Enable initrd/initramfs support Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 11/86] ARM: multi_v7_defconfig: enable ARM_ATAG_DTB_COMPAT Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 12/86] rbd: fix error paths in rbd_img_request_fill() Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 13/86] powerpc: Add vr save/restore functions Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 14/86] tgafb: fix mode setting with fbset Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 15/86] parisc: fix epoll_pwait syscall on compat kernel Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 16/86] dont bother with {get,put}_write_access() on non-regular files Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 17/86] md/raid1: r1buf_pool_alloc: free allocate pages when subsequent allocation fails Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 18/86] mm/hugetlb.c: add cond_resched_lock() in return_unused_surplus_pages() Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 19/86] mm: use paravirt friendly ops for NUMA hinting ptes Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 20/86] USB: cdc-acm: Remove Motorola/Telit H24 serial interfaces from ACM driver Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 21/86] USB: cp210x: Add 8281 (Nanotec Plug & Drive) Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 22/86] USB: usb_wwan: fix handling of missing bulk endpoints Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 23/86] USB: serial: ftdi_sio: add id for Brainboxes serial cards Greg Kroah-Hartman
2014-05-29 4:36 ` [PATCH 3.10 24/86] usb: option driver, add support for Telit UE910v2 Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 25/86] Revert "USB: serial: add usbid for dell wwan card to sierra.c" Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 26/86] USB: serial: fix sysfs-attribute removal deadlock Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 27/86] USB: io_ti: fix firmware download on big-endian machines Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 28/86] usb: qcserial: add Sierra Wireless EM7355 Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 29/86] usb: qcserial: add Sierra Wireless MC73xx Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 30/86] usb: qcserial: add Sierra Wireless MC7305/MC7355 Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 31/86] usb: option: add Olivetti Olicard 500 Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 32/86] usb: option: add Alcatel L800MA Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 33/86] usb: option: add and update a number of CMOTech devices Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 34/86] drm/vmwgfx: correct fb_fix_screeninfo.line_length Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 35/86] drm/vmwgfx: Make sure user-space cant DMA across buffer object boundaries v2 Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 36/86] drm/qxl: unset a pointer in sync_obj_unref Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 37/86] drm/radeon: call drm_edid_to_eld when we update the edid Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 38/86] list: introduce list_next_entry() and list_prev_entry() Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 39/86] net: sctp: wake up all assocs if sndbuf policy is per socket Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 40/86] net: sctp: test if association is dead in sctp_wake_up_waiters Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 41/86] l2tp: take PMTU from tunnel UDP socket Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 42/86] net: core: dont account for udp header size when computing seglen Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 43/86] bonding: Remove debug_fs files when module init fails Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 44/86] bridge: Fix double free and memory leak around br_allowed_ingress Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 45/86] ipv6: Limit mtu to 65575 bytes Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 46/86] gre: dont allow to add the same tunnel twice Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 47/86] vti: " Greg Kroah-Hartman
2014-06-02 8:43 ` Nicolas Dichtel
2014-05-29 4:37 ` [PATCH 3.10 48/86] net: ipv4: current group_info should be put after using Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 49/86] ipv4: return valid RTA_IIF on ip route get Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 50/86] filter: prevent nla extensions to peek beyond the end of the message Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 51/86] ip6_gre: dont allow to remove the fb_tunnel_dev Greg Kroah-Hartman
2014-05-29 4:37 ` Greg Kroah-Hartman [this message]
2014-05-29 4:37 ` [PATCH 3.10 53/86] tg3: update rx_jumbo_pending ring param only when jumbo frames are enabled Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 54/86] net: sctp: cache auth_enable per endpoint Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 55/86] net: Fix ns_capable check in sock_diag_put_filterinfo Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 56/86] rtnetlink: Warn when interfaces information wont fit in our packet Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 57/86] rtnetlink: Only supply IFLA_VF_PORTS information when RTEXT_FILTER_VF is set Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 58/86] ipv6: fib: fix fib dump restart Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 59/86] bridge: Handle IFLA_ADDRESS correctly when creating bridge device Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 60/86] sctp: reset flowi4_oif parameter on route lookup Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 61/86] Revert "macvlan : fix checksums error when we are in bridge mode" Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 62/86] tcp_cubic: fix the range of delayed_ack Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 63/86] net: ipv4: ip_forward: fix inverted local_df test Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 64/86] net: ipv6: send pkttoobig immediately if orig frag size > mtu Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 65/86] ipv4: fib_semantics: increment fib_info_cnt after fib_info allocation Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 66/86] net: cdc_mbim: handle unaccelerated VLAN tagged frames Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 67/86] macvlan: Dont propagate IFF_ALLMULTI changes on down interfaces Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 68/86] ip6_tunnel: fix potential NULL pointer dereference Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 69/86] ipv4: initialise the itag variable in __mkroute_input Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 70/86] net-gro: reset skb->truesize in napi_reuse_skb() Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 71/86] net: qmi_wwan: fixup Sierra Wireless MC8305 entry Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 72/86] net: qmi_wwan: add Option GTM681W Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 73/86] net: qmi_wwan: add TP-LINK MA260 Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 74/86] qmi_wwan: add ONDA MT689DC device ID (fwd) Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 75/86] net: qmi_wwan: add Telit LE920 newer firmware support Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 76/86] net: qmi_wwan: fix Cinterion PLXX product ID Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 77/86] net: qmi_wwan: Olivetti Olicard 200 support Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 78/86] net: qmi_wwan: add ZTE MF667 Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 79/86] net: qmi_wwan: add support for Cinterion PXS8 and PHS8 Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 80/86] net: qmi_wwan: add Sierra Wireless EM7355 Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 81/86] net: qmi_wwan: add Sierra Wireless MC73xx Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 82/86] net: qmi_wwan: add Sierra Wireless MC7305/MC7355 Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 83/86] net: qmi_wwan: add Olivetti Olicard 500 Greg Kroah-Hartman
2014-05-29 4:37 ` [PATCH 3.10 84/86] net: qmi_wwan: add Alcatel L800MA Greg Kroah-Hartman
2014-05-29 4:38 ` [PATCH 3.10 85/86] net: qmi_wwan: add a number of CMOTech devices Greg Kroah-Hartman
2014-05-29 4:38 ` [PATCH 3.10 86/86] net: qmi_wwan: add a number of Dell devices Greg Kroah-Hartman
2014-05-29 14:32 ` [PATCH 3.10 00/86] 3.10.41-stable review Guenter Roeck
2014-05-30 19:44 ` Shuah Khan
2014-05-30 23:20 ` Greg Kroah-Hartman
2014-05-30 23:20 ` Greg Kroah-Hartman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140529043520.543255181@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=davem@davemloft.net \
--cc=dingtianhong@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).