From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: <linux-kernel@vger.kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
<stable@vger.kernel.org>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Bjorn Helgaas <bhelgaas@google.com>
Subject: [PATCH 3.14 121/130] PCI/AER: Flush workqueue on device remove to avoid use-after-free
Date: Tue, 01 Mar 2016 23:53:39 +0000 [thread overview]
Message-ID: <20160301234504.051618445@linuxfoundation.org> (raw)
In-Reply-To: <20160301234459.768886030@linuxfoundation.org>
3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
commit 4ae2182b1e3407de369f8c5d799543b7db74221b upstream.
A Root Port's AER structure (rpc) contains a queue of events. aer_irq()
enqueues AER status information and schedules aer_isr() to dequeue and
process it. When we remove a device, aer_remove() waits for the queue to
be empty, then frees the rpc struct.
But aer_isr() references the rpc struct after dequeueing and possibly
emptying the queue, which can cause a use-after-free error as in the
following scenario with two threads, aer_isr() on the left and a
concurrent aer_remove() on the right:
Thread A Thread B
-------- --------
aer_irq():
rpc->prod_idx++
aer_remove():
wait_event(rpc->prod_idx == rpc->cons_idx)
# now blocked until queue becomes empty
aer_isr(): # ...
rpc->cons_idx++ # unblocked because queue is now empty
... kfree(rpc)
mutex_unlock(&rpc->rpc_mutex)
To prevent this problem, use flush_work() to wait until the last scheduled
instance of aer_isr() has completed before freeing the rpc struct in
aer_remove().
I reproduced this use-after-free by flashing a device FPGA and
re-enumerating the bus to find the new device. With SLUB debug, this
crashes with 0x6b bytes (POISON_FREE, the use-after-free magic number) in
GPR25:
pcieport 0000:00:00.0: AER: Multiple Corrected error received: id=0000
Unable to handle kernel paging request for data at address 0x27ef9e3e
Workqueue: events aer_isr
GPR24: dd6aa000 6b6b6b6b 605f8378 605f8360 d99b12c0 604fc674 606b1704 d99b12c0
NIP [602f5328] pci_walk_bus+0xd4/0x104
[bhelgaas: changelog, stable tag]
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/pci/pcie/aer/aerdrv.c | 4 +---
drivers/pci/pcie/aer/aerdrv.h | 1 -
drivers/pci/pcie/aer/aerdrv_core.c | 2 --
3 files changed, 1 insertion(+), 6 deletions(-)
--- a/drivers/pci/pcie/aer/aerdrv.c
+++ b/drivers/pci/pcie/aer/aerdrv.c
@@ -262,7 +262,6 @@ static struct aer_rpc *aer_alloc_rpc(str
rpc->rpd = dev;
INIT_WORK(&rpc->dpc_handler, aer_isr);
mutex_init(&rpc->rpc_mutex);
- init_waitqueue_head(&rpc->wait_release);
/* Use PCIe bus function to store rpc into PCIe device */
set_service_data(dev, rpc);
@@ -285,8 +284,7 @@ static void aer_remove(struct pcie_devic
if (rpc->isr)
free_irq(dev->irq, dev);
- wait_event(rpc->wait_release, rpc->prod_idx == rpc->cons_idx);
-
+ flush_work(&rpc->dpc_handler);
aer_disable_rootport(rpc);
kfree(rpc);
set_service_data(dev, NULL);
--- a/drivers/pci/pcie/aer/aerdrv.h
+++ b/drivers/pci/pcie/aer/aerdrv.h
@@ -72,7 +72,6 @@ struct aer_rpc {
* recovery on the same
* root port hierarchy
*/
- wait_queue_head_t wait_release;
};
struct aer_broadcast_data {
--- a/drivers/pci/pcie/aer/aerdrv_core.c
+++ b/drivers/pci/pcie/aer/aerdrv_core.c
@@ -785,8 +785,6 @@ void aer_isr(struct work_struct *work)
while (get_e_source(rpc, &e_src))
aer_isr_one_error(p_device, &e_src);
mutex_unlock(&rpc->rpc_mutex);
-
- wake_up(&rpc->wait_release);
}
/**
next prev parent reply other threads:[~2016-03-01 23:54 UTC|newest]
Thread overview: 133+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-01 23:44 [PATCH 3.14 000/130] 3.14.63-stable review Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 001/130] tracepoints: Do not trace when cpu is offline Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 002/130] drm/ast: Initialized data needed to map fbdev memory Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 003/130] netfilter: nf_tables: fix bogus warning in nft_data_uninit() Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 004/130] netfilter: ipt_rpfilter: remove the nh_scope test in rpfilter_lookup_reverse Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 005/130] netfilter: ip6t_SYNPROXY: fix NULL pointer dereference Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 006/130] bcache: fix a livelock when we cause a huge number of cache misses Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 007/130] bcache: Add a cond_resched() call to gc Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 008/130] bcache: clear BCACHE_DEV_UNLINK_DONE flag when attaching a backing device Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 009/130] bcache: fix a leak in bch_cached_dev_run() Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 010/130] bcache: unregister reboot notifier if bcache fails to unregister device Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 011/130] bcache: prevent crash on changing writeback_running Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 012/130] bcache: Change refill_dirty() to always scan entire disk if necessary Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 014/130] drm/radeon: fix hotplug race at startup Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 023/130] proc: Fix ptrace-based permission checks for accessing task maps Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 024/130] iw_cxgb3: Fix incorrectly returning error on success Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 025/130] lift the "already marked killed" case into shrink_dentry_list() Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 026/130] split dentry_kill() Greg Kroah-Hartman
2016-03-01 23:44 ` [PATCH 3.14 027/130] expand dentry_kill(dentry, 0) in shrink_dentry_list() Greg Kroah-Hartman
2016-03-01 23:50 ` [PATCH 3.14 028/130] shrink_dentry_list(): take parents ->d_lock earlier Greg Kroah-Hartman
2016-03-01 23:50 ` [PATCH 3.14 031/130] dcache: add missing lockdep annotation Greg Kroah-Hartman
2016-03-01 23:50 ` [PATCH 3.14 029/130] dealing with the rest of shrink_dentry_list() livelock Greg Kroah-Hartman
2016-03-01 23:50 ` [PATCH 3.14 030/130] dentry_kill() doesnt need the second argument now Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 032/130] lock_parent: dont step on stale ->d_parent of all-but-freed one Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 015/130] efi: Disable interrupts around EFI calls, not in the epilog/prolog calls Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 033/130] MIPS: KVM: Fix ASID restoration logic Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 037/130] RDS: verify the underlying transport exists before creating a connection Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 036/130] ipv6: addrconf: validate new MTU before applying it Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 034/130] MIPS: KVM: Fix CACHE immediate offset sign extension Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 038/130] splice: sendfile() at once fails for big files Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 035/130] MIPS: KVM: Uninit VCPU in vcpu_create error path Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 039/130] Failing to send a CLOSE if file is opened WRONLY and server reboots on a 4.x mount Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 040/130] bnx2x: Dont notify about scratchpad parities Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 041/130] unix: correctly track in-flight fds in sending process user_struct Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 016/130] dm thin: restore requested error_if_no_space setting on OODS to WRITE transition Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 044/130] sched: Allow balance callbacks for check_class_changed() Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 043/130] sched: Replace post_schedule with a balance callback list Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 045/130] sched,rt: Remove return value from pull_rt_task() Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 047/130] sched,dl: Remove return value from pull_dl_task() Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 042/130] sched: Clean up idle task SMP logic Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 046/130] sched, rt: Convert switched_{from, to}_rt() / prio_changed_rt() to balance callbacks Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 049/130] genirq: Prevent chip buslock deadlock Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 048/130] sched, dl: Convert switched_{from, to}_dl() / prio_changed_dl() to balance callbacks Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 050/130] dts: vt8500: Add SDHC node to DTS file for WM8650 Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 051/130] clocksource/drivers/vt8500: Increase the minimum delta Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 052/130] async_tx: use GFP_NOWAIT rather than GFP_IO Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 017/130] dm thin metadata: fix bug when taking a metadata snapshot Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 053/130] drm/radeon: unconditionally set sysfs_initialized Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 054/130] drm/radeon: make rv770_set_sw_state failures non-fatal Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 057/130] wm831x_power: Use IRQF_ONESHOT to request threaded IRQs Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 055/130] lockd: create NSM handles per net namespace Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 056/130] devres: fix a for loop bounds check Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 058/130] dmaengine: dw: convert to __ffs() Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 018/130] dm thin: fix race condition when destroying thin pool workqueue Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 060/130] megaraid_sas : SMAP restriction--do not access user memory from IOCTL code Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 019/130] can: ems_usb: Fix possible tx overflow Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 020/130] USB: cp210x: add IDs for GE B650V3 and B850V3 boards Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 022/130] USB: option: add "4G LTE usb-modem U901" Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 021/130] USB: option: add support for SIM7100E Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 013/130] tools: Add a "make all" rule Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 062/130] mmc: remove bondage between REQ_META and reliable write Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 072/130] can: sja1000: clear interrupts on start Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 071/130] RDS: fix race condition when sending a message on unbound socket Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 059/130] megaraid_sas: Do not use PAGE_SIZE for max_sectors Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 077/130] dm btree: fix bufio buffer leaks in dm_btree_del() error path Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 074/130] sched/core: Remove false-positive warning from wake_up_process() Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 075/130] sata_sil: disable trim Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 076/130] dm space map metadata: fix ref counting bug when bootstrapping a new space map Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 080/130] rfkill: copy the name into the rfkill struct Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 078/130] irqchip/versatile-fpga: Fix PCI IRQ mapping on Versatile PB Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 079/130] vgaarb: fix signal handling in vga_get() Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 073/130] sched/core: Clear the root_domain cpumasks in init_rootdomain() Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 063/130] mac: validate mac_partition is within sector Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 082/130] ses: fix additional element traversal bug Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 081/130] ses: Fix problems with simple enclosures Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 083/130] powercap / RAPL: fix BIOS lock check Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 084/130] scripts: recordmcount: break hardlinks Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 086/130] Btrfs: igrab inode in writepage Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 087/130] Btrfs: send, dont BUG_ON() when an empty symlink is found Greg Kroah-Hartman
2016-03-01 23:51 ` [PATCH 3.14 085/130] Btrfs: add missing brelse when superblock checksum fails Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 088/130] Btrfs: fix number of transaction units required to create symlink Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 064/130] ARC: dw2 unwind: Remove falllback linear search thru FDE entries Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 090/130] s390/dasd: prevent incorrect length error under z/VM after PAV changes Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 089/130] s390: fix normalization bug in exception table sorting Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 091/130] s390/dasd: fix refcount for PAV reassignment Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 093/130] uml: fix hostfs mknod() Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 092/130] uml: flush stdout before forking Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 095/130] [media] gspca: ov534/topro: prevent a division by 0 Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 094/130] [media] media: dvb-core: Dont force CAN_INVERSION_AUTO in oneshot mode Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 097/130] dm space map metadata: remove unused variable in brb_pop() Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 096/130] [media] tda1004x: only update the frontend properties if locked Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 098/130] dm snapshot: fix hung bios when copy error occurs Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 099/130] posix-clock: Fix return code on the poll methods error path Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 065/130] vfs: Avoid softlockups with sendfile(2) Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 100/130] mmc: sdio: Fix invalid vdd in voltage switch power cycle Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 102/130] mmc: mmci: fix an ages old detection error Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 101/130] mmc: sdhci: Fix sdhci_runtime_pm_bus_on/off() Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 103/130] cputime: Prevent 32bit overflow in time[val|spec]_to_cputime() Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 104/130] EDAC: Robustify workqueues destruction Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 105/130] sparc64: fix incorrect sign extension in sys_sparc64_personality Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 106/130] drm/vmwgfx: respect nomodeset Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 107/130] drm/radeon: clean up fujitsu quirks Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 108/130] drm/radeon: hold reference to fences in radeon_sa_bo_new Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 068/130] ring-buffer: Update read stamp with first real commit on page Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 109/130] drm/i915/dp: fall back to 18 bpp when sink capability is unknown Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 066/130] target: Fix race for SCF_COMPARE_AND_WRITE_POST checking Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 070/130] mac80211: mesh: fix call_rcu() usage Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 069/130] virtio: fix memory leak of virtio ida cache layers Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 067/130] target: fix COMPARE_AND_WRITE non zero SGL offset data corruption Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 111/130] drm/radeon: use post-decrement in error handling Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 120/130] libata: fix sff host state machine locking while polling Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 061/130] storvsc: Dont set the SRB_FLAGS_QUEUE_ACTION_ENABLE flag Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 123/130] NFSv4: Fix a dentry leak on alias use Greg Kroah-Hartman
2016-03-01 23:53 ` Greg Kroah-Hartman [this message]
2016-03-01 23:53 ` [PATCH 3.14 122/130] nfs: fix nfs_size_to_loff_t Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 125/130] tracing: Fix showing function event in available_events Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 124/130] KVM: async_pf: do not warn on page allocation failures Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 126/130] sunrpc/cache: fix off-by-one in qword_get() Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 127/130] kernel/resource.c: fix muxed resource handling in __request_region() Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 128/130] do_last(): dont let a bogus return value from ->open() et.al. to confuse us Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 112/130] drm/radeon/pm: adjust display configuration after powerstate Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 113/130] ACPI / PCI / hotplug: unlock in error path in acpiphp_enable_slot() Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 129/130] xen/pcifront: Fix mysterious crashes when NUMA locality information was extracted Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 115/130] hwmon: (ads1015) Handle negative conversion values correctly Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 114/130] IB/qib: fix mcast detach when qp not attached Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 130/130] iwlwifi: update and fix 7265 series PCI IDs Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 117/130] cdc-acm:exclude Samsung phone 04e8:685d Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 118/130] rfkill: fix rfkill_fop_read wait_event usage Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 119/130] Revert "workqueue: make sure delayed work run in local cpu" Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 116/130] libceph: dont bail early from try_read() when skipping a message Greg Kroah-Hartman
2016-03-01 23:53 ` [PATCH 3.14 110/130] drm/qxl: use kmalloc_array to alloc reloc_info in qxl_process_single_command Greg Kroah-Hartman
2016-03-02 1:36 ` [PATCH 3.14 000/130] 3.14.63-stable review Shuah Khan
2016-03-02 14:34 ` Guenter Roeck
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=20160301234504.051618445@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=bhelgaas@google.com \
--cc=bigeasy@linutronix.de \
--cc=linux-kernel@vger.kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).