All of lore.kernel.org
 help / color / mirror / Atom feed
From: "J. Bruce Fields" <bfields@fieldses.org>
To: Chuck Lever <chuck.lever@oracle.com>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH 015/100] nfsd: Fix handling of negative lengths in read_buf()
Date: Mon, 28 Jan 2008 18:31:44 -0500	[thread overview]
Message-ID: <20080128233144.GV16785@fieldses.org> (raw)
In-Reply-To: <C56728F5-40AC-49F0-B9AD-574FEC4C404C@oracle.com>

On Mon, Jan 28, 2008 at 06:16:14PM -0500, Chuck Lever wrote:
> I haven't checked it carefully enough to say whether there is a run-time 
> problem with the old or the patched version of read_buf().  At this point 
> it's not likely, but there is enough implicit type casting in the 
> comparisons and when passing arguments that the original intention of the 
> authors of this code is not exactly clear.
>
> I do now make it a practice in patch descriptions to state "Clean up:" if 
> the patch does not address a run-time bug.

If it's obvious from the comment that's fine too (just keep in mind I'm
often tired and/or stupid, so our definitions of "obvious" may differ!)
I'm not looking for excuses to ignore them, I just want to understand
whether a patch is supposed to make no change in run-time behavior at
all, or fixes a critical runtime bug, or something in between.

>
>> The change in behavior of these comparisons was exactly the point of
>> the patch:
>>
>> 	"The length "nbytes" passed into read_buf should never be
>> 	negative, but we check only for too-large values of "nbytes",
>> 	not for too-small values.  Make nbytes unsigned, so it's clear
>> 	that the former tests are sufficient."
>>
>> Was my comment there unclear, or am I missing some other problem?
>
>
> In my opinion, introducing a mixed sign comparison makes the tests less 
> clear.  I would fix at least "avail" and perhaps "argp->pagelen", and 
> assert that argp->end > argp->p, to make the tests in read_buf() entirely 
> precise.

OK.  For now I'd like to fix the one obvious thing (fixing "avail") and
leave the rest as is.

--b.

commit c93b00d7b51e2fa6fd00aaa41f49c4abc264c151
Author: J. Bruce Fields <bfields@citi.umich.edu>
Date:   Sun Nov 11 15:43:12 2007 -0500

    nfsd: Fix handling of negative lengths in read_buf()
    
    The length "nbytes" passed into read_buf should never be negative, but
    we check only for too-large values of "nbytes", not for too-small
    values.  Make nbytes unsigned, so it's clear that the former tests are
    sufficient.  (Despite this read_buf() currently correctly returns an xdr
    error in the case of a negative length, thanks to an unsigned
    comparison with size_of() and bounds-checking in kmalloc().  This seems
    very fragile, though.)
    
    Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>

diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 5733394..20a0961 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -148,12 +148,12 @@ xdr_error:					\
 	}					\
 } while (0)
 
-static __be32 *read_buf(struct nfsd4_compoundargs *argp, int nbytes)
+static __be32 *read_buf(struct nfsd4_compoundargs *argp, u32 nbytes)
 {
 	/* We want more bytes than seem to be available.
 	 * Maybe we need a new page, maybe we have just run out
 	 */
-	int avail = (char*)argp->end - (char*)argp->p;
+	unsigned int avail = (char*)argp->end - (char*)argp->p;
 	__be32 *p;
 	if (avail + argp->pagelen < nbytes)
 		return NULL;
@@ -169,6 +169,11 @@ static __be32 *read_buf(struct nfsd4_compoundargs *argp, int nbytes)
 			return NULL;
 		
 	}
+	/*
+	 * The following memcpy is safe because read_buf is always
+	 * called with nbytes > avail, and the two cases above both
+	 * guarantee p points to at least nbytes bytes.
+	 */
 	memcpy(p, argp->p, avail);
 	/* step to next page */
 	argp->p = page_address(argp->pagelist[0]);

  reply	other threads:[~2008-01-28 23:31 UTC|newest]

