All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Jianlin Shi <jishi@redhat.com>,
	Stefano Brivio <sbrivio@redhat.com>,
	Eric Dumazet <edumazet@google.com>,
	Lorenzo Bianconi <lorenzo.bianconi@redhat.com>,
	"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 3.18 24/93] ipv6: fix access to non-linear packet in ndisc_fill_redirect_hdr_option()
Date: Fri,  6 Apr 2018 15:22:53 +0200	[thread overview]
Message-ID: <20180406084226.013323236@linuxfoundation.org> (raw)
In-Reply-To: <20180406084224.918716300@linuxfoundation.org>

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

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

From: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>


[ Upstream commit 9f62c15f28b0d1d746734666d88a79f08ba1e43e ]

Fix the following slab-out-of-bounds kasan report in
ndisc_fill_redirect_hdr_option when the incoming ipv6 packet is not
linear and the accessed data are not in the linear data region of orig_skb.

[ 1503.122508] ==================================================================
[ 1503.122832] BUG: KASAN: slab-out-of-bounds in ndisc_send_redirect+0x94e/0x990
[ 1503.123036] Read of size 1184 at addr ffff8800298ab6b0 by task netperf/1932

[ 1503.123220] CPU: 0 PID: 1932 Comm: netperf Not tainted 4.16.0-rc2+ #124
[ 1503.123347] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.10.2-2.fc27 04/01/2014
[ 1503.123527] Call Trace:
[ 1503.123579]  <IRQ>
[ 1503.123638]  print_address_description+0x6e/0x280
[ 1503.123849]  kasan_report+0x233/0x350
[ 1503.123946]  memcpy+0x1f/0x50
[ 1503.124037]  ndisc_send_redirect+0x94e/0x990
[ 1503.125150]  ip6_forward+0x1242/0x13b0
[...]
[ 1503.153890] Allocated by task 1932:
[ 1503.153982]  kasan_kmalloc+0x9f/0xd0
[ 1503.154074]  __kmalloc_track_caller+0xb5/0x160
[ 1503.154198]  __kmalloc_reserve.isra.41+0x24/0x70
[ 1503.154324]  __alloc_skb+0x130/0x3e0
[ 1503.154415]  sctp_packet_transmit+0x21a/0x1810
[ 1503.154533]  sctp_outq_flush+0xc14/0x1db0
[ 1503.154624]  sctp_do_sm+0x34e/0x2740
[ 1503.154715]  sctp_primitive_SEND+0x57/0x70
[ 1503.154807]  sctp_sendmsg+0xaa6/0x1b10
[ 1503.154897]  sock_sendmsg+0x68/0x80
[ 1503.154987]  ___sys_sendmsg+0x431/0x4b0
[ 1503.155078]  __sys_sendmsg+0xa4/0x130
[ 1503.155168]  do_syscall_64+0x171/0x3f0
[ 1503.155259]  entry_SYSCALL_64_after_hwframe+0x42/0xb7

[ 1503.155436] Freed by task 1932:
[ 1503.155527]  __kasan_slab_free+0x134/0x180
[ 1503.155618]  kfree+0xbc/0x180
[ 1503.155709]  skb_release_data+0x27f/0x2c0
[ 1503.155800]  consume_skb+0x94/0xe0
[ 1503.155889]  sctp_chunk_put+0x1aa/0x1f0
[ 1503.155979]  sctp_inq_pop+0x2f8/0x6e0
[ 1503.156070]  sctp_assoc_bh_rcv+0x6a/0x230
[ 1503.156164]  sctp_inq_push+0x117/0x150
[ 1503.156255]  sctp_backlog_rcv+0xdf/0x4a0
[ 1503.156346]  __release_sock+0x142/0x250
[ 1503.156436]  release_sock+0x80/0x180
[ 1503.156526]  sctp_sendmsg+0xbb0/0x1b10
[ 1503.156617]  sock_sendmsg+0x68/0x80
[ 1503.156708]  ___sys_sendmsg+0x431/0x4b0
[ 1503.156799]  __sys_sendmsg+0xa4/0x130
[ 1503.156889]  do_syscall_64+0x171/0x3f0
[ 1503.156980]  entry_SYSCALL_64_after_hwframe+0x42/0xb7

