From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org,
Russell King <rmk+kernel@arm.linux.org.uk>
Subject: [ 007/102] ARM: move signal handlers into a vdso-like page
Date: Thu, 8 Aug 2013 18:56:43 -0700 [thread overview]
Message-ID: <20130809015011.928108410@linuxfoundation.org> (raw)
In-Reply-To: <20130809015010.208118575@linuxfoundation.org>
3.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Russell King <rmk+kernel@arm.linux.org.uk>
commit 48be69a026b2c17350a5ef18a1959a919f60be7d upstream.
Move the signal handlers into a VDSO page rather than keeping them in
the vectors page. This allows us to place them randomly within this
page, and also map the page at a random location within userspace
further protecting these code fragments from ROP attacks. The new
VDSO page is also poisoned in the same way as the vector page.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/arm/include/asm/elf.h | 4 +++
arch/arm/include/asm/mmu.h | 1
arch/arm/kernel/process.c | 40 +++++++++++++++++++++++++++++++++---
arch/arm/kernel/signal.c | 50 +++++++++++++++++++++++++++++++++++++++------
arch/arm/kernel/signal.h | 12 ----------
arch/arm/kernel/traps.c | 9 --------
6 files changed, 86 insertions(+), 30 deletions(-)
--- a/arch/arm/include/asm/elf.h
+++ b/arch/arm/include/asm/elf.h
@@ -130,4 +130,8 @@ struct mm_struct;
extern unsigned long arch_randomize_brk(struct mm_struct *mm);
#define arch_randomize_brk arch_randomize_brk
+#define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
+struct linux_binprm;
+int arch_setup_additional_pages(struct linux_binprm *, int);
+
#endif
--- a/arch/arm/include/asm/mmu.h
+++ b/arch/arm/include/asm/mmu.h
@@ -8,6 +8,7 @@ typedef struct {
atomic64_t id;
#endif
unsigned int vmalloc_seq;
+ unsigned long sigpage;
} mm_context_t;
#ifdef CONFIG_CPU_HAS_ASID
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -435,8 +435,8 @@ unsigned long arch_randomize_brk(struct
#ifdef CONFIG_MMU
/*
* The vectors page is always readable from user space for the
- * atomic helpers and the signal restart code. Insert it into the
- * gate_vma so that it is visible through ptrace and /proc/<pid>/mem.
+ * atomic helpers. Insert it into the gate_vma so that it is visible
+ * through ptrace and /proc/<pid>/mem.
*/
static struct vm_area_struct gate_vma = {
.vm_start = 0xffff0000,
@@ -468,6 +468,40 @@ int in_gate_area_no_mm(unsigned long add
const char *arch_vma_name(struct vm_area_struct *vma)
{
- return (vma == &gate_vma) ? "[vectors]" : NULL;
+ return (vma == &gate_vma) ? "[vectors]" :
+ (vma->vm_mm && vma->vm_start == vma->vm_mm->context.sigpage) ?
+ "[sigpage]" : NULL;
+}
+
+extern struct page *get_signal_page(void);
+
+int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
+{
+ struct mm_struct *mm = current->mm;
+ struct page *page;
+ unsigned long addr;
+ int ret;
+
+ page = get_signal_page();
+ if (!page)
+ return -ENOMEM;
+
+ down_write(&mm->mmap_sem);
+ addr = get_unmapped_area(NULL, 0, PAGE_SIZE, 0, 0);
+ if (IS_ERR_VALUE(addr)) {
+ ret = addr;
+ goto up_fail;
+ }
+
+ ret = install_special_mapping(mm, addr, PAGE_SIZE,
+ VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC,
+ &page);
+
+ if (ret == 0)
+ mm->context.sigpage = addr;
+
+ up_fail:
+ up_write(&mm->mmap_sem);
+ return ret;
}
#endif
--- a/arch/arm/kernel/signal.c
+++ b/arch/arm/kernel/signal.c
@@ -8,6 +8,7 @@
* published by the Free Software Foundation.
*/
#include <linux/errno.h>
+#include <linux/random.h>
#include <linux/signal.h>
#include <linux/personality.h>
#include <linux/uaccess.h>
@@ -15,12 +16,11 @@
#include <asm/elf.h>
#include <asm/cacheflush.h>
+#include <asm/traps.h>
#include <asm/ucontext.h>
#include <asm/unistd.h>
#include <asm/vfp.h>
-#include "signal.h"
-
/*
* For ARM syscalls, we encode the syscall number into the instruction.
*/
@@ -40,11 +40,13 @@
#define SWI_THUMB_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_sigreturn - __NR_SYSCALL_BASE))
#define SWI_THUMB_RT_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_rt_sigreturn - __NR_SYSCALL_BASE))
-const unsigned long sigreturn_codes[7] = {
+static const unsigned long sigreturn_codes[7] = {
MOV_R7_NR_SIGRETURN, SWI_SYS_SIGRETURN, SWI_THUMB_SIGRETURN,
MOV_R7_NR_RT_SIGRETURN, SWI_SYS_RT_SIGRETURN, SWI_THUMB_RT_SIGRETURN,
};
+static unsigned long signal_return_offset;
+
#ifdef CONFIG_CRUNCH
static int preserve_crunch_context(struct crunch_sigframe __user *frame)
{
@@ -397,11 +399,14 @@ setup_return(struct pt_regs *regs, struc
return 1;
if (cpsr & MODE32_BIT) {
+ struct mm_struct *mm = current->mm;
/*
- * 32-bit code can use the new high-page
- * signal return code support.
+ * 32-bit code can use the signal return page
+ * except when the MPU has protected the vectors
+ * page from PL0
*/
- retcode = KERN_SIGRETURN_CODE + (idx << 2) + thumb;
+ retcode = mm->context.sigpage + signal_return_offset +
+ (idx << 2) + thumb;
} else {
/*
* Ensure that the instruction cache sees
@@ -603,3 +608,36 @@ do_work_pending(struct pt_regs *regs, un
} while (thread_flags & _TIF_WORK_MASK);
return 0;
}
+
+static struct page *signal_page;
+
+struct page *get_signal_page(void)
+{
+ if (!signal_page) {
+ unsigned long ptr;
+ unsigned offset;
+ void *addr;
+
+ signal_page = alloc_pages(GFP_KERNEL, 0);
+
+ if (!signal_page)
+ return NULL;
+
+ addr = page_address(signal_page);
+
+ /* Give the signal return code some randomness */
+ offset = 0x200 + (get_random_int() & 0x7fc);
+ signal_return_offset = offset;
+
+ /*
+ * Copy signal return handlers into the vector page, and
+ * set sigreturn to be a pointer to these.
+ */
+ memcpy(addr + offset, sigreturn_codes, sizeof(sigreturn_codes));
+
+ ptr = (unsigned long)addr + offset;
+ flush_icache_range(ptr, ptr + sizeof(sigreturn_codes));
+ }
+
+ return signal_page;
+}
--- a/arch/arm/kernel/signal.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * linux/arch/arm/kernel/signal.h
- *
- * Copyright (C) 2005-2009 Russell King.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-#define KERN_SIGRETURN_CODE (CONFIG_VECTORS_BASE + 0x00000500)
-
-extern const unsigned long sigreturn_codes[7];
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -35,8 +35,6 @@
#include <asm/tls.h>
#include <asm/system_misc.h>
-#include "signal.h"
-
static const char *handler[]= { "prefetch abort", "data abort", "address exception", "interrupt" };
void *vectors_page;
@@ -849,13 +847,6 @@ void __init early_trap_init(void *vector
kuser_init(vectors_base);
- /*
- * Copy signal return handlers into the vector page, and
- * set sigreturn to be a pointer to these.
- */
- memcpy((void *)(vectors + KERN_SIGRETURN_CODE - CONFIG_VECTORS_BASE),
- sigreturn_codes, sizeof(sigreturn_codes));
-
flush_icache_range(vectors, vectors + PAGE_SIZE * 2);
modify_domain(DOMAIN_USER, DOMAIN_CLIENT);
}
next prev parent reply other threads:[~2013-08-09 2:23 UTC|newest]
Thread overview: 129+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-09 1:56 [ 000/102] 3.10.6-stable review Greg Kroah-Hartman
2013-08-09 1:56 ` [ 001/102] ARM: poison the vectors page Greg Kroah-Hartman
2013-08-09 1:56 ` [ 002/102] ARM: poison memory between kuser helpers Greg Kroah-Hartman
2013-08-09 1:56 ` [ 003/102] ARM: move vector stubs Greg Kroah-Hartman
2013-08-09 1:56 ` [ 004/102] ARM: use linker magic for vectors and " Greg Kroah-Hartman
2013-08-09 1:56 ` [ 005/102] ARM: update FIQ support for relocation of vectors Greg Kroah-Hartman
2013-08-09 1:56 ` [ 006/102] ARM: allow kuser helpers to be removed from the vector page Greg Kroah-Hartman
2013-08-09 1:56 ` Greg Kroah-Hartman [this message]
2013-08-09 1:56 ` [ 008/102] ARM: make vectors page inaccessible from userspace Greg Kroah-Hartman
2013-08-09 4:29 ` Stefan Lippers-Hollmann
2013-08-09 4:46 ` Greg Kroah-Hartman
2013-08-09 1:56 ` [ 009/102] ARM: fix a cockup in 48be69a02 (ARM: move signal handlers into a vdso-like page) Greg Kroah-Hartman
2013-08-09 1:56 ` [ 010/102] ARM: fix nommu builds with " Greg Kroah-Hartman
2013-08-09 1:56 ` [ 011/102] powerpc/windfarm: Fix noisy slots-fan on Xserve (rm31) Greg Kroah-Hartman
2013-08-09 1:56 ` [ 012/102] ARM: 7784/1: mm: ensure SMP alternates assemble to exactly 4 bytes with Thumb-2 Greg Kroah-Hartman
2013-08-09 1:56 ` [ 013/102] ARM: 7790/1: Fix deferred mm switch on VIVT processors Greg Kroah-Hartman
2013-08-09 1:56 ` [ 014/102] ARM: 7791/1: a.out: remove partial a.out support Greg Kroah-Hartman
2013-08-09 1:56 ` [ 015/102] powerpc: VPHN topology change updates all siblings Greg Kroah-Hartman
2013-08-09 1:56 ` [ 016/102] parisc: agp/parisc-agp: allow binding of user memory to the AGP GART Greg Kroah-Hartman
2013-08-09 1:56 ` [ 017/102] parisc: Fix cache routines to ignore vmas with an invalid pfn Greg Kroah-Hartman
2013-08-09 1:56 ` [ 018/102] parisc: Fix interrupt routing for C8000 serial ports Greg Kroah-Hartman
2013-08-09 1:56 ` [ 019/102] hwmon: (max6697) fix MAX6581 ideality Greg Kroah-Hartman
2013-08-09 1:56 ` [ 020/102] ALSA: hda - Fix missing fixup for Mac Mini with STAC9221 Greg Kroah-Hartman
2013-08-09 1:56 ` [ 021/102] ALSA: compress: fix the return value for SNDRV_COMPRESS_VERSION Greg Kroah-Hartman
2013-08-09 1:56 ` [ 022/102] serial/mxs-auart: fix race condition in interrupt handler Greg Kroah-Hartman
2013-08-09 1:56 ` [ 023/102] serial: arc_uart: Fix module alias Greg Kroah-Hartman
2013-08-09 1:57 ` [ 024/102] serial/mxs-auart: increase time to wait for transmitter to become idle Greg Kroah-Hartman
2013-08-09 1:57 ` [ 025/102] dma: pl330: Fix cyclic transfers Greg Kroah-Hartman
2013-08-09 1:57 ` [ 026/102] USB: mos7840: fix race in register handling Greg Kroah-Hartman
2013-08-09 1:57 ` [ 027/102] USB: mos7840: fix device-type detection Greg Kroah-Hartman
2013-08-09 1:57 ` [ 028/102] USB: mos7840: fix race in led handling Greg Kroah-Hartman
2013-08-09 1:57 ` [ 029/102] USB: mos7840: fix pointer casts Greg Kroah-Hartman
2013-08-09 1:57 ` [ 030/102] iwlwifi: mvm: fix L2P BA ressources leak Greg Kroah-Hartman
2013-08-09 1:57 ` [ 031/102] iwlwifi: mvm: fix bug in scan ssid Greg Kroah-Hartman
2013-08-09 1:57 ` [ 032/102] iwlwifi: mvm: refuse connection to APs with BI < 16 Greg Kroah-Hartman
2013-08-09 1:57 ` [ 033/102] iwlwifi: add DELL SKU for 5150 HMC Greg Kroah-Hartman
2013-08-09 1:57 ` [ 034/102] iwlwifi: mvm: fix flushing not started aggregation sessions Greg Kroah-Hartman
2013-08-09 1:57 ` [ 035/102] ath9k_htc: do some initial hardware configuration Greg Kroah-Hartman
2013-08-09 1:57 ` [ 036/102] ath9k_htc: reboot firmware if it was loaded Greg Kroah-Hartman
2013-08-09 1:57 ` [ 037/102] nl80211: fix mgmt tx status and testmode reporting for netns Greg Kroah-Hartman
2013-08-09 1:57 ` [ 038/102] mac80211/minstrel: fix NULL pointer dereference issue Greg Kroah-Hartman
2013-08-09 1:57 ` [ 039/102] mac80211/minstrel_ht: fix cck rate sampling Greg Kroah-Hartman
2013-08-09 1:57 ` [ 040/102] mac80211: fix duplicate retransmission detection Greg Kroah-Hartman
2013-08-09 1:57 ` [ 041/102] mac80211: fix ethtool stats for non-station interfaces Greg Kroah-Hartman
2013-08-09 1:57 ` [ 042/102] mac80211: fix monitor interface suspend crash regression Greg Kroah-Hartman
2013-08-09 1:57 ` [ 043/102] ixgbe: Fix Tx Hang issue with lldpad on 82598EB Greg Kroah-Hartman
2013-08-09 1:57 ` [ 044/102] ath: wil6210: Fix build error Greg Kroah-Hartman
2013-08-11 8:09 ` Vladimir Kondratiev
2013-08-11 8:15 ` Greg Kroah-Hartman
2013-08-09 1:57 ` [ 045/102] Bluetooth: Fix invalid length check in l2cap_information_rsp() Greg Kroah-Hartman
2013-08-09 7:54 ` Johan Hedberg
2013-08-09 19:12 ` Greg Kroah-Hartman
2013-08-09 1:57 ` [ 046/102] Bluetooth: ath3k: Add support for Fujitsu Lifebook UH5x2 [04c5:1330] Greg Kroah-Hartman
2013-08-09 1:57 ` [ 047/102] Bluetooth: ath3k: dont use stack memory for DMA Greg Kroah-Hartman
2013-08-09 1:57 ` [ 048/102] Bluetooth: ath3k: Add support for ID 0x13d3/0x3402 Greg Kroah-Hartman
2013-08-09 1:57 ` [ 049/102] Bluetooth: Add support for Atheros [0cf3:3121] Greg Kroah-Hartman
2013-08-09 1:57 ` [ 050/102] Bluetooth: Add support for Atheros [0cf3:e003] Greg Kroah-Hartman
2013-08-09 1:57 ` [ 051/102] Bluetooth: Add support for Mediatek Bluetooth device [0e8d:763f] Greg Kroah-Hartman
2013-08-09 1:57 ` [ 052/102] Bluetooth: fix wrong use of PTR_ERR() in btusb Greg Kroah-Hartman
2013-08-09 1:57 ` [ 053/102] svcrpc: fix gss-proxy xdr decoding oops Greg Kroah-Hartman
2013-08-09 1:57 ` [ 054/102] svcrpc: fix gss_rpc_upcall create error Greg Kroah-Hartman
2013-08-09 1:57 ` [ 055/102] svcrpc: fix kfree oops in gss-proxy code Greg Kroah-Hartman
2013-08-09 1:57 ` [ 056/102] rt2x00: fix stop queue Greg Kroah-Hartman
2013-08-09 1:57 ` [ 057/102] mwifiex: Add missing endian conversion Greg Kroah-Hartman
2013-08-09 1:57 ` [ 058/102] mwifiex: check for bss_role instead of bss_mode for STA operations Greg Kroah-Hartman
2013-08-09 1:57 ` [ 059/102] mwifiex: fix wrong data rates in P2P client Greg Kroah-Hartman
2013-08-09 1:57 ` [ 060/102] zram: avoid invalid memory access in zram_exit() Greg Kroah-Hartman
2013-08-09 1:57 ` [ 061/102] zram: use zram->lock to protect zram_free_page() in swap free notify path Greg Kroah-Hartman
2013-08-09 1:57 ` [ 062/102] zram: destroy all devices on error recovery path in zram_init() Greg Kroah-Hartman
2013-08-09 1:57 ` [ 063/102] zram: avoid double free in function zram_bvec_write() Greg Kroah-Hartman
2013-08-09 1:57 ` [ 064/102] zram: avoid access beyond the zram device Greg Kroah-Hartman
2013-08-09 1:57 ` [ 065/102] zram: protect sysfs handler from invalid memory access Greg Kroah-Hartman
2013-08-09 1:57 ` [ 066/102] ACPI / battery: Fix parsing _BIX return value Greg Kroah-Hartman
2013-08-09 1:57 ` [ 067/102] Revert "cpuidle: Quickly notice prediction failure in general case" Greg Kroah-Hartman
2013-08-09 1:57 ` [ 068/102] cpufreq: Fix cpufreq driver module refcount balance after suspend/resume Greg Kroah-Hartman
2013-08-09 1:57 ` [ 069/102] Revert "cpuidle: Quickly notice prediction failure for repeat mode" Greg Kroah-Hartman
2013-08-09 1:57 ` [ 070/102] PCI: pciehp: Fix null pointer deref when hot-removing SR-IOV device Greg Kroah-Hartman
2013-08-09 1:57 ` [ 071/102] PCI: Retry allocation of only the resource type that failed Greg Kroah-Hartman
2013-08-09 1:57 ` [ 072/102] drm/radeon: Disable dma rings for bo moves on r6xx Greg Kroah-Hartman
2013-08-09 1:57 ` [ 073/102] xen-blkfront: use a different scatterlist for each request Greg Kroah-Hartman
2013-08-09 1:57 ` [ 074/102] drm/i915: Preserve the DDI_A_4_LANES bit from the bios Greg Kroah-Hartman
2013-08-09 1:57 ` [ 075/102] fanotify: info leak in copy_event_to_user() Greg Kroah-Hartman
2013-08-09 1:57 ` [ 076/102] cgroup: fix umount vs cgroup_cfts_commit() race Greg Kroah-Hartman
2013-08-09 1:57 ` [ 077/102] drm/radeon: never unpin UVD bo v3 Greg Kroah-Hartman
2013-08-09 1:57 ` [ 078/102] x86, fpu: correct the asm constraints for fxsave, unbreak mxcsr.daz Greg Kroah-Hartman
2013-08-09 1:57 ` [ 079/102] Btrfs: fix crash regarding to ulist_add_merge Greg Kroah-Hartman
2013-08-09 1:57 ` [ 080/102] drm/i915: make SDVO TV-out work for multifunction devices Greg Kroah-Hartman
2013-08-09 1:57 ` [ 081/102] s390: add support for IBM zBC12 machine Greg Kroah-Hartman
2013-08-09 1:57 ` [ 082/102] s390/bitops: fix find_next_bit_left Greg Kroah-Hartman
2013-08-09 1:57 ` [ 083/102] workqueue: copy workqueue_attrs with all fields Greg Kroah-Hartman
2013-08-09 1:58 ` [ 084/102] userns: unshare_userns(&cred) should not populate cred on failure Greg Kroah-Hartman
2013-08-09 1:58 ` [ 085/102] x86/iommu/vt-d: Expand interrupt remapping quirk to cover x58 chipset Greg Kroah-Hartman
2013-08-09 1:58 ` [ 086/102] spi: spi-davinci: Fix direction in dma_map_single() Greg Kroah-Hartman
2013-08-09 1:58 ` [ 087/102] arcnet: cleanup sizeof parameter Greg Kroah-Hartman
2013-08-09 1:58 ` [ 088/102] sysctl net: Keep tcp_syn_retries inside the boundary Greg Kroah-Hartman
2013-08-09 1:58 ` [ 089/102] sfc: Enable RX scatter for flows steered by RFS Greg Kroah-Hartman
2013-08-09 1:58 ` [ 090/102] ipv6: take rtnl_lock and mark mrt6 table as freed on namespace cleanup Greg Kroah-Hartman
2013-08-09 1:58 ` [ 091/102] usbnet: do not pretend to support SG/TSO Greg Kroah-Hartman
2013-08-09 1:58 ` [ 092/102] genetlink: release cb_lock before requesting additional module Greg Kroah-Hartman
2013-08-09 1:58 ` [ 093/102] net_sched: Fix stack info leak in cbq_dump_wrr() Greg Kroah-Hartman
2013-08-09 1:58 ` [ 094/102] af_key: more info leaks in pfkey messages Greg Kroah-Hartman
2013-08-09 1:58 ` [ 095/102] atl1c: use custom skb allocator Greg Kroah-Hartman
2013-08-09 1:58 ` [ 096/102] net_sched: info leak in atm_tc_dump_class() Greg Kroah-Hartman
2013-08-09 1:58 ` [ 097/102] ndisc: Add missing inline to ndisc_addr_option_pad Greg Kroah-Hartman
2013-08-09 1:58 ` [ 098/102] 8139cp: Add dma_mapping_error checking Greg Kroah-Hartman
2013-08-09 1:58 ` [ 099/102] net/mlx4_core: Dont give VFs MAC addresses which are derived from the PF MAC Greg Kroah-Hartman
2013-08-09 1:58 ` [ 100/102] net/mlx4_core: VFs must ignore the enable_64b_cqe_eqe module param Greg Kroah-Hartman
2013-08-09 1:58 ` [ 101/102] iwlwifi: mvm: set SSID bits for passive channels Greg Kroah-Hartman
2013-08-09 1:58 ` [ 102/102] iwlwifi: dvm: dont send BT_CONFIG on devices w/o Bluetooth Greg Kroah-Hartman
2013-08-09 4:13 ` [ 000/102] 3.10.6-stable review Stefan Lippers-Hollmann
2013-08-09 4:27 ` Greg Kroah-Hartman
2013-08-09 6:57 ` Guenter Roeck
2013-08-09 19:11 ` Greg Kroah-Hartman
2013-08-09 23:21 ` Guenter Roeck
2013-08-09 23:29 ` Greg Kroah-Hartman
2013-08-09 14:42 ` Shuah Khan
2013-08-09 19:10 ` Greg Kroah-Hartman
2013-08-09 19:45 ` Shuah Khan
2013-08-09 19:50 ` Greg Kroah-Hartman
2013-08-10 22:07 ` Shuah Khan
2013-08-11 3:22 ` Greg Kroah-Hartman
2013-08-09 19:20 ` Willy Tarreau
2013-08-09 19:33 ` Greg Kroah-Hartman
2013-08-09 20:00 ` Willy Tarreau
2013-08-09 20:08 ` Greg Kroah-Hartman
2013-08-09 20:28 ` Willy Tarreau
2013-08-13 4:02 ` Guenter Roeck
2013-08-13 6:41 ` Greg Kroah-Hartman
2014-01-16 15:24 ` rahulk
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=20130809015011.928108410@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rmk+kernel@arm.linux.org.uk \
--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.