From: Jim Meyering <jim@meyering.net>
To: Jeff Garzik <jeff@garzik.org>
Cc: Project Hail <hail-devel@vger.kernel.org>,
Pete Zaitcev <zaitcev@redhat.com>
Subject: Re: [PATCH hail] chunkd: don't leak an FS object iterator
Date: Sun, 03 Oct 2010 09:00:19 +0200 [thread overview]
Message-ID: <87pqvr92ws.fsf@meyering.net> (raw)
In-Reply-To: <4CA4DA7E.3040801@garzik.org> (Jeff Garzik's message of "Thu, 30 Sep 2010 14:44:14 -0400")
Jeff Garzik wrote:
> On 09/29/2010 11:20 AM, Jim Meyering wrote:
>>
>> chk_list_objs called fs_list_objs_open without also calling
>> fs_list_objs_close.
>>
>> 32,808 bytes in 1 blocks are definitely lost in loss record 413 of 419
>> at 0x4A0515D: malloc (vg_replace_malloc.c:195)
>> by 0x31BA8A26D0: __alloc_dir (opendir.c:184)
>> by 0x405619: fs_list_objs_open (be-fs.c:974)
>> by 0x40B202: chk_list_objs (selfcheck.c:41)
>> by 0x40B575: chk_dbscan (selfcheck.c:131)
>> by 0x40B628: chk_thread_scan (selfcheck.c:147)
>> by 0x40B757: chk_thread_command (selfcheck.c:179)
>> by 0x40B890: chk_thread_func (selfcheck.c:219)
>> by 0x31BC464E83: g_thread_create_proxy (gthread.c:1893)
>> by 0x31BB407760: start_thread (pthread_create.c:301)
>> by 0x31BA8E151C: clone (clone.S:115)
>
> After seeing a few valgrind references from you, I'm curious... do you
> by chance happen to have a valgrind suppression file for openssl on
> Fedora?
No, I ignored them. But to create a so-called "suppressions" file,
you can invoke valgrind with --gen-suppressions=all. You select
the ssl-related entries and put them in a file, say F, then whenever
you run valgrind, use --suppressions=F to make it ignore those.
> I've been wanting to run valgrind on chunkd, but each time I attempt
> it, I -- and valgrind -- have been overwhelmed by openssl false
> positives. openssl, deep in its RAND_xxx functions, intentionally does
> crazy stuff like using random, uninitialized stack contents as RNG
> entropy. Cute, but valgrind quite rightly complains loudly about it.
>
> It's a topic I've been meaning to research, because I currently lack
> the valgrind-fu necessary to have an effective valgrind+chunkd
> session.
BTW, Here are a few more that I haven't investigated:
==4506== 1 errors in context 1 of 7:
==4506== Syscall param pwrite64(buf) points to uninitialised byte(s)
==4506== at 0x31BB40EDE3: __pwrite_nocancel (syscall-template.S:82)
==4506== by 0x31BE137AD0: __os_io (os_rw.c:92)
==4506== by 0x31BE125733: __memp_pgwrite (mp_bh.c:394)
==4506== by 0x31BE125954: __memp_bhwrite (mp_bh.c:168)
==4506== by 0x31BE134482: __memp_sync_int (mp_sync.c:530)
==4506== by 0x31BE0CBD66: __db_sync (db_am.c:706)
==4506== by 0x31BE0CA652: __db_refresh (db.c:820)
==4506== by 0x31BE0CA8C0: __db_close (db.c:695)
==4506== by 0x31BE0E64A7: __db_close_pp (db_iface.c:253)
==4506== by 0x403450: cldb_down (cldb.c:414)
==4506== by 0x409A58: main (server.c:1143)
==4506== Address 0x4f005e3 is 4,083 bytes inside a block of size 4,096 alloc'd
==4506== at 0x4A0515D: malloc (vg_replace_malloc.c:195)
==4506== by 0x31BE135237: __os_malloc (os_alloc.c:253)
==4506== by 0x31BE1257FC: __memp_pgwrite (mp_bh.c:385)
==4506== by 0x31BE125954: __memp_bhwrite (mp_bh.c:168)
==4506== by 0x31BE134482: __memp_sync_int (mp_sync.c:530)
==4506== by 0x31BE0CBD66: __db_sync (db_am.c:706)
==4506== by 0x31BE0CA652: __db_refresh (db.c:820)
==4506== by 0x31BE0CA8C0: __db_close (db.c:695)
==4506== by 0x31BE0E64A7: __db_close_pp (db_iface.c:253)
==4506== by 0x403450: cldb_down (cldb.c:414)
==4506== by 0x409A58: main (server.c:1143)
==4506== Uninitialised value was created by a stack allocation
==4506== at 0x404878: cldb_lock_add (cldb.c:967)
==4506==
==4506==
==4506== 1 errors in context 2 of 7:
==4506== Syscall param pwrite64(buf) points to uninitialised byte(s)
==4506== at 0x31BB40EDE3: __pwrite_nocancel (syscall-template.S:82)
==4506== by 0x31BE137AD0: __os_io (os_rw.c:92)
==4506== by 0x31BE1207C4: __log_write (log_put.c:1227)
==4506== by 0x31BE121477: __log_flush_int (log_put.c:1010)
==4506== by 0x31BE122CDC: __log_put (log_put.c:496)
==4506== by 0x31BE146077: __txn_regop_log (txn_auto.c:234)
==4506== by 0x31BE142A32: __txn_commit (txn.c:656)
==4506== by 0x31BE142ABE: __txn_commit_pp (txn.c:517)
==4506== by 0x4073A1: msg_lock (msg.c:1150)
==4506== by 0x407869: udp_rx_handle (server.c:164)
==4506== by 0x407BF3: udp_rx (server.c:265)
==4506== by 0x408A3A: udp_srv_event (server.c:640)
==4506== by 0x409676: main_loop (server.c:1026)
==4506== by 0x409A0E: main (server.c:1135)
==4506== Address 0x52d5380 is not stack'd, malloc'd or (recently) free'd
==4506== Uninitialised value was created by a stack allocation
==4506== at 0x404878: cldb_lock_add (cldb.c:967)
==4506==
==4506==
==4506== 1 errors in context 3 of 7:
==4506== Conditional jump or move depends on uninitialised value(s)
==4506== at 0x31BE121A78: __log_putr (log_put.c:732)
==4506== by 0x31BE1228B8: __log_put (log_put.c:464)
==4506== by 0x31BE064E28: __ham_insdel_log (hash_auto.c:250)
==4506== by 0x31BE06E86F: __ham_add_el (hash_page.c:2197)
==4506== by 0x31BE05E5EC: __hamc_put (hash.c:1089)
==4506== by 0x31BE0D97E5: __dbc_iput (db_cam.c:2103)
==4506== by 0x31BE0DBE0C: __dbc_put (db_cam.c:2016)
==4506== by 0x31BE0CCEA5: __db_put (db_am.c:477)
==4506== by 0x31BE0E3DE2: __db_put_pp (db_iface.c:1579)
==4506== by 0x404A52: cldb_lock_add (cldb.c:1016)
==4506== by 0x40735E: msg_lock (msg.c:1140)
==4506== by 0x407869: udp_rx_handle (server.c:164)
==4506== by 0x407BF3: udp_rx (server.c:265)
==4506== by 0x408A3A: udp_srv_event (server.c:640)
==4506== by 0x409676: main_loop (server.c:1026)
==4506== by 0x409A0E: main (server.c:1135)
==4506== Uninitialised value was created by a stack allocation
==4506== at 0x404878: cldb_lock_add (cldb.c:967)
Then, just for grins, I ran chunkd (via make check)
under valgrind with --gen-suppressions=all, which generated 27000
lines of suppressions, and extracted the unique ones.
Even those could be further consolidated with frame-level "..."
wildcards (see http://valgrind.org/docs/manual/manual-core.html)
but that would take careful manual work.
Here's the result. Obviously, before using these, you'll want
to ensure that each really does represent an ignorable condition.
For the ssl-related signatures, it's pretty easy to assume.
For most of the others, it'll require careful work.
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:malloc
fun:g_malloc
fun:g_strndup
fun:cfg_elm_text
fun:g_markup_parse_context_parse
fun:read_config
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:malloc
fun:cfg_elm_end_listen
fun:cfg_elm_end
fun:g_markup_parse_context_parse
fun:read_config
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:memalign
fun:posix_memalign
fun:slab_allocator_alloc_chunk
fun:g_slice_alloc
fun:g_slist_prepend
fun:g_strsplit
fun:g_get_language_names
fun:g_thread_init_glib
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:memalign
fun:posix_memalign
fun:slab_allocator_alloc_chunk
fun:g_slice_alloc
fun:g_array_sized_new
fun:g_static_private_set
fun:g_get_filename_charsets
fun:_g_convert_thread_init
fun:g_thread_init_glib
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_bin2bn
fun:bnrand
fun:bn_rand_range
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_cmp
fun:bn_rand_range
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_ucmp
fun:BN_mod_inverse
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Value8
fun:bn_mul_mont
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
}
{
<insert_a_suppression_name_here>
Memcheck:Value8
fun:bn_mul_mont
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:calloc
fun:cli_writeq
fun:cli_err
fun:login_user
fun:cli_evt_exec_req
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:malloc
obj:/usr/lib64/libtokyocabinet.so.9.6.0
fun:tchdbget
fun:fs_table_open
fun:volume_open
fun:cli_evt_exec_req
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:malloc
fun:object_del
fun:cli_evt_exec_req
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:calloc
fun:_dl_allocate_tls
fun:pthread_create@@GLIBC_2.2.5
fun:g_thread_create_posix_impl
fun:g_thread_create_full
fun:ncld_sess_open
fun:cldu_set_cldc
fun:cld_begin
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:calloc
fun:_dl_allocate_tls
fun:pthread_create@@GLIBC_2.2.5
fun:g_thread_create_posix_impl
fun:g_thread_create_full
fun:g_thread_pool_start_thread
fun:g_thread_pool_push
fun:object_cp
fun:cli_evt_exec_req
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:calloc
fun:cli_wr_sendfile
fun:object_read_bytes
fun:object_get
fun:cli_evt_exec_req
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:malloc
fun:xdr_string
fun:xdr_cld_pkt_hdr
fun:cldc_receive_pkt
fun:cldc_udp_receive_pkt
fun:ncld_sess_thr
fun:g_thread_create_proxy
fun:start_thread
fun:clone
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:malloc
fun:realloc
fun:g_realloc
fun:g_array_maybe_expand
fun:g_array_sized_new
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:memalign
fun:posix_memalign
fun:slab_allocator_alloc_chunk
fun:g_slice_alloc
fun:g_list_append
fun:fs_list_objs
fun:volume_list
fun:cli_evt_exec_req
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:memalign
fun:posix_memalign
fun:slab_allocator_alloc_chunk
fun:g_slice_alloc
fun:g_string_sized_new
fun:g_markup_escape_text
fun:volume_list
fun:cli_evt_exec_req
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:calloc
fun:cli_writeq
fun:cli_write_list
fun:cli_resp_xml
fun:volume_list
fun:cli_evt_exec_req
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:MOD_EXP_CTIME_COPY_TO_PREBUF
fun:BN_mod_exp_mont_consttime
fun:RSA_eay_mod_exp
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_mod_mul_montgomery
fun:BN_mod_exp_mont_consttime
fun:RSA_eay_mod_exp
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_mod_exp_mont_consttime
fun:RSA_eay_mod_exp
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_ucmp
fun:BN_mod_exp_mont_consttime
fun:RSA_eay_mod_exp
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_div
fun:RSA_eay_mod_exp
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_div
fun:BN_nnmod
fun:BN_mod_mul
fun:BN_BLINDING_convert_ex
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_mul
fun:BN_mod_mul
fun:BN_BLINDING_convert_ex
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:bn_mul_recursive
fun:BN_mul
fun:BN_mod_mul
fun:BN_BLINDING_convert_ex
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:bn_cmp_words
fun:bn_mul_recursive
fun:BN_mul
fun:BN_mod_mul
fun:BN_BLINDING_convert_ex
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_from_montgomery_word
fun:BN_from_montgomery
fun:BN_mod_exp_mont
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Value8
fun:BN_from_montgomery_word
fun:BN_from_montgomery
fun:BN_mod_exp_mont
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_mod_mul_montgomery
fun:BN_mod_exp_mont
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_mod_exp_mont
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_ucmp
fun:BN_mod_exp_mont
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_mod_inverse
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_div
fun:BN_mod_inverse
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_num_bits_word
fun:BN_num_bits
fun:BN_div
fun:BN_mod_inverse
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Value8
fun:bn_add_words
fun:bn_mul_recursive
fun:BN_mul
fun:BN_mod_mul
fun:BN_BLINDING_convert_ex
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Value8
fun:bn_sub_words
fun:bn_mul_recursive
fun:BN_mul
fun:BN_mod_mul
fun:BN_BLINDING_convert_ex
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Value8
fun:BN_num_bits_word
fun:BN_num_bits
fun:BN_div
fun:BN_mod_inverse
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_lshift
fun:BN_div
fun:BN_mod_inverse
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_uadd
fun:BN_add
fun:BN_mod_inverse
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_rshift
fun:BN_div
fun:BN_mod_inverse
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:BN_mul
fun:BN_mod_inverse
fun:BN_BLINDING_create_param
fun:RSA_setup_blinding
fun:rsa_get_blinding
fun:RSA_eay_private_decrypt
fun:ssl3_get_client_key_exchange
fun:ssl3_accept
fun:cli_evt_ssl_accept
fun:tcp_cli_event
fun:main_loop
fun:main
}
next prev parent reply other threads:[~2010-10-03 7:00 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-29 15:20 [PATCH hail] chunkd: don't leak an FS object iterator Jim Meyering
2010-09-30 18:44 ` Jeff Garzik
2010-10-03 7:00 ` Jim Meyering [this message]
2010-09-30 18:52 ` Jeff Garzik
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=87pqvr92ws.fsf@meyering.net \
--to=jim@meyering.net \
--cc=hail-devel@vger.kernel.org \
--cc=jeff@garzik.org \
--cc=zaitcev@redhat.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 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.