public inbox for stable@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev,
	syzbot+d050d437fe47d479d210@syzkaller.appspotmail.com,
	Johannes Berg <johannes.berg@intel.com>,
	Sasha Levin <sashal@kernel.org>
Subject: [PATCH 6.6 037/114] wifi: cfg80211: check A-MSDU format more carefully
Date: Thu, 11 Apr 2024 11:56:04 +0200	[thread overview]
Message-ID: <20240411095418.001969415@linuxfoundation.org> (raw)
In-Reply-To: <20240411095416.853744210@linuxfoundation.org>

6.6-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Johannes Berg <johannes.berg@intel.com>

[ Upstream commit 9ad7974856926129f190ffbe3beea78460b3b7cc ]

If it looks like there's another subframe in the A-MSDU
but the header isn't fully there, we can end up reading
data out of bounds, only to discard later. Make this a
bit more careful and check if the subframe header can
even be present.

Reported-by: syzbot+d050d437fe47d479d210@syzkaller.appspotmail.com
Link: https://msgid.link/20240226203405.a731e2c95e38.I82ce7d8c0cc8970ce29d0a39fdc07f1ffc425be4@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 net/wireless/util.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/net/wireless/util.c b/net/wireless/util.c
index 1783ab9d57a31..9aa7bdce20b26 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -797,15 +797,19 @@ ieee80211_amsdu_subframe_length(void *field, u8 mesh_flags, u8 hdr_type)
 
 bool ieee80211_is_valid_amsdu(struct sk_buff *skb, u8 mesh_hdr)
 {
-	int offset = 0, remaining, subframe_len, padding;
+	int offset = 0, subframe_len, padding;
 
 	for (offset = 0; offset < skb->len; offset += subframe_len + padding) {
+		int remaining = skb->len - offset;
 		struct {
 		    __be16 len;
 		    u8 mesh_flags;
 		} hdr;
 		u16 len;
 
+		if (sizeof(hdr) > remaining)
+			return false;
+
 		if (skb_copy_bits(skb, offset + 2 * ETH_ALEN, &hdr, sizeof(hdr)) < 0)
 			return false;
 
@@ -813,7 +817,6 @@ bool ieee80211_is_valid_amsdu(struct sk_buff *skb, u8 mesh_hdr)
 						      mesh_hdr);
 		subframe_len = sizeof(struct ethhdr) + len;
 		padding = (4 - subframe_len) & 0x3;
-		remaining = skb->len - offset;
 
 		if (subframe_len > remaining)
 			return false;
@@ -831,7 +834,7 @@ void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list,
 {
 	unsigned int hlen = ALIGN(extra_headroom, 4);
 	struct sk_buff *frame = NULL;
-	int offset = 0, remaining;
+	int offset = 0;
 	struct {
 		struct ethhdr eth;
 		uint8_t flags;
@@ -845,10 +848,14 @@ void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list,
 		copy_len = sizeof(hdr);
 
 	while (!last) {
+		int remaining = skb->len - offset;
 		unsigned int subframe_len;
 		int len, mesh_len = 0;
 		u8 padding;
 
+		if (copy_len > remaining)
+			goto purge;
+
 		skb_copy_bits(skb, offset, &hdr, copy_len);
 		if (iftype == NL80211_IFTYPE_MESH_POINT)
 			mesh_len = __ieee80211_get_mesh_hdrlen(hdr.flags);
@@ -858,7 +865,6 @@ void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list,
 		padding = (4 - subframe_len) & 0x3;
 
 		/* the last MSDU has no padding */
-		remaining = skb->len - offset;
 		if (subframe_len > remaining)
 			goto purge;
 		/* mitigate A-MSDU aggregation injection attacks */
-- 
2.43.0




  parent reply	other threads:[~2024-04-11 10:26 UTC|newest]

Thread overview: 126+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-11  9:55 [PATCH 6.6 000/114] 6.6.27-rc1 review Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 001/114] wifi: ath9k: fix LNA selection in ath_ant_try_scan() Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 002/114] wifi: rtw89: fix null pointer access when abort scan Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 003/114] bnx2x: Fix firmware version string character counts Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 004/114] batman-adv: Return directly after a failed batadv_dat_select_candidates() in batadv_dat_forward_data() Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 005/114] batman-adv: Improve exception handling in batadv_throw_uevent() Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 006/114] net: stmmac: dwmac-starfive: Add support for JH7100 SoC Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 007/114] net: phy: phy_device: Prevent nullptr exceptions on ISR Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 008/114] wifi: rtw89: pci: enlarge RX DMA buffer to consider size of RX descriptor Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 009/114] VMCI: Fix memcpy() run-time warning in dg_dispatch_as_host() Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 010/114] wifi: iwlwifi: pcie: Add the PCI device id for new hardware Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 011/114] printk: For @suppress_panic_printk check for other CPU in panic Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 012/114] panic: Flush kernel log buffer at the end Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 013/114] cpuidle: Avoid potential overflow in integer multiplication Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 014/114] ARM: dts: rockchip: fix rk3288 hdmi ports node Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 015/114] ARM: dts: rockchip: fix rk322x " Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 016/114] arm64: dts: rockchip: fix rk3328 " Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 017/114] arm64: dts: rockchip: fix rk3399 " Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 018/114] net: add netdev_lockdep_set_classes() to virtual drivers Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 019/114] pmdomain: ti: Add a null pointer check to the omap_prm_domain_init Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 020/114] pmdomain: imx8mp-blk-ctrl: imx8mp_blk: Add fdcc clock to hdmimix domain Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 021/114] ionic: set adminq irq affinity Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 022/114] net: skbuff: add overflow debug check to pull/push helpers Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 023/114] firmware: tegra: bpmp: Return directly after a failed kzalloc() in get_filename() Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 024/114] wifi: brcmfmac: Add DMI nvram filename quirk for ACEPC W5 Pro Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 025/114] wifi: mt76: mt7915: add locking for accessing mapped registers Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 026/114] wifi: mt76: mt7996: disable AMSDU for non-data frames Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 027/114] wifi: mt76: mt7996: add locking for accessing mapped registers Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 028/114] ACPI: x86: Move acpi_quirk_skip_serdev_enumeration() out of CONFIG_X86_ANDROID_TABLETS Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 029/114] pstore/zone: Add a null pointer check to the psz_kmsg_read Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 030/114] tools/power x86_energy_perf_policy: Fix file leak in get_pkg_num() Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 031/114] net: pcs: xpcs: Return EINVAL in the internal methods Greg Kroah-Hartman
2024-04-11  9:55 ` [PATCH 6.6 032/114] dma-direct: Leak pages on dma_set_decrypted() failure Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 033/114] wifi: ath11k: decrease MHI channel buffer length to 8KB Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 034/114] cpufreq: Dont unregister cpufreq cooling on CPU hotplug Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 035/114] overflow: Allow non-type arg to type_max() and type_min() Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 036/114] wifi: iwlwifi: Add missing MODULE_FIRMWARE() for *.pnvm Greg Kroah-Hartman
2024-04-11  9:56 ` Greg Kroah-Hartman [this message]
2024-04-11  9:56 ` [PATCH 6.6 038/114] btrfs: handle chunk tree lookup error in btrfs_relocate_sys_chunks() Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 039/114] btrfs: export: handle invalid inode or root reference in btrfs_get_parent() Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 040/114] btrfs: send: handle path ref underflow in header iterate_inode_ref() Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 041/114] ice: use relative VSI index for VFs instead of PF VSI number Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 042/114] net/smc: reduce rtnl pressure in smc_pnet_create_pnetids_list() Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 043/114] Bluetooth: btintel: Fix null ptr deref in btintel_read_version Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 044/114] Bluetooth: btmtk: Add MODULE_FIRMWARE() for MT7922 Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 045/114] Bluetooth: Add new quirk for broken read key length on ATS2851 Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 046/114] drm/vc4: dont check if plane->state->fb == state->fb Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 047/114] Input: synaptics-rmi4 - fail probing if memory allocation for "phys" fails Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 048/114] drm: panel-orientation-quirks: Add quirk for GPD Win Mini Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 049/114] ASoC: SOF: amd: Optimize quirk for Valve Galileo Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 050/114] drm/ttm: return ENOSPC from ttm_bo_mem_space v3 Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 051/114] pinctrl: renesas: checker: Limit cfg reg enum checks to provided IDs Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 052/114] sysv: dont call sb_bread() with pointers_lock held Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 053/114] scsi: lpfc: Fix possible memory leak in lpfc_rcv_padisc() Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 054/114] isofs: handle CDs with bad root inode but good Joliet root directory Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 055/114] ASoC: Intel: common: DMI remap for rebranded Intel NUC M15 (LAPRC710) laptops Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 056/114] rcu/nocb: Fix WARN_ON_ONCE() in the rcu_nocb_bypass_lock() Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 057/114] rcu-tasks: Repair RCU Tasks Trace quiescence check Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 058/114] Julia Lawall reported this null pointer dereference, this should fix it Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 059/114] media: sta2x11: fix irq handler cast Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 060/114] ALSA: firewire-lib: handle quirk to calculate payload quadlets as data block counter Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 061/114] ASoC: Intel: avs: Populate board selection with new I2S entries Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 062/114] ext4: add a hint for block bitmap corrupt state in mb_groups Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 063/114] ext4: forbid commit inconsistent quota data when errors=remount-ro Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 064/114] drm/amd/display: Fix nanosec stat overflow Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 065/114] accel/habanalabs: increase HL_MAX_STR to 64 bytes to avoid warnings Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 066/114] i2c: designware: Fix RX FIFO depth define on Wangxun 10Gb NIC Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 067/114] HID: input: avoid polling stylus battery on Chromebook Pompom Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 068/114] drm/amd/amdgpu: Fix potential ioremap() memory leaks in amdgpu_device_init() Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 069/114] drm: Check output polling initialized before disabling Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 070/114] SUNRPC: increase size of rpc_wait_queue.qlen from unsigned short to unsigned int Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 071/114] PCI: Disable D3cold on Asus B1400 PCI-NVMe bridge Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 072/114] Revert "ACPI: PM: Block ASUS B1400CEAE from suspend to idle by default" Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 073/114] libperf evlist: Avoid out-of-bounds access Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 074/114] input/touchscreen: imagis: Correct the maximum touch area value Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 075/114] drivers/perf: hisi: Enable HiSilicon Erratum 162700402 quirk for HIP09 Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 076/114] block: prevent division by zero in blk_rq_stat_sum() Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 077/114] RDMA/cm: add timeout to cm_destroy_id wait Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 078/114] Input: imagis - use FIELD_GET where applicable Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 079/114] Input: allocate keycode for Display refresh rate toggle Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 080/114] platform/x86: touchscreen_dmi: Add an extra entry for a variant of the Chuwi Vi8 tablet Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 081/114] perf/x86/amd/lbr: Discard erroneous branch entries Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 082/114] ALSA: hda/realtek: Add quirk for Lenovo Yoga 9 14IMH9 Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 083/114] ktest: force $buildonly = 1 for make_warnings_file test type Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 084/114] Input: xpad - add support for Snakebyte GAMEPADs Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 085/114] ring-buffer: use READ_ONCE() to read cpu_buffer->commit_page in concurrent environment Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 086/114] tools: iio: replace seekdir() in iio_generic_buffer Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 087/114] bus: mhi: host: Add MHI_PM_SYS_ERR_FAIL state Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 088/114] kernfs: RCU protect kernfs_nodes and avoid kernfs_idr_lock in kernfs_find_and_get_node_by_id() Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 089/114] usb: gadget: uvc: mark incomplete frames with UVC_STREAM_ERR Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 090/114] usb: typec: ucsi: Limit read size on v1.2 Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 091/114] thunderbolt: Keep the domain powered when USB4 port is in redrive mode Greg Kroah-Hartman
2024-04-11  9:56 ` [PATCH 6.6 092/114] usb: typec: tcpci: add generic tcpci fallback compatible Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 093/114] usb: sl811-hcd: only defined function checkdone if QUIRK2 is defined Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 094/114] ASoC: amd: yc: Fix non-functional mic on ASUS M7600RE Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 095/114] thermal/of: Assume polling-delay(-passive) 0 when absent Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 096/114] ASoC: soc-core.c: Skip dummy codec when adding platforms Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 097/114] x86/xen: attempt to inflate the memory balloon on PVH Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 098/114] fbdev: viafb: fix typo in hw_bitblt_1 and hw_bitblt_2 Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 099/114] io_uring: clear opcode specific data for an early failure Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 100/114] modpost: fix null pointer dereference Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 101/114] drivers/nvme: Add quirks for device 126f:2262 Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 102/114] fbmon: prevent division by zero in fb_videomode_from_videomode() Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 103/114] ALSA: hda/realtek: Add quirks for some Clevo laptops Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 104/114] gcc-plugins/stackleak: Avoid .head.text section Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 105/114] selftests: mptcp: display simult in extra_msg Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 106/114] media: mediatek: vcodec: Fix oops when HEVC init fails Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 107/114] media: mediatek: vcodec: adding lock to protect decoder context list Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 108/114] media: mediatek: vcodec: adding lock to protect encoder " Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 109/114] randomize_kstack: Improve entropy diffusion Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 110/114] platform/x86: intel-vbtn: Update tablet mode switch at end of probe Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 111/114] Bluetooth: btintel: Fixe build regression Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 112/114] net: mpls: error out if inner headers are not set Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 113/114] VMCI: Fix possible memcpy() run-time warning in vmci_datagram_invoke_guest_handler() Greg Kroah-Hartman
2024-04-11  9:57 ` [PATCH 6.6 114/114] Revert "drm/amd/amdgpu: Fix potential ioremap() memory leaks in amdgpu_device_init()" Greg Kroah-Hartman
2024-04-11 18:02 ` [PATCH 6.6 000/114] 6.6.27-rc1 review SeongJae Park
2024-04-11 21:47 ` Florian Fainelli
2024-04-11 23:39 ` Shuah Khan
2024-04-12  6:46 ` Shreeya Patel
2024-04-12  6:48 ` Shreeya Patel
2024-04-12  7:22 ` Ron Economos
2024-04-12  9:40 ` Jon Hunter
2024-04-12 10:04 ` Harshit Mogalapalli
2024-04-12 11:50 ` Takeshi Ogasawara
2024-04-12 14:34 ` Naresh Kamboju
2024-04-12 22:24 ` Kelsey Steele

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=20240411095418.001969415@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=johannes.berg@intel.com \
    --cc=patches@lists.linux.dev \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=syzbot+d050d437fe47d479d210@syzkaller.appspotmail.com \
    /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