[ 1503.157158] The buggy address belongs to the object at ffff8800298ab600
                which belongs to the cache kmalloc-1024 of size 1024
[ 1503.157444] The buggy address is located 176 bytes inside of
                1024-byte region [ffff8800298ab600, ffff8800298aba00)
[ 1503.157702] The buggy address belongs to the page:
[ 1503.157820] page:ffffea0000a62a00 count:1 mapcount:0 mapping:0000000000000000 index:0x0 compound_mapcount: 0
[ 1503.158053] flags: 0x4000000000008100(slab|head)
[ 1503.158171] raw: 4000000000008100 0000000000000000 0000000000000000 00000001800e000e
[ 1503.158350] raw: dead000000000100 dead000000000200 ffff880036002600 0000000000000000
[ 1503.158523] page dumped because: kasan: bad access detected

[ 1503.158698] Memory state around the buggy address:
[ 1503.158816]  ffff8800298ab900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 1503.158988]  ffff8800298ab980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 1503.159165] >ffff8800298aba00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[ 1503.159338]                    ^
[ 1503.159436]  ffff8800298aba80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[ 1503.159610]  ffff8800298abb00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[ 1503.159785] ==================================================================
[ 1503.159964] Disabling lock debugging due to kernel taint

The test scenario to trigger the issue consists of 4 devices:
- H0: data sender, connected to LAN0
- H1: data receiver, connected to LAN1
- GW0 and GW1: routers between LAN0 and LAN1. Both of them have an
  ethernet connection on LAN0 and LAN1
On H{0,1} set GW0 as default gateway while on GW0 set GW1 as next hop for
data from LAN0 to LAN1.
Moreover create an ip6ip6 tunnel between H0 and H1 and send 3 concurrent
data streams (TCP/UDP/SCTP) from H0 to H1 through ip6ip6 tunnel (send
buffer size is set to 16K). While data streams are active flush the route
cache on HA multiple times.
I have not been able to identify a given commit that introduced the issue
since, using the reproducer described above, the kasan report has been
triggered from 4.14 and I have not gone back further.

Reported-by: Jianlin Shi <jishi@redhat.com>
Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 net/ipv6/ndisc.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -1443,7 +1443,8 @@ static void ndisc_fill_redirect_hdr_opti
 	*(opt++) = (rd_len >> 3);
 	opt += 6;
 
-	memcpy(opt, ipv6_hdr(orig_skb), rd_len - 8);
+	skb_copy_bits(orig_skb, skb_network_offset(orig_skb), opt,
+		      rd_len - 8);
 }
 
 void ndisc_send_redirect(struct sk_buff *skb, const struct in6_addr *target)

  parent reply	other threads:[~2018-04-06 13:25 UTC|newest]