Thread overview: 163+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-25 23:15 nfs server patches for 2.6.25 J. Bruce Fields
2008-01-25 23:15 ` J. Bruce Fields
2008-01-25 23:15 ` [PATCH 001/100] nfsd4: probe callback channel only once J. Bruce Fields
2008-01-25 23:15   ` [PATCH 002/100] nfsd: move callback rpc_client creation into separate thread J. Bruce Fields
2008-01-25 23:15     ` [PATCH 003/100] Fix incorrect assignment J. Bruce Fields
2008-01-25 23:15       ` [PATCH 004/100] knfsd: fix broken length check in nfs4idmap.c J. Bruce Fields
2008-01-25 23:15         ` [PATCH 005/100] SUNRPC: Prevent length underflow in read_flush() J. Bruce Fields
2008-01-25 23:15           ` [PATCH 006/100] SUNRPC: Use unsigned string lengths in xdr_decode_string_inplace J. Bruce Fields
2008-01-25 23:15             ` [PATCH 007/100] NLM: Fix sign of length of NLM variable length strings J. Bruce Fields
2008-01-25 23:15               ` [PATCH 008/100] NFSD: Use unsigned length argument for decode_filename J. Bruce Fields
2008-01-25 23:15                 ` [PATCH 009/100] NFSD: File name length signage in nfsd request argument structures J. Bruce Fields
2008-01-25 23:15                   ` [PATCH 010/100] NFSD: Adjust filename length argument of nfsd_lookup J. Bruce Fields
2008-01-25 23:15                     ` [PATCH 011/100] NFSD: Use unsigned length argument for decode_pathname J. Bruce Fields
2008-01-25 23:15                       ` [PATCH 012/100] NFSD: Fix mixed sign comparison in nfs3svc_decode_symlinkargs J. Bruce Fields
2008-01-25 23:15                         ` [PATCH 013/100] NFSD: Path name length signage in nfsd request argument structures J. Bruce Fields
2008-01-25 23:15                           ` [PATCH 014/100] knfsd: fix cache.c comment J. Bruce Fields
2008-01-25 23:15                             ` [PATCH 015/100] nfsd: Fix handling of negative lengths in read_buf() J. Bruce Fields
2008-01-25 23:15                               ` [PATCH 016/100] knfsd: cleanup nfsd4 properly on module init failure J. Bruce Fields
2008-01-25 23:15                                 ` [PATCH 017/100] nfsd: cleanup nfsd module initialization cleanup J. Bruce Fields
2008-01-25 23:15                                   ` [PATCH 018/100] nfsd: fail module init on reply cache init failure J. Bruce Fields
2008-01-25 23:15                                     ` [PATCH 019/100] knfsd: cache unregistration needn't return error J. Bruce Fields
2008-01-25 23:16                                       ` [PATCH 020/100] nfsd: select CONFIG_PROC_FS in nfsv4 and gss server cases J. Bruce Fields
2008-01-25 23:16                                         ` [PATCH 021/100] nfsd: fail init on /proc/fs/nfs/exports creation failure J. Bruce Fields
2008-01-25 23:16                                           ` [PATCH 022/100] nfsd: move cache proc (un)registration to separate function J. Bruce Fields
2008-01-25 23:16                                             ` [PATCH 023/100] knfsd: allow cache_register to return error on failure J. Bruce Fields
2008-01-25 23:16                                               ` [PATCH 024/100] nfsd: move nfsd/auth.h into fs/nfsd J. Bruce Fields
2008-01-25 23:16                                                 ` [PATCH 025/100] nfsd: minor fs/nfsd/auth.h cleanup J. Bruce Fields
2008-01-25 23:16                                                   ` [PATCH 026/100] nfsd4: kill some unneeded setclientid comments J. Bruce Fields
2008-01-25 23:16                                                     ` [PATCH 027/100] nfsd: eliminate final bogus case from setclientid logic J. Bruce Fields
2008-01-25 23:16                                                       ` [PATCH 028/100] nfsd: uniquify cl_confirm values J. Bruce Fields
2008-01-25 23:16                                                         ` [PATCH 029/100] nfsd4: kill unnecessary same_name() in setclientid_confirm J. Bruce Fields
2008-01-25 23:16                                                           ` [PATCH 030/100] nfsd4: remove unnecessary cl_verifier check from setclientid_confirm J. Bruce Fields
2008-01-25 23:16                                                             ` [PATCH 031/100] nfsd4: kill unneeded cl_confirm check J. Bruce Fields
2008-01-25 23:16                                                               ` [PATCH 032/100] nfsd: fix encode_entryplus_baggage() indentation J. Bruce Fields
     [not found]                                                                 ` <1201303040-7779-33-git-send-email-bfields@citi.! umich.edu>
     [not found]                                                                 ` <1201303040-7779-33-git-send-email-bfields@citi.!umich.edu>
2008-01-25 23:16                                                                 ` [PATCH 033/100] nfsd4: make current_clientid local J. Bruce Fields
2008-01-25 23:16                                                                   ` [PATCH 034/100] nfsd4: miscellaneous nfs4state.c style fixes J. Bruce Fields
2008-01-25 23:16                                                                     ` [PATCH 035/100] nfsd4: recognize callback channel failure earlier J. Bruce Fields
2008-01-25 23:16                                                                       ` [PATCH 036/100] lockd: fix reference count leaks in async locking case J. Bruce Fields
2008-01-25 23:16                                                                         ` [PATCH 037/100] nfsd4: fix bad seqid on lock request incompatible with open mode J. Bruce Fields
2008-01-25 23:16                                                                           ` [PATCH 038/100] nfsd: Allow AIX client to read dir containing mountpoints J. Bruce Fields
2008-01-25 23:16                                                                             ` [PATCH 039/100] lockd: fix a leak in nlmsvc_testlock asynchronous request handling J. Bruce Fields
2008-01-25 23:16                                                                               ` [PATCH 040/100] nfsd: allow root to set uid and gid on create J. Bruce Fields
2008-01-25 23:16                                                                                 ` [PATCH 041/100] nfsd: fix rsi_cache reference count leak J. Bruce Fields
2008-01-25 23:16                                                                                   ` [PATCH 042/100] knfsd: change mailing list for nfsd in MAINTAINERS J. Bruce Fields
2008-01-25 23:16                                                                                     ` [PATCH 043/100] sunrpc: gss: simplify rsi_parse logic J. Bruce Fields
2008-01-25 23:16                                                                                       ` [PATCH 044/100] nfsd4: clean up access_valid, deny_valid checks J. Bruce Fields
2008-01-25 23:16                                                                                         ` [PATCH 045/100] Leak in nlmsvc_testlock for async GETFL case J. Bruce Fields
2008-01-25 23:16                                                                                           ` [PATCH 046/100] svcrpc: ensure gss DESTROY tokens free contexts from cache J. Bruce Fields
2008-01-25 23:16                                                                                             ` [PATCH 047/100] svc: Add an svc transport class J. Bruce Fields
2008-01-25 23:16                                                                                               ` [PATCH 048/100] svc: Make svc_sock the tcp/udp transport J. Bruce Fields
2008-01-25 23:16                                                                                                 ` [PATCH 049/100] svc: Change the svc_sock in the rqstp structure to a transport J. Bruce Fields
2008-01-25 23:16                                                                                                   ` [PATCH 050/100] svc: Add a max payload value to the transport J. Bruce Fields
2008-01-25 23:16                                                                                                     ` [PATCH 051/100] svc: Move sk_sendto and sk_recvfrom to svc_xprt_class J. Bruce Fields
2008-01-25 23:16                                                                                                       ` [PATCH 052/100] svc: Add transport specific xpo_release function J. Bruce Fields
2008-01-25 23:16                                                                                                         ` [PATCH 053/100] svc: Add per-transport delete functions J. Bruce Fields
2008-01-25 23:16                                                                                                           ` [PATCH 054/100] svc: Add xpo_prep_reply_hdr J. Bruce Fields
2008-01-25 23:16                                                                                                             ` [PATCH 055/100] svc: Add a transport function that checks for write space J. Bruce Fields
2008-01-25 23:16                                                                                                               ` [PATCH 056/100] svc: Move close processing to a single place J. Bruce Fields
2008-01-25 23:16                                                                                                                 ` [PATCH 057/100] svc: Add xpo_accept transport function J. Bruce Fields
2008-01-25 23:16                                                                                                                   ` [PATCH 058/100] svc: Remove unnecessary call to svc_sock_enqueue J. Bruce Fields
2008-01-25 23:16                                                                                                                     ` [PATCH 059/100] svc: Move connection limit checking to its own function J. Bruce Fields
2008-01-25 23:16                                                                                                                       ` [PATCH 060/100] svc: Add a generic transport svc_create_xprt function J. Bruce Fields
2008-01-25 23:16                                                                                                                         ` [PATCH 061/100] svc: Change services to use new svc_create_xprt service J. Bruce Fields
2008-01-25 23:16                                                                                                                           ` [PATCH 062/100] svc: Change sk_inuse to a kref J. Bruce Fields
2008-01-25 23:16                                                                                                                             ` [PATCH 063/100] svc: Move sk_flags to the svc_xprt structure J. Bruce Fields
2008-01-25 23:16                                                                                                                               ` [PATCH 064/100] svc: Move sk_server and sk_pool to svc_xprt J. Bruce Fields
2008-01-25 23:16                                                                                                                                 ` [PATCH 065/100] svc: Make close transport independent J. Bruce Fields
2008-01-25 23:16                                                                                                                                   ` [PATCH 066/100] svc: Move sk_reserved to svc_xprt J. Bruce Fields
2008-01-25 23:16                                                                                                                                     ` [PATCH 067/100] svc: Make the enqueue service transport neutral and export it J. Bruce Fields
2008-01-25 23:16                                                                                                                                       ` [PATCH 068/100] svc: Make svc_send transport neutral J. Bruce Fields
2008-01-25 23:16                                                                                                                                         ` [PATCH 069/100] svc: Change svc_sock_received to svc_xprt_received and export it J. Bruce Fields
2008-01-25 23:16                                                                                                                                           ` [PATCH 070/100] svc: Move accept call to svc_xprt_received to common code J. Bruce Fields
2008-01-25 23:16                                                                                                                                             ` [PATCH 071/100] svc: Remove sk_lastrecv J. Bruce Fields
2008-01-25 23:16                                                                                                                                               ` [PATCH 072/100] svc: Move the authinfo cache to svc_xprt J. Bruce Fields
2008-01-25 23:16                                                                                                                                                 ` [PATCH 073/100] svc: Make deferral processing xprt independent J. Bruce Fields
2008-01-25 23:16                                                                                                                                                   ` [PATCH 074/100] svc: Move the sockaddr information to svc_xprt J. Bruce Fields
2008-01-25 23:16                                                                                                                                                     ` [PATCH 075/100] svc: Make svc_sock_release svc_xprt_release J. Bruce Fields
2008-01-25 23:16                                                                                                                                                       ` [PATCH 076/100] svc: Make svc_recv transport neutral J. Bruce Fields
2008-01-25 23:16                                                                                                                                                         ` [PATCH 077/100] svc: Make svc_age_temp_sockets svc_age_temp_transports J. Bruce Fields
2008-01-25 23:16                                                                                                                                                           ` [PATCH 078/100] svc: Move create logic to common code J. Bruce Fields
2008-01-25 23:16                                                                                                                                                             ` [PATCH 079/100] svc: Removing remaining references to rq_sock in rqstp J. Bruce Fields
2008-01-25 23:17                                                                                                                                                               ` [PATCH 080/100] svc: Make svc_check_conn_limits xprt independent J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                 ` [PATCH 081/100] svc: Move the xprt independent code to the svc_xprt.c file J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                   ` [PATCH 082/100] svc: Add transport hdr size for defer/revisit J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                     ` [PATCH 083/100] svc: Add /proc/sys/sunrpc/transport files J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                       ` [PATCH 084/100] svc: Add svc API that queries for a transport instance J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                         ` [PATCH 085/100] knfsd: Support adding transports by writing portlist file J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                           ` [PATCH 086/100] svc: Add svc_xprt_names service to replace svc_sock_names J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                             ` [PATCH 087/100] rdma: SVCRMDA Header File J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                               ` [PATCH 088/100] rdma: SVCRDMA Transport Module J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                                 ` [PATCH 089/100] rdma: SVCRDMA Core Transport Services J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                                   ` [PATCH 090/100] rdma: SVCRDMA recvfrom J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                                     ` [PATCH 091/100] rdma: SVCRDMA sendto J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                                       ` [PATCH 092/100] rdma: ONCRPC RDMA protocol marshalling J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                                         ` [PATCH 093/100] rdma: makefile J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                                           ` [PATCH 094/100] SUNRPC: spin svc_rqst initialization to its own function J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                                             ` [PATCH 095/100] SUNRPC: export svc_sock_update_bufs J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                                               ` [PATCH 096/100] NLM: Convert lockd to use kthreads J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                                                 ` [PATCH 097/100] NLM: have nlm_shutdown_hosts kill off all NLM RPC tasks J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                                                   ` [PATCH 098/100] knfsd: don't bother mapping putrootfh enoent to eperm J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                                                     ` [PATCH 099/100] lockd: minor log message fix J. Bruce Fields
2008-01-25 23:17                                                                                                                                                                                                       ` [PATCH 100/100] nfsd: more careful input validation in nfsctl write methods J. Bruce Fields
2008-01-25 23:55                                                                                                                                                                                                   ` [PATCH 097/100] NLM: have nlm_shutdown_hosts kill off all NLM RPC tasks Jeff Layton
     [not found]                                                                                                                                                                                                     ` <20080125185548.5363f046-RtJpwOs3+0O+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2008-01-26  0:31                                                                                                                                                                                                       ` J. Bruce Fields
