linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>,
	Balakrishna Godavarthi <bgodavar@codeaurora.org>,
	Manish Mandlik <mmandlik@chromium.org>,
	Marcel Holtmann <marcel@holtmann.org>,
	Sasha Levin <sashal@kernel.org>,
	linux-bluetooth@vger.kernel.org, netdev@vger.kernel.org
Subject: [PATCH AUTOSEL 5.9 072/111] Bluetooth: Only mark socket zapped after unlocking
Date: Sun, 18 Oct 2020 15:17:28 -0400	[thread overview]
Message-ID: <20201018191807.4052726-72-sashal@kernel.org> (raw)
In-Reply-To: <20201018191807.4052726-1-sashal@kernel.org>

From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>

[ Upstream commit 20ae4089d0afeb24e9ceb026b996bfa55c983cc2 ]

Since l2cap_sock_teardown_cb doesn't acquire the channel lock before
setting the socket as zapped, it could potentially race with
l2cap_sock_release which frees the socket. Thus, wait until the cleanup
is complete before marking the socket as zapped.

This race was reproduced on a JBL GO speaker after the remote device
rejected L2CAP connection due to resource unavailability.

Here is a dmesg log with debug logs from a repro of this bug:
[ 3465.424086] Bluetooth: hci_core.c:hci_acldata_packet() hci0 len 16 handle 0x0003 flags 0x0002
[ 3465.424090] Bluetooth: hci_conn.c:hci_conn_enter_active_mode() hcon 00000000cfedd07d mode 0
[ 3465.424094] Bluetooth: l2cap_core.c:l2cap_recv_acldata() conn 000000007eae8952 len 16 flags 0x2
[ 3465.424098] Bluetooth: l2cap_core.c:l2cap_recv_frame() len 12, cid 0x0001
[ 3465.424102] Bluetooth: l2cap_core.c:l2cap_raw_recv() conn 000000007eae8952
[ 3465.424175] Bluetooth: l2cap_core.c:l2cap_sig_channel() code 0x03 len 8 id 0x0c
[ 3465.424180] Bluetooth: l2cap_core.c:l2cap_connect_create_rsp() dcid 0x0045 scid 0x0000 result 0x02 status 0x00
[ 3465.424189] Bluetooth: l2cap_core.c:l2cap_chan_put() chan 000000006acf9bff orig refcnt 4
[ 3465.424196] Bluetooth: l2cap_core.c:l2cap_chan_del() chan 000000006acf9bff, conn 000000007eae8952, err 111, state BT_CONNECT
[ 3465.424203] Bluetooth: l2cap_sock.c:l2cap_sock_teardown_cb() chan 000000006acf9bff state BT_CONNECT
[ 3465.424221] Bluetooth: l2cap_core.c:l2cap_chan_put() chan 000000006acf9bff orig refcnt 3
[ 3465.424226] Bluetooth: hci_core.h:hci_conn_drop() hcon 00000000cfedd07d orig refcnt 6
[ 3465.424234] BUG: spinlock bad magic on CPU#2, kworker/u17:0/159
[ 3465.425626] Bluetooth: hci_sock.c:hci_sock_sendmsg() sock 000000002bb0cb64 sk 00000000a7964053
[ 3465.430330]  lock: 0xffffff804410aac0, .magic: 00000000, .owner: <none>/-1, .owner_cpu: 0
[ 3465.430332] Causing a watchdog bite!

Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Reported-by: Balakrishna Godavarthi <bgodavar@codeaurora.org>
Reviewed-by: Manish Mandlik <mmandlik@chromium.org>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 net/bluetooth/l2cap_sock.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
index e1a3e66b17540..e7cfe28140c39 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -1521,8 +1521,6 @@ static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err)
 
 	parent = bt_sk(sk)->parent;
 
-	sock_set_flag(sk, SOCK_ZAPPED);
-
 	switch (chan->state) {
 	case BT_OPEN:
 	case BT_BOUND:
@@ -1549,8 +1547,11 @@ static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err)
 
 		break;
 	}
-
 	release_sock(sk);
+
+	/* Only zap after cleanup to avoid use after free race */
+	sock_set_flag(sk, SOCK_ZAPPED);
+
 }
 
 static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state,
-- 
2.25.1


  parent reply	other threads:[~2020-10-18 19:19 UTC|newest]