Thread overview: 102+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-06 13:22 [PATCH 3.18 00/93] 3.18.103-stable review Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 01/93] ALSA: usb-audio: Fix parsing descriptor of UAC2 processing unit Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 02/93] ALSA: aloop: Sync stale timer before release Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 03/93] ALSA: aloop: Fix access to not-yet-ready substream via cable Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 04/93] libata: fix length validation of ATAPI-relayed SCSI commands Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 05/93] libata: remove WARN() for DMA or PIO command without data Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 06/93] libata: Apply NOLPM quirk to Crucial MX100 512GB SSDs Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 07/93] libata: disable LPM for Crucial BX100 SSD 500GB drive Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 08/93] libata: Enable queued TRIM for Samsung SSD 860 Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 09/93] libata: Apply NOLPM quirk to Crucial M500 480 and 960GB SSDs Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 10/93] libata: Make Crucial BX100 500GB LPM quirk apply to all firmware versions Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 11/93] libata: Modify quirks for MX100 to limit NCQ_TRIM quirk to MU01 version Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 12/93] drm: udl: Properly check framebuffer mmap offsets Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 13/93] brcmfmac: fix P2P_DEVICE ethernet address generation Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 14/93] tracing: probeevent: Fix to support minus offset from symbol Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 15/93] staging: ncpfs: memory corruption in ncp_read_kernel() Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 16/93] can: cc770: Fix stalls on rt-linux, remove redundant IRQ ack Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 17/93] can: cc770: Fix queue stall & dropped RTR reply Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 18/93] can: cc770: Fix use after free in cc770_tx_interrupt() Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 19/93] tty: vt: fix up tabstops properly Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 20/93] kvm/x86: fix icebp instruction handling Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 21/93] scsi: sg: dont return bogus Sg_requests Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 22/93] [PATCH] Revert "genirq: Use irqd_get_trigger_type to compare the trigger type for shared IRQs" Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 23/93] dccp: check sk for closed state in dccp_sendmsg() Greg Kroah-Hartman
2018-04-06 13:22 ` Greg Kroah-Hartman [this message]
2018-04-06 13:22 ` [PATCH 3.18 25/93] l2tp: do not accept arbitrary sockets Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 26/93] net: ethernet: arc: Fix a potential memory leak if an optional regulator is deferred Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 27/93] net/iucv: Free memory obtained by kzalloc Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 28/93] netlink: avoid a double skb free in genlmsg_mcast() Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 29/93] net: Only honor ifindex in IP_PKTINFO if non-0 Greg Kroah-Hartman
2018-04-06 13:22 ` [PATCH 3.18 30/93] skbuff: Fix not waking applications when errors are enqueued Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 31/93] team: Fix double free in error path Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 32/93] s390/qeth: free netdevice when removing a card Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 33/93] s390/qeth: when thread completes, wake up all waiters Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 34/93] s390/qeth: lock read device while queueing next buffer Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 35/93] s390/qeth: on channel error, reject further cmd requests Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 36/93] net: fec: Fix unbalanced PM runtime calls Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 37/93] mtd: jedec_probe: Fix crash in jedec_read_mfr() Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 38/93] ALSA: pcm: Use dma_bytes as size parameter in dma_mmap_coherent() Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 39/93] ALSA: pcm: potential uninitialized return values Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 40/93] perf/hwbp: Simplify the perf-hwbp code, fix documentation Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 41/93] partitions/msdos: Unable to mount UFS 44bsd partitions Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 42/93] usb: gadget: define free_ep_req as universal function Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 43/93] usb: gadget: change len to size_t on alloc_ep_req() Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 44/93] usb: gadget: fix usb_ep_align_maybe endianness and new usb_ep_align Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 45/93] usb: gadget: align buffer size when allocating for OUT endpoint Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 46/93] usb: gadget: f_hid: fix: Prevent accessing released memory Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 47/93] Revert "led: core: Fix brightness setting when setting delay_off=0" Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 48/93] xhci: Fix ring leak in failure path of xhci_alloc_virt_device() Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 49/93] kprobes/x86: Fix to set RWX bits correctly before releasing trampoline Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 50/93] xfrm_user: uncoditionally validate esn replay attribute struct Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 51/93] net: xfrm: use preempt-safe this_cpu_read() in ipcomp_alloc_tfms() Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 52/93] xfrm: Refuse to insert 32 bit userspace socket policies on 64 bit systems Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 53/93] netfilter: bridge: ebt_among: add more missing match size checks Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 54/93] netfilter: x_tables: add and use xt_check_proc_name Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 55/93] Bluetooth: Fix missing encryption refresh on Security Request Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 56/93] scsi: virtio_scsi: always read VPD pages for multiqueue too Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 57/93] media: v4l2-ioctl.c: dont copy back the result for -ENOTTY Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 58/93] [media] vb2: V4L2_BUF_FLAG_DONE is set after DQBUF Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 59/93] media: v4l2-compat-ioctl32.c: add missing VIDIOC_PREPARE_BUF Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 60/93] media: v4l2-compat-ioctl32.c: fix the indentation Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 61/93] media: v4l2-compat-ioctl32.c: move helper functions to __get/put_v4l2_format32 Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 62/93] media: v4l2-compat-ioctl32.c: avoid sizeof(type) Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 63/93] media: v4l2-compat-ioctl32.c: copy m.userptr in put_v4l2_plane32 Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 64/93] media: v4l2-compat-ioctl32.c: fix ctrl_is_pointer Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 65/93] media: v4l2-compat-ioctl32.c: make ctrl_is_pointer work for subdevs Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 66/93] media: v4l2-compat-ioctl32: Copy v4l2_window->global_alpha Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 67/93] media: v4l2-compat-ioctl32.c: copy clip list in put_v4l2_window32 Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 68/93] media: v4l2-compat-ioctl32.c: drop pr_info for unknown buffer type Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 69/93] media: v4l2-compat-ioctl32.c: dont copy back the result for certain errors Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 70/93] media: v4l2-compat-ioctl32.c: refactor compat ioctl32 logic Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 71/93] media: v4l2-ctrls: fix sparse warning Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 72/93] media: media/v4l2-ctrls: volatiles should not generate CH_VALUE Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 73/93] media: v4l2-compat-ioctl32: use compat_u64 for video standard Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 74/93] media: v4l2-compat-ioctl32: initialize a reserved field Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 75/93] USB: serial: ftdi_sio: add RT Systems VX-8 cable Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 76/93] USB: serial: ftdi_sio: add support for Harman FirmwareHubEmulator Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 77/93] USB: serial: cp210x: add ELDAT Easywave RX09 id Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 78/93] mei: remove dev_err message on an unsupported ioctl Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 79/93] media: usbtv: prevent double free in error case Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 80/93] parport_pc: Add support for WCH CH382L PCI-E single parallel port card Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 81/93] crypto: ahash - Fix early termination in hash walk Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 82/93] crypto: x86/cast5-avx - fix ECB encryption when long sg follows short one Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 83/93] proc: revert /proc/<pid>/maps [stack:TID] annotation Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 84/93] fs/proc: Stop trying to report thread stacks Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 85/93] Input: i8042 - add Lenovo ThinkPad L460 to i8042 reset list Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 86/93] Input: i8042 - enable MUX on Sony VAIO VGN-CS series to fix touchpad Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 87/93] vt: change SGR 21 to follow the standards Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 88/93] Documentation: pinctrl: palmas: Add ti,palmas-powerhold-override property definition Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 89/93] ARM: dts: dra7: Add power hold and power controller properties to palmas Greg Kroah-Hartman
2018-04-06 13:23 ` [PATCH 3.18 90/93] md/raid10: reset the first at the end of loop Greg Kroah-Hartman
2018-04-06 13:24 ` [PATCH 3.18 91/93] Revert "PCI/MSI: Stop disabling MSI/MSI-X in pci_device_shutdown()" Greg Kroah-Hartman
2018-04-06 13:24 ` [PATCH 3.18 92/93] Revert "ARM: dts: omap3-n900: Fix the audio CODECs reset pin" Greg Kroah-Hartman
2018-04-06 13:24 ` [PATCH 3.18 93/93] Revert "ARM: dts: am335x-pepper: " Greg Kroah-Hartman
2018-04-06 17:22 ` [PATCH 3.18 00/93] 3.18.103-stable review kernelci.org bot
2018-04-06 19:11 ` Harsh Shandilya
2018-04-07  6:10   ` Greg Kroah-Hartman
2018-04-06 22:21 ` Shuah Khan
2018-04-08 14:07 ` Guenter Roeck
2018-04-08 15:13   ` Greg Kroah-Hartman
2018-04-08 20:26     ` Greg Kroah-Hartman
2018-04-09  8:13       ` 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=20180406084226.013323236@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=jishi@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lorenzo.bianconi@redhat.com \
    --cc=sbrivio@redhat.com \
    --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 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.