From: Sasha Levin <Alexander.Levin@microsoft.com>
To: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"stable@vger.kernel.org" <stable@vger.kernel.org>
Cc: Paul Mackerras <paulus@ozlabs.org>,
Sasha Levin <Alexander.Levin@microsoft.com>
Subject: [PATCH AUTOSEL for 3.18 016/102] KVM: PPC: Book3S PR: Check copy_to/from_user return values
Date: Mon, 19 Mar 2018 16:11:47 +0000 [thread overview]
Message-ID: <20180319161117.17833-16-alexander.levin@microsoft.com> (raw)
In-Reply-To: <20180319161117.17833-1-alexander.levin@microsoft.com>
From: Paul Mackerras <paulus@ozlabs.org>
[ Upstream commit 67325e988faea735d663799b6d152b5f4254093c ]
The PR KVM implementation of the PAPR HPT hypercalls (H_ENTER etc.)
access an image of the HPT in userspace memory using copy_from_user
and copy_to_user. Recently, the declarations of those functions were
annotated to indicate that the return value must be checked. Since
this code doesn't currently check the return value, this causes
compile warnings like the ones shown below, and since on PPC the
default is to compile arch/powerpc with -Werror, this causes the
build to fail.
To fix this, we check the return values, and if non-zero, fail the
hypercall being processed with a H_FUNCTION error return value.
There is really no good error return value to use since PAPR didn't
envisage the possibility that the hypervisor may not be able to access
the guest's HPT, and H_FUNCTION (function not supported) seems as
good as any.
The typical compile warnings look like this:
CC arch/powerpc/kvm/book3s_pr_papr.o
/home/paulus/kernel/kvm/arch/powerpc/kvm/book3s_pr_papr.c: In function ‘kvmppc_h_pr_enter’:
/home/paulus/kernel/kvm/arch/powerpc/kvm/book3s_pr_papr.c:53:2: error: ignoring return value of ‘copy_from_user’, declared with attribute warn_unused_result [-Werror=unused-result]
copy_from_user(pteg, (void __user *)pteg_addr, sizeof(pteg));
^
/home/paulus/kernel/kvm/arch/powerpc/kvm/book3s_pr_papr.c:74:2: error: ignoring return value of ‘copy_to_user’, declared with attribute warn_unused_result [-Werror=unused-result]
copy_to_user((void __user *)pteg_addr, hpte, HPTE_SIZE);
^
... etc.
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
arch/powerpc/kvm/book3s_pr_papr.c | 34 ++++++++++++++++++++++++++--------
1 file changed, 26 insertions(+), 8 deletions(-)
diff --git a/arch/powerpc/kvm/book3s_pr_papr.c b/arch/powerpc/kvm/book3s_pr_papr.c
index ce3c893d509b..e100aaf97f86 100644
--- a/arch/powerpc/kvm/book3s_pr_papr.c
+++ b/arch/powerpc/kvm/book3s_pr_papr.c
@@ -50,7 +50,9 @@ static int kvmppc_h_pr_enter(struct kvm_vcpu *vcpu)
pteg_addr = get_pteg_addr(vcpu, pte_index);
mutex_lock(&vcpu->kvm->arch.hpt_mutex);
- copy_from_user(pteg, (void __user *)pteg_addr, sizeof(pteg));
+ ret = H_FUNCTION;
+ if (copy_from_user(pteg, (void __user *)pteg_addr, sizeof(pteg)))
+ goto done;
hpte = pteg;
ret = H_PTEG_FULL;
@@ -71,7 +73,9 @@ static int kvmppc_h_pr_enter(struct kvm_vcpu *vcpu)
hpte[0] = cpu_to_be64(kvmppc_get_gpr(vcpu, 6));
hpte[1] = cpu_to_be64(kvmppc_get_gpr(vcpu, 7));
pteg_addr += i * HPTE_SIZE;
- copy_to_user((void __user *)pteg_addr, hpte, HPTE_SIZE);
+ ret = H_FUNCTION;
+ if (copy_to_user((void __user *)pteg_addr, hpte, HPTE_SIZE))
+ goto done;
kvmppc_set_gpr(vcpu, 4, pte_index | i);
ret = H_SUCCESS;
@@ -93,7 +97,9 @@ static int kvmppc_h_pr_remove(struct kvm_vcpu *vcpu)
pteg = get_pteg_addr(vcpu, pte_index);
mutex_lock(&vcpu->kvm->arch.hpt_mutex);
- copy_from_user(pte, (void __user *)pteg, sizeof(pte));
+ ret = H_FUNCTION;
+ if (copy_from_user(pte, (void __user *)pteg, sizeof(pte)))
+ goto done;
pte[0] = be64_to_cpu((__force __be64)pte[0]);
pte[1] = be64_to_cpu((__force __be64)pte[1]);
@@ -103,7 +109,9 @@ static int kvmppc_h_pr_remove(struct kvm_vcpu *vcpu)
((flags & H_ANDCOND) && (pte[0] & avpn) != 0))
goto done;
- copy_to_user((void __user *)pteg, &v, sizeof(v));
+ ret = H_FUNCTION;
+ if (copy_to_user((void __user *)pteg, &v, sizeof(v)))
+ goto done;
rb = compute_tlbie_rb(pte[0], pte[1], pte_index);
vcpu->arch.mmu.tlbie(vcpu, rb, rb & 1 ? true : false);
@@ -171,7 +179,10 @@ static int kvmppc_h_pr_bulk_remove(struct kvm_vcpu *vcpu)
}
pteg = get_pteg_addr(vcpu, tsh & H_BULK_REMOVE_PTEX);
- copy_from_user(pte, (void __user *)pteg, sizeof(pte));
+ if (copy_from_user(pte, (void __user *)pteg, sizeof(pte))) {
+ ret = H_FUNCTION;
+ break;
+ }
pte[0] = be64_to_cpu((__force __be64)pte[0]);
pte[1] = be64_to_cpu((__force __be64)pte[1]);
@@ -184,7 +195,10 @@ static int kvmppc_h_pr_bulk_remove(struct kvm_vcpu *vcpu)
tsh |= H_BULK_REMOVE_NOT_FOUND;
} else {
/* Splat the pteg in (userland) hpt */
- copy_to_user((void __user *)pteg, &v, sizeof(v));
+ if (copy_to_user((void __user *)pteg, &v, sizeof(v))) {
+ ret = H_FUNCTION;
+ break;
+ }
rb = compute_tlbie_rb(pte[0], pte[1],
tsh & H_BULK_REMOVE_PTEX);
@@ -211,7 +225,9 @@ static int kvmppc_h_pr_protect(struct kvm_vcpu *vcpu)
pteg = get_pteg_addr(vcpu, pte_index);
mutex_lock(&vcpu->kvm->arch.hpt_mutex);
- copy_from_user(pte, (void __user *)pteg, sizeof(pte));
+ ret = H_FUNCTION;
+ if (copy_from_user(pte, (void __user *)pteg, sizeof(pte)))
+ goto done;
pte[0] = be64_to_cpu((__force __be64)pte[0]);
pte[1] = be64_to_cpu((__force __be64)pte[1]);
@@ -234,7 +250,9 @@ static int kvmppc_h_pr_protect(struct kvm_vcpu *vcpu)
vcpu->arch.mmu.tlbie(vcpu, rb, rb & 1 ? true : false);
pte[0] = (__force u64)cpu_to_be64(pte[0]);
pte[1] = (__force u64)cpu_to_be64(pte[1]);
- copy_to_user((void __user *)pteg, pte, sizeof(pte));
+ ret = H_FUNCTION;
+ if (copy_to_user((void __user *)pteg, pte, sizeof(pte)))
+ goto done;
ret = H_SUCCESS;
done:
--
2.14.1
next prev parent reply other threads:[~2018-03-19 16:11 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-19 16:11 [PATCH AUTOSEL for 3.18 001/102] NFSv4.1: RECLAIM_COMPLETE must handle NFS4ERR_CONN_NOT_BOUND_TO_SESSION Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 002/102] IB/srpt: Fix abort handling Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 003/102] af_key: Fix slab-out-of-bounds in pfkey_compile_policy Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 004/102] mac80211: bail out from prep_connection() if a reconfig is ongoing Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 005/102] bna: Avoid reading past end of buffer Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 006/102] qlge: " Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 007/102] net: ethernet: ti: cpsw: adjust cpsw fifos depth for fullduplex flow control Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 008/102] lockd: fix lockd shutdown race Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 009/102] pidns: disable pid allocation if pid_ns_prepare_proc() is failed in alloc_pid() Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 010/102] s390: move _text symbol to address higher than zero Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 011/102] net/mlx4_en: Avoid adding steering rules with invalid ring Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 012/102] CIFS: silence lockdep splat in cifs_relock_file() Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 013/102] net: qca_spi: Fix alignment issues in rx path Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 014/102] netxen_nic: set rcode to the return status from the call to netxen_issue_cmd Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 015/102] scsi: sg: don't return bogus Sg_requests Sasha Levin
2018-03-19 16:11 ` Sasha Levin [this message]
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 017/102] vmxnet3: ensure that adapter is in proper state during force_close Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 018/102] SMB2: Fix share type handling Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 019/102] PowerCap: Fix an error code in powercap_register_zone() Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 020/102] staging: wlan-ng: prism2mgmt.c: fixed a double endian conversion before calling hfa384x_drvr_setconfig16, also fixes relative sparse warning Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 021/102] x86/tsc: Provide 'tsc=unstable' boot parameter Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 022/102] ARM: dts: imx6qdl-wandboard: Fix audio channel swap Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 023/102] ipv6: avoid dad-failures for addresses with NODAD Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 024/102] async_tx: Fix DMA_PREP_FENCE usage in do_async_gen_syndrome() Sasha Levin
2018-03-19 16:11 ` [PATCH AUTOSEL for 3.18 025/102] usb: dwc3: keystone: check return value Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 026/102] btrfs: fix incorrect error return ret being passed to mapping_set_error Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 027/102] ata: libahci: properly propagate return value of platform_get_irq() Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 028/102] neighbour: update neigh timestamps iff update is effective Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 029/102] usb: chipidea: properly handle host or gadget initialization failure Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 030/102] USB: ene_usb6250: fix first command execution Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 031/102] net: x25: fix one potential use-after-free issue Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 032/102] USB: ene_usb6250: fix SCSI residue overwriting Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 033/102] sh_eth: Use platform device for printing before register_netdev() Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 034/102] ath5k: fix memory leak on buf on failed eeprom read Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 035/102] selftests/powerpc: Fix TM resched DSCR test with some compilers Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 036/102] xfrm: fix state migration copy replay sequence numbers Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 037/102] ARM: davinci: da8xx: Create DSP device only when assigned memory Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 038/102] ray_cs: Avoid reading past end of buffer Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 039/102] leds: pca955x: Correct I2C Functionality Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 040/102] block: fix an error code in add_partition() Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 041/102] libceph: NULL deref on crush_decode() error path Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 042/102] netfilter: ctnetlink: fix incorrect nf_ct_put during hash resize Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 043/102] scsi: bnx2fc: fix race condition in bnx2fc_get_host_stats() Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 044/102] fix race in drivers/char/random.c:get_reg() Sasha Levin
2018-03-20 9:48 ` Geert Uytterhoeven
2018-03-21 18:13 ` Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 045/102] ext4: fix off-by-one on max nr_pages in ext4_find_unwritten_pgoff() Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 046/102] net: move somaxconn init from sysctl code Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 047/102] bonding: Don't update slave->link until ready to commit Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 048/102] KVM: nVMX: Fix handling of lmsw instruction Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 049/102] net: llc: add lock_sock in llc_ui_bind to avoid a race condition Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 050/102] l2tp: fix missing print session offset info Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 051/102] scsi: libiscsi: Allow sd_shutdown on bad transport Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 052/102] vfb: fix video mode and line_length being set when loaded Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 053/102] wl1251: check return from call to wl1251_acx_arp_ip_filter Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 054/102] hdlcdrv: Fix divide by zero in hdlcdrv_ioctl Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 055/102] HID: i2c: Call acpi_device_fix_up_power for ACPI-enumerated devices Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 056/102] ovl: filter trusted xattr for non-admin Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 057/102] powerpc/[booke|4xx]: Don't clobber TCR[WP] when setting TCR[DIE] Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 058/102] arm64: futex: Fix undefined behaviour with FUTEX_OP_OPARG_SHIFT usage Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 059/102] rtc: interface: Validate alarm-time before handling rollover Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 060/102] net: freescale: fix potential null pointer dereference Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 061/102] KVM: SVM: do not zero out segment attributes if segment is unusable or not present Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 062/102] powerpc/spufs: Fix coredump of SPU contexts Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 063/102] perf trace: Add mmap alias for s390 Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 064/102] qlcnic: Fix a sleep-in-atomic bug in qlcnic_82xx_hw_write_wx_2M and qlcnic_82xx_hw_read_wx_2M Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 065/102] mISDN: Fix a sleep-in-atomic bug Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 066/102] drm/omap: fix tiled buffer stride calculations Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 067/102] Fix serial console on SNI RM400 machines Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 068/102] bio-integrity: Do not allocate integrity context for bio w/o data Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 069/102] skbuff: return -EMSGSIZE in skb_to_sgvec to prevent overflow Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 070/102] net/mlx4: Fix the check in attaching steering rules Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 071/102] perf report: Ensure the perf DSO mapping matches what libdw sees Sasha Levin
2018-03-19 16:12 ` [PATCH AUTOSEL for 3.18 072/102] tags: honor COMPILED_SOURCE with apart output directory Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 073/102] e1000e: fix race condition around skb_tstamp_tx() Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 074/102] [media] cx25840: fix unchecked return values Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 075/102] [media] mceusb: sporadic RX truncation corruption fix Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 076/102] net: phy: avoid genphy_aneg_done() for PHYs without clause 22 support Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 077/102] e1000e: Undo e1000e_pm_freeze if __e1000_shutdown fails Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 078/102] perf/core: Correct event creation with PERF_FORMAT_GROUP Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 079/102] MIPS: mm: fixed mappings: correct initialisation Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 080/102] MIPS: kprobes: flush_insn_slot should flush only if probe initialised Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 081/102] net: emac: fix reset timeout with AR8035 phy Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 082/102] perf tests: Decompress kernel module before objdump Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 083/102] xen: avoid type warning in xchg_xen_ulong Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 084/102] bnx2x: Allow vfs to disable txvlan offload Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 085/102] sctp: fix recursive locking warning in sctp_do_peeloff Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 086/102] sparc64: ldc abort during vds iso boot Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 087/102] iio: magnetometer: st_magn_spi: fix spi_device_id table Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 088/102] Bluetooth: Send HCI Set Event Mask Page 2 command only when needed Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 089/102] ACPICA: Events: Add runtime stub support for event APIs Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 090/102] ACPICA: Disassembler: Abort on an invalid/unknown AML opcode Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 091/102] vxlan: dont migrate permanent fdb entries during learn Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 092/102] xfs: fix up agi unlinked list reservations Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 093/102] bcache: stop writeback thread after detaching Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 094/102] bcache: segregate flash only volume write streams Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 095/102] scsi: libsas: fix memory leak in sas_smp_get_phy_events() Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 096/102] scsi: libsas: fix error when getting phy events Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 097/102] scsi: libsas: initialize sas_phy status according to response of DISCOVER Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 098/102] tty: n_gsm: Allow ADM response in addition to UA for control dlci Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 099/102] EDAC, mv64x60: Fix an error handling path Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 100/102] signal/metag: Document a conflict with SI_USER with SIGFPE Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 101/102] signal/powerpc: Document conflicts with SI_USER and SIGFPE and SIGTRAP Sasha Levin
2018-03-19 16:13 ` [PATCH AUTOSEL for 3.18 102/102] signal/arm: Document conflicts with SI_USER and SIGFPE Sasha Levin
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=20180319161117.17833-16-alexander.levin@microsoft.com \
--to=alexander.levin@microsoft.com \
--cc=linux-kernel@vger.kernel.org \
--cc=paulus@ozlabs.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).