Thread overview: 126+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-18 19:16 [PATCH AUTOSEL 5.9 001/111] md/bitmap: fix memory leak of temporary bitmap Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 002/111] block: ratelimit handle_bad_sector() message Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 003/111] x86/dumpstack: Fix misleading instruction pointer error message Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 004/111] crypto: ccp - fix error handling Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 005/111] x86/asm: Replace __force_order with a memory clobber Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 006/111] x86/mce: Add Skylake quirk for patrol scrub reported errors Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 007/111] media: firewire: fix memory leak Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 008/111] media: ati_remote: sanity check for both endpoints Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 009/111] media: st-delta: Fix reference count leak in delta_run_work Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 010/111] media: sti: Fix reference count leaks Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 011/111] media: exynos4-is: Fix several reference count leaks due to pm_runtime_get_sync Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 012/111] media: exynos4-is: Fix a reference count leak " Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 013/111] media: exynos4-is: Fix a reference count leak Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 014/111] media: vsp1: Fix runtime PM imbalance on error Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 015/111] media: platform: s3c-camif: " Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 016/111] media: platform: sti: hva: " Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 017/111] media: bdisp: " Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 018/111] media: media/pci: prevent memory leak in bttv_probe Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 019/111] x86/mce: Annotate mce_rd/wrmsrl() with noinstr Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 020/111] crypto: hisilicon - fixed memory allocation error Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 021/111] spi: fsi: Fix clock running too fast Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 022/111] blk-mq: always allow reserved allocation in hctx_may_queue Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 023/111] x86/mce: Make mce_rdmsrl() panic on an inaccessible MSR Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 024/111] media: rcar_drif: Fix fwnode reference leak when parsing DT Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 025/111] media: uvcvideo: Ensure all probed info is returned to v4l2 Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 026/111] seccomp: kill process instead of thread for unknown actions Sasha Levin
2020-10-19 23:28   ` Kees Cook
2020-10-19 23:33     ` Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 027/111] mmc: sdio: Check for CISTPL_VERS_1 buffer size Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 028/111] media: saa7134: avoid a shift overflow Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 029/111] media: atomisp: fix memleak in ia_css_stream_create Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 030/111] media: venus: fixes for list corruption Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 031/111] notifier: Fix broken error handling pattern Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 032/111] fs: dlm: fix configfs memory leak Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 033/111] media: venus: core: Fix error handling in probe Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 034/111] media: venus: core: Fix runtime PM imbalance in venus_probe Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 035/111] ipv6/icmp: l3mdev: Perform icmp error route lookup on source device routing table (v2) Sasha Levin
2020-10-18 19:40   ` Jakub Kicinski
2020-10-19  1:40     ` David Ahern
2020-10-19 11:52       ` Sasha Levin
2020-10-19 15:33         ` Jakub Kicinski
2020-10-19 15:50           ` Sasha Levin
2020-10-19 13:19       ` Mathieu Desnoyers
2020-10-19 15:51         ` Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 036/111] ntfs: add check for mft record size in superblock Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 037/111] ip_gre: set dev->hard_header_len and dev->needed_headroom properly Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 038/111] mac80211: handle lack of sband->bitrates in rates Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 039/111] staging: wfx: fix handling of MMIC error Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 040/111] libbpf: Close map fd if init map slots failed Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 041/111] bpf: Use raw_spin_trylock() for pcpu_freelist_push/pop in NMI Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 042/111] PM: hibernate: remove the bogus call to get_gendisk() in software_resume() Sasha Levin
2020-10-18 19:16 ` [PATCH AUTOSEL 5.9 043/111] scsi: mvumi: Fix error return in mvumi_io_attach() Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 044/111] scsi: target: core: Add CONTROL field for trace events Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 045/111] mic: vop: copy data to kernel space then write to io memory Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 046/111] misc: vop: add round_up(x,4) for vring_size to avoid kernel panic Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 047/111] usb: dwc3: Add splitdisable quirk for Hisilicon Kirin Soc Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 048/111] usb: gadget: function: printer: fix use-after-free in __lock_acquire Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 049/111] rtw88: pci: Power cycle device during shutdown Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 050/111] udf: Limit sparing table size Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 051/111] udf: Avoid accessing uninitialized data on failed inode read Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 052/111] rtw88: increse the size of rx buffer size Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 053/111] selftests/bpf: Fix overflow tests to reflect iter size increase Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 054/111] USB: cdc-acm: handle broken union descriptors Sasha Levin
2020-10-19  7:02   ` Johan Hovold
2020-10-19  7:10     ` Johan Hovold
2020-10-19 12:44       ` Konstantin Ryabitsev
2020-10-19  7:13     ` Greg Kroah-Hartman
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 055/111] mt76: mt7915: do not do any work in napi poll after calling napi_complete_done() Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 056/111] usb: dwc3: simple: add support for Hikey 970 Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 057/111] habanalabs: cast to u64 before shift > 31 bits Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 058/111] can: flexcan: flexcan_chip_stop(): add error handling and propagate error value Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 059/111] HID: multitouch: Lenovo X1 Tablet Gen3 trackpoint and buttons Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 060/111] ath9k: hif_usb: fix race condition between usb_get_urb() and usb_kill_anchored_urbs() Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 061/111] drm/panfrost: add Amlogic GPU integration quirks Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 062/111] drm/panfrost: add amlogic reset quirk callback Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 063/111] drm/panfrost: add support for vendor quirk Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 064/111] bpf: Limit caller's stack depth 256 for subprogs with tailcalls Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 065/111] dma-direct: Fix potential NULL pointer dereference Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 066/111] misc: rtsx: Fix memory leak in rtsx_pci_probe Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 067/111] reiserfs: only call unlock_new_inode() if I_NEW Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 068/111] opp: Prevent memory leak in dev_pm_opp_attach_genpd() Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 069/111] xfs: make sure the rt allocator doesn't run off the end Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 070/111] usb: ohci: Default to per-port over-current protection Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 071/111] drm: fix double free for gbo in drm_gem_vram_init and drm_gem_vram_create Sasha Levin
2020-10-18 19:17 ` Sasha Levin [this message]
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 073/111] drm/msm/a6xx: fix a potential overflow issue Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 074/111] drm/xlnx: Use devm_drm_dev_alloc Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 075/111] iomap: fix WARN_ON_ONCE() from unprivileged users Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 076/111] scsi: ibmvfc: Fix error return in ibmvfc_probe() Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 077/111] scsi: qla2xxx: Warn if done() or free() are called on an already freed srb Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 078/111] selftests/bpf: Fix test_sysctl_loop{1, 2} failure due to clang change Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 079/111] soundwire: cadence: fix race condition between suspend and Slave device alerts Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 080/111] brcmsmac: fix memory leak in wlc_phy_attach_lcnphy Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 081/111] rtl8xxxu: prevent potential memory leak Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 082/111] Fix use after free in get_capset_info callback Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 083/111] HID: ite: Add USB id match for Acer One S1003 keyboard dock Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 084/111] scsi: qedf: Return SUCCESS if stale rport is encountered Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 085/111] scsi: qedi: Mark all connections for recovery on link down event Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 086/111] scsi: qedi: Protect active command list to avoid list corruption Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 087/111] scsi: qedi: Fix list_del corruption while removing active I/O Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 088/111] fbmem: add margin check to fb_check_caps() Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 089/111] tty: ipwireless: fix error handling Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 090/111] drm/amd/display: Fix a list corruption Sasha Levin
2020-10-19 12:40   ` Alex Deucher
2020-10-25 23:48     ` Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 091/111] Bluetooth: btusb: Fix memleak in btusb_mtk_submit_wmt_recv_urb Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 092/111] ipvs: Fix uninit-value in do_ip_vs_set_ctl() Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 093/111] reiserfs: Fix memory leak in reiserfs_parse_options() Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 094/111] s390/qeth: strictly order bridge address events Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 095/111] mwifiex: don't call del_timer_sync() on uninitialized timer Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 096/111] ALSA: hda/ca0132 - Add AE-7 microphone selection commands Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 097/111] ALSA: hda/ca0132 - Add new quirk ID for SoundBlaster AE-7 Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 098/111] ASoC: SOF: Add topology filename override based on dmi data match Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 099/111] ASoC: Intel: sof_rt5682: override quirk data for tgl_max98373_rt5682 Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 100/111] scsi: smartpqi: Avoid crashing kernel for controller issues Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 101/111] brcm80211: fix possible memleak in brcmf_proto_msgbuf_attach Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 102/111] usb: core: Solve race condition in anchor cleanup functions Sasha Levin
2020-10-18 19:17 ` [PATCH AUTOSEL 5.9 103/111] soundwire: intel: reinitialize IP+DSP in .prepare(), but only when resuming Sasha Levin
2020-10-18 19:18 ` [PATCH AUTOSEL 5.9 104/111] scsi: ufs: ufs-qcom: Fix race conditions caused by ufs_qcom_testbus_config() Sasha Levin
2020-10-18 19:18 ` [PATCH AUTOSEL 5.9 105/111] drm/amd/display: Screen corruption on dual displays (DP+USB-C) Sasha Levin
2020-10-18 19:18 ` [PATCH AUTOSEL 5.9 106/111] dmaengine: dw: Add DMA-channels mask cell support Sasha Levin
2020-10-18 19:18 ` [PATCH AUTOSEL 5.9 107/111] dmaengine: dw: Activate FIFO-mode for memory peripherals only Sasha Levin
2020-10-18 19:18 ` [PATCH AUTOSEL 5.9 108/111] drm/hisilicon: Code refactoring for hibmc_drv_de Sasha Levin
2020-10-18 19:18 ` [PATCH AUTOSEL 5.9 109/111] drm/amd/display: Disconnect pipe separetely when disable pipe split Sasha Levin
2020-10-18 19:18 ` [PATCH AUTOSEL 5.9 110/111] drm/panfrost: perfcnt: fix ref count leak in panfrost_perfcnt_enable_locked Sasha Levin
2020-10-18 19:18 ` [PATCH AUTOSEL 5.9 111/111] ath10k: check idx validity in __ath10k_htt_rx_ring_fill_n() Sasha Levin

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=20201018191807.4052726-72-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=abhishekpandit@chromium.org \
    --cc=bgodavar@codeaurora.org \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcel@holtmann.org \
    --cc=mmandlik@chromium.org \
    --cc=netdev@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).