From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: stable-review@kernel.org, torvalds@linux-foundation.org,
akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
"H. Peter Anvin" <hpa@linux.intel.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Chris Metcalf <cmetcalf@tilera.com>,
"David S. Miller" <davem@davemloft.net>,
Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
Tony Luck <tony.luck@intel.com>, Arnd Bergmann <arnd@arndb.de>,
Fenghua Yu <fenghua.yu@intel.com>,
"H. Peter Anvin" <hpa@zytor.com>,
Heiko Carstens <heiko.carstens@de.ibm.com>,
Helge Deller <deller@gmx.de>,
James Bottomley <jejb@parisc-linux.org>,
Kyle McMartin <kyle@mcmartin.ca>,
Martin Schwidefsky <schwidefsky@de.ibm.com>,
Paul Mackerras <paulus@samba.org>,
Ralf Baechle <ralf@linux-mips.org>
Subject: [062/123] compat: Make compat_alloc_user_space() incorporate the access_ok()
Date: Sat, 18 Sep 2010 11:58:26 -0700 [thread overview]
Message-ID: <20100918185958.114994801@clark.site> (raw)
In-Reply-To: <20100918190024.GA14388@kroah.com>
[-- Attachment #1: compat-make-compat_alloc_user_space-incorporate-the-access_ok.patch --]
[-- Type: text/plain, Size: 6082 bytes --]
From: H. Peter Anvin <hpa@linux.intel.com>
commit c41d68a513c71e35a14f66d71782d27a79a81ea6 upstream.
compat_alloc_user_space() expects the caller to independently call
access_ok() to verify the returned area. A missing call could
introduce problems on some architectures.
This patch incorporates the access_ok() check into
compat_alloc_user_space() and also adds a sanity check on the length.
The existing compat_alloc_user_space() implementations are renamed
arch_compat_alloc_user_space() and are used as part of the
implementation of the new global function.
This patch assumes NULL will cause __get_user()/__put_user() to either
fail or access userspace on all architectures. This should be
followed by checking the return value of compat_access_user_space()
for NULL in the callers, at which time the access_ok() in the callers
can also be removed.
Reported-by: Ben Hawkes <hawkes@sota.gen.nz>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: Chris Metcalf <cmetcalf@tilera.com>
Acked-by: David S. Miller <davem@davemloft.net>
Acked-by: Ingo Molnar <mingo@elte.hu>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Tony Luck <tony.luck@intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Helge Deller <deller@gmx.de>
Cc: James Bottomley <jejb@parisc-linux.org>
Cc: Kyle McMartin <kyle@mcmartin.ca>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/ia64/include/asm/compat.h | 2 +-
arch/mips/include/asm/compat.h | 2 +-
arch/parisc/include/asm/compat.h | 2 +-
arch/powerpc/include/asm/compat.h | 2 +-
arch/s390/include/asm/compat.h | 2 +-
arch/sparc/include/asm/compat.h | 2 +-
arch/x86/include/asm/compat.h | 2 +-
include/linux/compat.h | 2 ++
kernel/compat.c | 22 ++++++++++++++++++++++
9 files changed, 31 insertions(+), 7 deletions(-)
--- a/arch/ia64/include/asm/compat.h
+++ b/arch/ia64/include/asm/compat.h
@@ -198,7 +198,7 @@ ptr_to_compat(void __user *uptr)
}
static __inline__ void __user *
-compat_alloc_user_space (long len)
+arch_compat_alloc_user_space (long len)
{
struct pt_regs *regs = task_pt_regs(current);
return (void __user *) (((regs->r12 & 0xffffffff) & -16) - len);
--- a/arch/mips/include/asm/compat.h
+++ b/arch/mips/include/asm/compat.h
@@ -144,7 +144,7 @@ static inline compat_uptr_t ptr_to_compa
return (u32)(unsigned long)uptr;
}
-static inline void __user *compat_alloc_user_space(long len)
+static inline void __user *arch_compat_alloc_user_space(long len)
{
struct pt_regs *regs = (struct pt_regs *)
((unsigned long) current_thread_info() + THREAD_SIZE - 32) - 1;
--- a/arch/parisc/include/asm/compat.h
+++ b/arch/parisc/include/asm/compat.h
@@ -146,7 +146,7 @@ static inline compat_uptr_t ptr_to_compa
return (u32)(unsigned long)uptr;
}
-static __inline__ void __user *compat_alloc_user_space(long len)
+static __inline__ void __user *arch_compat_alloc_user_space(long len)
{
struct pt_regs *regs = ¤t->thread.regs;
return (void __user *)regs->gr[30];
--- a/arch/powerpc/include/asm/compat.h
+++ b/arch/powerpc/include/asm/compat.h
@@ -133,7 +133,7 @@ static inline compat_uptr_t ptr_to_compa
return (u32)(unsigned long)uptr;
}
-static inline void __user *compat_alloc_user_space(long len)
+static inline void __user *arch_compat_alloc_user_space(long len)
{
struct pt_regs *regs = current->thread.regs;
unsigned long usp = regs->gpr[1];
--- a/arch/s390/include/asm/compat.h
+++ b/arch/s390/include/asm/compat.h
@@ -180,7 +180,7 @@ static inline int is_compat_task(void)
#endif
-static inline void __user *compat_alloc_user_space(long len)
+static inline void __user *arch_compat_alloc_user_space(long len)
{
unsigned long stack;
--- a/arch/sparc/include/asm/compat.h
+++ b/arch/sparc/include/asm/compat.h
@@ -166,7 +166,7 @@ static inline compat_uptr_t ptr_to_compa
return (u32)(unsigned long)uptr;
}
-static inline void __user *compat_alloc_user_space(long len)
+static inline void __user *arch_compat_alloc_user_space(long len)
{
struct pt_regs *regs = current_thread_info()->kregs;
unsigned long usp = regs->u_regs[UREG_I6];
--- a/arch/x86/include/asm/compat.h
+++ b/arch/x86/include/asm/compat.h
@@ -204,7 +204,7 @@ static inline compat_uptr_t ptr_to_compa
return (u32)(unsigned long)uptr;
}
-static inline void __user *compat_alloc_user_space(long len)
+static inline void __user *arch_compat_alloc_user_space(long len)
{
struct pt_regs *regs = task_pt_regs(current);
return (void __user *)regs->sp - len;
--- a/include/linux/compat.h
+++ b/include/linux/compat.h
@@ -309,5 +309,7 @@ asmlinkage long compat_sys_newfstatat(un
asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename,
int flags, int mode);
+extern void __user *compat_alloc_user_space(unsigned long len);
+
#endif /* CONFIG_COMPAT */
#endif /* _LINUX_COMPAT_H */
--- a/kernel/compat.c
+++ b/kernel/compat.c
@@ -25,6 +25,7 @@
#include <linux/posix-timers.h>
#include <linux/times.h>
#include <linux/ptrace.h>
+#include <linux/module.h>
#include <asm/uaccess.h>
@@ -1136,3 +1137,24 @@ compat_sys_sysinfo(struct compat_sysinfo
return 0;
}
+
+/*
+ * Allocate user-space memory for the duration of a single system call,
+ * in order to marshall parameters inside a compat thunk.
+ */
+void __user *compat_alloc_user_space(unsigned long len)
+{
+ void __user *ptr;
+
+ /* If len would occupy more than half of the entire compat space... */
+ if (unlikely(len > (((compat_uptr_t)~0) >> 1)))
+ return NULL;
+
+ ptr = arch_compat_alloc_user_space(len);
+
+ if (unlikely(!access_ok(VERIFY_WRITE, ptr, len)))
+ return NULL;
+
+ return ptr;
+}
+EXPORT_SYMBOL_GPL(compat_alloc_user_space);
next prev parent reply other threads:[~2010-09-18 19:49 UTC|newest]
Thread overview: 132+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20100918185724.290702750@clark.site>
2010-09-18 19:00 ` [000/123] 2.6.32.22-stable review Greg KH
2010-09-18 18:57 ` [001/123] hwmon: (k8temp) Differentiate between AM2 and ASB1 Greg KH
2010-09-18 18:57 ` [002/123] xen: handle events as edge-triggered Greg KH
2010-09-18 18:57 ` [003/123] xen: use percpu interrupts for IPIs and VIRQs Greg KH
2010-09-18 18:57 ` [004/123] ALSA: hda - Rename iMic to Int Mic on Lenovo NB0763 Greg KH
2010-09-18 18:57 ` [005/123] sata_mv: fix broken DSM/TRIM support (v2) Greg KH
2010-09-18 18:57 ` [006/123] x86, tsc, sched: Recompute cyc2ns_offsets during resume from sleep states Greg KH
2010-09-18 18:57 ` [007/123] PCI: MSI: Remove unsafe and unnecessary hardware access Greg KH
2010-09-18 18:57 ` [008/123] PCI: MSI: Restore read_msi_msg_desc(); add get_cached_msi_msg_desc() Greg KH
2010-09-18 18:57 ` [009/123] sched: kill migration thread in CPU_POST_DEAD instead of CPU_DEAD Greg KH
2010-09-18 18:57 ` [010/123] sched: revert stable c6fc81a sched: Fix a race between ttwu() and migrate_task() Greg KH
2010-09-18 18:57 ` [011/123] staging: hv: Fix missing functions for net_device_ops Greg KH
2010-09-18 18:57 ` [012/123] staging: hv: Fixed bounce kmap problem by using correct index Greg KH
2010-09-18 18:57 ` [013/123] staging: hv: Fixed the value of the 64bit-hole inside ring buffer Greg KH
2010-09-18 18:57 ` [014/123] staging: hv: Increased storvsc ringbuffer and max_io_requests Greg KH
2010-09-18 18:57 ` [015/123] staging: hv: Fixed lockup problem with bounce_buffer scatter list Greg KH
2010-09-18 18:57 ` [016/123] fuse: flush background queue on connection close Greg KH
2010-09-18 18:57 ` [017/123] ath9k_hw: fix parsing of HT40 5 GHz CTLs Greg KH
2010-09-18 18:57 ` [018/123] ocfs2: Fix incorrect checksum validation error Greg KH
2010-09-18 18:57 ` [019/123] USB: ehci-ppc-of: problems in unwind Greg KH
2010-09-18 18:57 ` [020/123] USB: Fix kernel oops with g_ether and Windows Greg KH
2010-09-18 18:57 ` [021/123] USB: CP210x Add new device ID Greg KH
2010-09-18 18:57 ` [022/123] USB: cp210x: Add B&G H3000 link cable ID Greg KH
2010-09-18 18:57 ` [023/123] USB: ftdi_sio: Added custom PIDs for ChamSys products Greg KH
2010-09-18 18:57 ` [024/123] USB: serial: Extra device/vendor ID for mos7840 driver Greg KH
2010-09-18 18:57 ` [025/123] usb: serial: mos7840: Add USB ID to support the B&B Electronics USOPTL4-2P Greg KH
2010-09-18 18:57 ` [026/123] USB: mos7840: fix DMA buffers on stack and endianess bugs Greg KH
2010-09-18 18:57 ` [027/123] usb: serial: mos7840: Add USB IDs to support more B&B USB/RS485 converters Greg KH
2010-09-18 18:57 ` [028/123] USB: Exposing second ACM channel as tty for Nokia S60 phones Greg KH
2010-09-18 18:57 ` [029/123] USB: cdc-acm: add another device quirk Greg KH
2010-09-18 18:57 ` [030/123] USB: Expose vendor-specific ACM channel on Nokia 5230 Greg KH
2010-09-18 18:57 ` [031/123] USB: cdc-acm: Adding second ACM channel support for various Nokia and one Samsung phones Greg KH
2010-09-18 18:57 ` [032/123] USB: cdc-acm: Add pseudo modem without AT command capabilities Greg KH
2010-09-18 18:57 ` [033/123] USB: cdc-acm: Fixing crash when ACM probing interfaces with no endpoint descriptors Greg KH
2010-09-18 18:57 ` [034/123] ALSA: hda - Fix auto-parser of ALC269vb for HP pin NID 0x21 Greg KH
2010-09-18 18:57 ` [035/123] ALSA: seq/oss - Fix double-free at error path of snd_seq_oss_open() Greg KH
2010-09-18 18:58 ` [036/123] sysfs: checking for NULL instead of ERR_PTR Greg KH
2010-09-18 18:58 ` [037/123] tun: Dont add sysfs attributes to devices without sysfs directories Greg KH
2010-09-18 18:58 ` [038/123] oprofile: fix crash when accessing freed task structs Greg KH
2010-09-18 18:58 ` [039/123] oprofile, x86: fix init_sysfs error handling Greg KH
2010-09-18 18:58 ` [040/123] oprofile, x86: fix init_sysfs() function stub Greg KH
2010-09-18 18:58 ` [041/123] HID: usbhid: initialize interface pointers early enough Greg KH
2010-09-18 18:58 ` [042/123] HID: fix suspend crash by moving initializations earlier Greg KH
2010-09-18 18:58 ` [043/123] libata: skip EH autopsy and recovery during suspend Greg KH
2010-09-18 18:58 ` [044/123] tracing: Fix a race in function profile Greg KH
2010-09-18 18:58 ` [045/123] tracing: Do not allow llseek to set_ftrace_filter Greg KH
2010-09-18 18:58 ` [046/123] tracing: t_start: reset FTRACE_ITER_HASH in case of seek/pread Greg KH
2010-09-18 18:58 ` [047/123] irda: off by one Greg KH
2010-09-18 18:58 ` [048/123] gcov: fix null-pointer dereference for certain module types Greg KH
2010-09-18 18:58 ` [049/123] tmio_mmc: dont clear unhandled pending interrupts Greg KH
2010-09-18 18:58 ` [050/123] mmc: fix the use of kunmap_atomic() in tmio_mmc.h Greg KH
2010-09-18 18:58 ` [051/123] bounce: call flush_dcache_page() after bounce_copy_vec() Greg KH
2010-09-18 18:58 ` [052/123] kernel/groups.c: fix integer overflow in groups_search Greg KH
2010-09-18 18:58 ` [053/123] binfmt_misc: fix binfmt_misc priority Greg KH
2010-09-18 18:58 ` [054/123] Input: i8042 - fix device removal on unload Greg KH
2010-09-18 18:58 ` [055/123] memory hotplug: fix next block calculation in is_removable Greg KH
2010-09-18 18:58 ` [056/123] perf: Initialize callchains rootss childen hits Greg KH
2010-09-18 18:58 ` [057/123] p54: fix tx feedback status flag check Greg KH
2010-09-18 18:58 ` [058/123] ath5k: check return value of ieee80211_get_tx_rate Greg KH
2010-09-18 18:58 ` [059/123] wireless extensions: fix kernel heap content leak Greg KH
2010-09-18 18:58 ` [060/123] x86, tsc: Fix a preemption leak in restore_sched_clock_state() Greg KH
2010-09-18 18:58 ` [061/123] x86-64, compat: Test %rax for the syscall number, not %eax Greg KH
2010-09-18 18:58 ` Greg KH [this message]
2010-09-18 18:58 ` [063/123] x86-64, compat: Retruncate rax after ia32 syscall entry tracing Greg KH
2010-09-18 18:58 ` [064/123] sched: Protect task->cpus_allowed access in sched_getaffinity() Greg KH
2010-09-18 20:32 ` [Stable-review] " Ben Hutchings
2010-09-18 22:19 ` Greg KH
2010-09-19 5:10 ` Mike Galbraith
2010-09-19 9:40 ` Mike Galbraith
2010-09-18 18:58 ` [065/123] sched: Protect sched_rr_get_param() access to task->sched_class Greg KH
2010-09-18 18:58 ` [066/123] sched: Consolidate select_task_rq() callers Greg KH
2010-09-18 18:58 ` [067/123] sched: Remove unused cpu_nr_migrations() Greg KH
2010-09-18 18:58 ` [068/123] sched: Remove rq->clock coupling from set_task_cpu() Greg KH
2010-09-18 18:58 ` [069/123] sched: Clean up ttwu() rq locking Greg KH
2010-09-18 18:58 ` [070/123] sched: Sanitize fork() handling Greg KH
2010-09-18 18:58 ` [071/123] sched: Remove forced2_migrations stats Greg KH
2010-09-18 18:58 ` [072/123] sched: Make wakeup side and atomic variants of completion API irq safe Greg KH
2010-09-18 18:58 ` [073/123] sched: Use rcu in sys_sched_getscheduler/sys_sched_getparam() Greg KH
2010-09-18 18:58 ` [074/123] sched: Use rcu in sched_get/set_affinity() Greg KH
2010-09-18 18:58 ` [075/123] sched: Use rcu in sched_get_rr_param() Greg KH
2010-09-18 18:58 ` [076/123] sched: Fix set_cpu_active() in cpu_down() Greg KH
2010-09-18 18:58 ` [077/123] sched: Use TASK_WAKING for fork wakups Greg KH
2010-09-18 18:58 ` [078/123] sched: Ensure set_task_cpu() is never called on blocked tasks Greg KH
2010-09-18 18:58 ` [079/123] sched: Make warning less noisy Greg KH
2010-09-18 18:58 ` [080/123] sched: Fix broken assertion Greg KH
2010-09-18 18:58 ` [081/123] sched: Fix sched_exec() balancing Greg KH
2010-09-18 18:58 ` [082/123] sched: Fix select_task_rq() vs hotplug issues Greg KH
2010-09-18 18:58 ` [083/123] sched: Add pre and post wakeup hooks Greg KH
2010-09-18 18:58 ` [084/123] sched: Remove the cfs_rq dependency from set_task_cpu() Greg KH
2010-09-18 18:58 ` [085/123] sched: Fix hotplug hang Greg KH
2010-09-18 18:58 ` [086/123] sched: Fix fork vs hotplug vs cpuset namespaces Greg KH
2010-09-18 18:58 ` [087/123] sched: Fix incorrect sanity check Greg KH
2010-09-18 18:58 ` [088/123] sched: Fix race between ttwu() and task_rq_lock() Greg KH
2010-09-18 18:58 ` [089/123] sched: Extend enqueue_task to allow head queueing Greg KH
2010-09-18 18:58 ` [090/123] sched: Implement head queueing for sched_rt Greg KH
2010-09-18 18:58 ` [091/123] sched: Queue a deboosted task to the head of the RT prio queue Greg KH
2010-09-18 18:58 ` [092/123] sched: set_cpus_allowed_ptr(): Dont use rq->migration_thread after unlock Greg KH
2010-09-18 18:58 ` [093/123] sched: Kill the broken and deadlockable cpuset_lock/cpuset_cpus_allowed_locked code Greg KH
2010-09-18 18:58 ` [094/123] sched: move_task_off_dead_cpu(): Take rq->lock around select_fallback_rq() Greg KH
2010-09-18 18:58 ` [095/123] sched: move_task_off_dead_cpu(): Remove retry logic Greg KH
2010-09-18 18:59 ` [096/123] sched: sched_exec(): Remove the select_fallback_rq() logic Greg KH
2010-09-18 18:59 ` [097/123] sched: _cpu_down(): Dont play with current->cpus_allowed Greg KH
2010-09-18 18:59 ` [098/123] sched: Make select_fallback_rq() cpuset friendly Greg KH
2010-09-18 18:59 ` [099/123] sched: Fix TASK_WAKING vs fork deadlock Greg KH
2010-09-18 18:59 ` [100/123] sched: Optimize task_rq_lock() Greg KH
2010-09-18 18:59 ` [101/123] sched: Fix nr_uninterruptible count Greg KH
2010-09-18 18:59 ` [102/123] sched: Fix rq->clock synchronization when migrating tasks Greg KH
2010-09-18 18:59 ` [103/123] sched: Remove unnecessary RCU exclusion Greg KH
2010-09-18 18:59 ` [104/123] sched: apply RCU protection to wake_affine() Greg KH
2010-09-18 18:59 ` [105/123] sched: Cleanup select_task_rq_fair() Greg KH
2010-09-18 18:59 ` [106/123] sched: More generic WAKE_AFFINE vs select_idle_sibling() Greg KH
2010-09-18 18:59 ` [107/123] sched: Fix vmark regression on big machines Greg KH
2010-09-18 18:59 ` [108/123] sched: Fix select_idle_sibling() Greg KH
2010-09-18 18:59 ` [109/123] sched: Pre-compute cpumask_weight(sched_domain_span(sd)) Greg KH
2010-09-18 18:59 ` [110/123] sched: Fix select_idle_sibling() logic in select_task_rq_fair() Greg KH
2010-09-18 18:59 ` [111/123] sched: cpuacct: Use bigger percpu counter batch values for stats counters Greg KH
2010-09-18 18:59 ` [112/123] ALSA: hda - Handle missing NID 0x1b on ALC259 codec Greg KH
2010-09-18 18:59 ` [113/123] ALSA: hda - Handle pin NID 0x1a on ALC259/269 Greg KH
2010-09-18 18:59 ` [114/123] arm: fix really nasty sigreturn bug Greg KH
2010-09-18 18:59 ` [115/123] hwmon: (f75375s) Shift control mode to the correct bit position Greg KH
2010-09-18 18:59 ` [116/123] hwmon: (f75375s) Do not overwrite values read from registers Greg KH
2010-09-18 18:59 ` [117/123] apm_power: Add missing break statement Greg KH
2010-09-18 18:59 ` [118/123] NFS: Fix a typo in nfs_sockaddr_match_ipaddr6 Greg KH
2010-09-18 18:59 ` [119/123] SUNRPC: Fix race corrupting rpc upcall Greg KH
2010-09-18 18:59 ` [120/123] i915: return -EFAULT if copy_to_user fails Greg KH
2010-09-18 18:59 ` [121/123] i915_gem: " Greg KH
2010-09-18 18:59 ` [122/123] drm/i915: Prevent double dpms on Greg KH
2010-09-18 18:59 ` [123/123] drm: Only decouple the old_fb from the crtc is we call mode_set* Greg KH
2010-09-18 21:39 ` [Stable-review] [000/123] 2.6.32.22-stable review Willy Tarreau
2010-09-19 4:00 ` Greg KH
2010-09-19 5:45 ` Willy Tarreau
2010-09-19 4:34 ` David Miller
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=20100918185958.114994801@clark.site \
--to=gregkh@suse.de \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=arnd@arndb.de \
--cc=benh@kernel.crashing.org \
--cc=cmetcalf@tilera.com \
--cc=davem@davemloft.net \
--cc=deller@gmx.de \
--cc=fenghua.yu@intel.com \
--cc=heiko.carstens@de.ibm.com \
--cc=hpa@linux.intel.com \
--cc=hpa@zytor.com \
--cc=jejb@parisc-linux.org \
--cc=kyle@mcmartin.ca \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=paulus@samba.org \
--cc=ralf@linux-mips.org \
--cc=schwidefsky@de.ibm.com \
--cc=stable-review@kernel.org \
--cc=stable@kernel.org \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
--cc=torvalds@linux-foundation.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