2008-01-26  1:02                                                                                                                                                                                                         ` Jeff Layton
2008-01-26  1:19                                                                                                                                                                                                       ` Trond Myklebust
     [not found]                                                                                                                                                                                                         ` <1201310387.4150.21.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2008-01-28 15:11                                                                                                                                                                                                           ` Jeff Layton
2008-01-28 20:17                                                                               ` [PATCH 039/100] lockd: fix a leak in nlmsvc_testlock asynchronous request handling Chuck Lever
2008-01-28 20:28                                                                                 ` Oleg Drokin
2008-01-28 20:04                                                                             ` [PATCH 038/100] nfsd: Allow AIX client to read dir containing mountpoints Chuck Lever
2008-01-28 20:54                                                                               ` J. Bruce Fields
2008-02-08 20:07                                                                             ` Peter Staubach
2008-02-08 21:03                                                                               ` J. Bruce Fields
2008-02-08 21:25                                                                                 ` Frank Filz
2008-02-08 21:26                                                                                 ` Peter Staubach
2008-02-08 21:46                                                                                   ` J. Bruce Fields
2008-02-11 20:26                                                                                     ` Peter Staubach
2008-01-28 19:46                                                                         ` [PATCH 036/100] lockd: fix reference count leaks in async locking case Chuck Lever
2008-01-28 20:44                                                                           ` J. Bruce Fields
2008-01-28 20:47                                                                             ` Oleg Drokin
     [not found]                                                                               ` <B0E92DA2-92DD-4637-B265-57B0D6D0D761-SOTZviwpzew/JUsKyNonYw@public.gmane.org>
2008-01-28 21:09                                                                                 ` J. Bruce Fields
2008-01-28 19:39                                                                     ` [PATCH 034/100] nfsd4: miscellaneous nfs4state.c style fixes Chuck Lever
2008-01-28 20:24                                                                       ` J. Bruce Fields
2008-01-28 17:24                                                 ` [PATCH 024/100] nfsd: move nfsd/auth.h into fs/nfsd Chuck Lever
2008-01-28 18:13                                                   ` J. Bruce Fields
2008-01-28 19:40                                             ` [PATCH 022/100] nfsd: move cache proc (un)registration to separate function Chuck Lever
2008-01-28 21:31                                               ` J. Bruce Fields
2008-01-28 19:40                                           ` [PATCH 021/100] nfsd: fail init on /proc/fs/nfs/exports creation failure Chuck Lever
2008-01-28 21:20                                             ` J. Bruce Fields
2008-01-28 18:07                                         ` [PATCH 020/100] nfsd: select CONFIG_PROC_FS in nfsv4 and gss server cases Chuck Lever
2008-01-28 18:28                                           ` J. Bruce Fields
2008-01-28 21:12                                             ` Chuck Lever
2008-01-28 21:48                                               ` J. Bruce Fields
2008-02-01 16:40                                                 ` Chuck Lever
2008-02-01 21:01                                                   ` J. Bruce Fields
2008-02-04 21:29                                                 ` Chuck Lever
2008-02-04 22:15                                                   ` J. Bruce Fields
2008-02-04 23:17                                                     ` Chuck Lever
2008-02-04 23:24                                                       ` J. Bruce Fields
2008-01-28 18:03                                     ` [PATCH 018/100] nfsd: fail module init on reply cache init failure Chuck Lever
2008-01-28 18:32                                       ` J. Bruce Fields
2008-01-28 18:00                               ` [PATCH 015/100] nfsd: Fix handling of negative lengths in read_buf() Chuck Lever
2008-01-28 20:15                                 ` J. Bruce Fields
2008-01-28 21:46                                   ` Chuck Lever
2008-01-28 22:14                                     ` J. Bruce Fields
2008-01-28 23:16                                       ` Chuck Lever
2008-01-28 23:31                                         ` J. Bruce Fields [this message]
2008-01-28 17:40       ` [PATCH 003/100] Fix incorrect assignment Chuck Lever
2008-01-28 20:07         ` J. Bruce Fields
2008-01-28 21:22           ` Chuck Lever
2008-01-28 17:35   ` [PATCH 001/100] nfsd4: probe callback channel only once Chuck Lever
2008-01-28 18:48     ` J. Bruce Fields
2008-01-28 21:14       ` Chuck Lever
2008-01-28 21:39         ` J. Bruce Fields
2008-01-28 21:55           ` Chuck Lever
2008-01-26  0:15 ` nfs server patches not in 2.6.25 J. Bruce Fields
2008-01-26  0:15   ` J. Bruce Fields
2008-01-27 20:42 ` nfs server patches for 2.6.25 Simon Holm Thøgersen
2008-01-27 20:42   ` Simon Holm Thøgersen
2008-01-27 22:10   ` J. Bruce Fields
2008-01-27 22:10     ` J. Bruce Fields
2008-01-28  3:15     ` J. Bruce Fields
2008-01-28  3:15       ` J. Bruce Fields

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=20080128233144.GV16785@fieldses.org \
    --to=bfields@fieldses.org \
    --cc=chuck.lever@oracle.com \
    --cc=linux-nfs@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.