All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Roth <mdroth@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: qemu-stable@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>
Subject: [Qemu-devel] [PATCH 69/81] target-i386: correctly propagate retaddr into SVM helpers
Date: Mon, 20 Mar 2017 18:08:33 -0500	[thread overview]
Message-ID: <1490051325-3770-70-git-send-email-mdroth@linux.vnet.ibm.com> (raw)
In-Reply-To: <1490051325-3770-1-git-send-email-mdroth@linux.vnet.ibm.com>

From: Paolo Bonzini <pbonzini@redhat.com>

Commit 2afbdf8 ("target-i386: exception handling for memory helpers",
2015-09-15) changed tlb_fill's cpu_restore_state+raise_exception_err
to raise_exception_err_ra.  After this change, the cpu_restore_state
and raise_exception_err's cpu_loop_exit are merged into
raise_exception_err_ra's cpu_loop_exit_restore.

This actually fixed some bugs, but when SVM is enabled there is a
second path from raise_exception_err_ra to cpu_loop_exit.  This is
the VMEXIT path, and now cpu_vmexit is called without a
cpu_restore_state before.

The fix is to pass the retaddr to cpu_vmexit (via
cpu_svm_check_intercept_param).  All helpers can now use GETPC() to pass
the correct retaddr, too.

Cc: qemu-stable@nongnu.org
Fixes: 2afbdf84807d673eb682cb78158e11cdacbf4673
Reported-by: Alexander Boettcher <alexander.boettcher@genode-labs.com>
Tested-by: Alexander Boettcher <alexander.boettcher@genode-labs.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
(cherry picked from commit 65c9d60a3ad3249784348824eca69acac455bc02)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
 cpu-exec.c                |  2 +-
 target-i386/cpu.h         |  5 ++--
 target-i386/excp_helper.c | 11 ++++----
 target-i386/helper.h      |  1 -
 target-i386/misc_helper.c | 24 ++++++++---------
 target-i386/seg_helper.c  |  6 ++---
 target-i386/svm_helper.c  | 65 ++++++++++++++++++++++-------------------------
 7 files changed, 56 insertions(+), 58 deletions(-)

diff --git a/cpu-exec.c b/cpu-exec.c
index c081a7a..964eb01 100644
--- a/cpu-exec.c
+++ b/cpu-exec.c
@@ -491,7 +491,7 @@ static inline void cpu_handle_interrupt(CPUState *cpu,
             X86CPU *x86_cpu = X86_CPU(cpu);
             CPUArchState *env = &x86_cpu->env;
             replay_interrupt();
-            cpu_svm_check_intercept_param(env, SVM_EXIT_INIT, 0);
+            cpu_svm_check_intercept_param(env, SVM_EXIT_INIT, 0, 0);
             do_cpu_init(x86_cpu);
             cpu->exception_index = EXCP_HALTED;
             cpu_loop_exit(cpu);
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index c605724..c1d2c5b 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -1610,8 +1610,9 @@ void helper_lock_init(void);
 
 /* svm_helper.c */
 void cpu_svm_check_intercept_param(CPUX86State *env1, uint32_t type,
-                                   uint64_t param);
-void cpu_vmexit(CPUX86State *nenv, uint32_t exit_code, uint64_t exit_info_1);
+                                   uint64_t param, uintptr_t retaddr);
+void cpu_vmexit(CPUX86State *nenv, uint32_t exit_code, uint64_t exit_info_1,
+                uintptr_t retaddr);
 
 /* seg_helper.c */
 void do_interrupt_x86_hardirq(CPUX86State *env, int intno, int is_hw);
diff --git a/target-i386/excp_helper.c b/target-i386/excp_helper.c
index f0dc499..ee596c6 100644
--- a/target-i386/excp_helper.c
+++ b/target-i386/excp_helper.c
@@ -39,7 +39,8 @@ void helper_raise_exception(CPUX86State *env, int exception_index)
  * needed. It should only be called, if this is not an interrupt.
  * Returns the new exception number.
  */
-static int check_exception(CPUX86State *env, int intno, int *error_code)
+static int check_exception(CPUX86State *env, int intno, int *error_code,
+                           uintptr_t retaddr)
 {
     int first_contributory = env->old_exception == 0 ||
                               (env->old_exception >= 10 &&
@@ -53,7 +54,7 @@ static int check_exception(CPUX86State *env, int intno, int *error_code)
 #if !defined(CONFIG_USER_ONLY)
     if (env->old_exception == EXCP08_DBLE) {
         if (env->hflags & HF_SVMI_MASK) {
-            cpu_vmexit(env, SVM_EXIT_SHUTDOWN, 0); /* does not return */
+            cpu_vmexit(env, SVM_EXIT_SHUTDOWN, 0, retaddr); /* does not return */
         }
 
         qemu_log_mask(CPU_LOG_RESET, "Triple fault\n");
@@ -93,10 +94,10 @@ static void QEMU_NORETURN raise_interrupt2(CPUX86State *env, int intno,
 
     if (!is_int) {
         cpu_svm_check_intercept_param(env, SVM_EXIT_EXCP_BASE + intno,
-                                      error_code);
-        intno = check_exception(env, intno, &error_code);
+                                      error_code, retaddr);
+        intno = check_exception(env, intno, &error_code, retaddr);
     } else {
-        cpu_svm_check_intercept_param(env, SVM_EXIT_SWINT, 0);
+        cpu_svm_check_intercept_param(env, SVM_EXIT_SWINT, 0, retaddr);
     }
 
     cs->exception_index = intno;
diff --git a/target-i386/helper.h b/target-i386/helper.h
index 4e859eb..b360c03 100644
--- a/target-i386/helper.h
+++ b/target-i386/helper.h
@@ -98,7 +98,6 @@ DEF_HELPER_2(inl, tl, env, i32)
 DEF_HELPER_FLAGS_4(bpt_io, TCG_CALL_NO_WG, void, env, i32, i32, tl)
 
 DEF_HELPER_3(svm_check_intercept_param, void, env, i32, i64)
-DEF_HELPER_3(vmexit, void, env, i32, i64)
 DEF_HELPER_4(svm_check_io, void, env, i32, i32, i32)
 DEF_HELPER_3(vmrun, void, env, int, int)
 DEF_HELPER_1(vmmcall, void, env)
diff --git a/target-i386/misc_helper.c b/target-i386/misc_helper.c
index 3f666b4..e145a2e 100644
--- a/target-i386/misc_helper.c
+++ b/target-i386/misc_helper.c
@@ -101,7 +101,7 @@ void helper_cpuid(CPUX86State *env)
 {
     uint32_t eax, ebx, ecx, edx;
 
-    cpu_svm_check_intercept_param(env, SVM_EXIT_CPUID, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_CPUID, 0, GETPC());
 
     cpu_x86_cpuid(env, (uint32_t)env->regs[R_EAX], (uint32_t)env->regs[R_ECX],
                   &eax, &ebx, &ecx, &edx);
@@ -125,7 +125,7 @@ target_ulong helper_read_crN(CPUX86State *env, int reg)
 {
     target_ulong val;
 
-    cpu_svm_check_intercept_param(env, SVM_EXIT_READ_CR0 + reg, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_READ_CR0 + reg, 0, GETPC());
     switch (reg) {
     default:
         val = env->cr[reg];
@@ -143,7 +143,7 @@ target_ulong helper_read_crN(CPUX86State *env, int reg)
 
 void helper_write_crN(CPUX86State *env, int reg, target_ulong t0)
 {
-    cpu_svm_check_intercept_param(env, SVM_EXIT_WRITE_CR0 + reg, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_WRITE_CR0 + reg, 0, GETPC());
     switch (reg) {
     case 0:
         cpu_x86_update_cr0(env, t0);
@@ -179,7 +179,7 @@ void helper_invlpg(CPUX86State *env, target_ulong addr)
 {
     X86CPU *cpu = x86_env_get_cpu(env);
 
-    cpu_svm_check_intercept_param(env, SVM_EXIT_INVLPG, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_INVLPG, 0, GETPC());
     tlb_flush_page(CPU(cpu), addr);
 }
 
@@ -190,7 +190,7 @@ void helper_rdtsc(CPUX86State *env)
     if ((env->cr[4] & CR4_TSD_MASK) && ((env->hflags & HF_CPL_MASK) != 0)) {
         raise_exception_ra(env, EXCP0D_GPF, GETPC());
     }
-    cpu_svm_check_intercept_param(env, SVM_EXIT_RDTSC, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_RDTSC, 0, GETPC());
 
     val = cpu_get_tsc(env) + env->tsc_offset;
     env->regs[R_EAX] = (uint32_t)(val);
@@ -208,7 +208,7 @@ void helper_rdpmc(CPUX86State *env)
     if ((env->cr[4] & CR4_PCE_MASK) && ((env->hflags & HF_CPL_MASK) != 0)) {
         raise_exception_ra(env, EXCP0D_GPF, GETPC());
     }
-    cpu_svm_check_intercept_param(env, SVM_EXIT_RDPMC, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_RDPMC, 0, GETPC());
 
     /* currently unimplemented */
     qemu_log_mask(LOG_UNIMP, "x86: unimplemented rdpmc\n");
@@ -228,7 +228,7 @@ void helper_wrmsr(CPUX86State *env)
 {
     uint64_t val;
 
-    cpu_svm_check_intercept_param(env, SVM_EXIT_MSR, 1);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_MSR, 1, GETPC());
 
     val = ((uint32_t)env->regs[R_EAX]) |
         ((uint64_t)((uint32_t)env->regs[R_EDX]) << 32);
@@ -388,7 +388,7 @@ void helper_rdmsr(CPUX86State *env)
 {
     uint64_t val;
 
-    cpu_svm_check_intercept_param(env, SVM_EXIT_MSR, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_MSR, 0, GETPC());
 
     switch ((uint32_t)env->regs[R_ECX]) {
     case MSR_IA32_SYSENTER_CS:
@@ -557,7 +557,7 @@ void helper_hlt(CPUX86State *env, int next_eip_addend)
 {
     X86CPU *cpu = x86_env_get_cpu(env);
 
-    cpu_svm_check_intercept_param(env, SVM_EXIT_HLT, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_HLT, 0, GETPC());
     env->eip += next_eip_addend;
 
     do_hlt(cpu);
@@ -569,7 +569,7 @@ void helper_monitor(CPUX86State *env, target_ulong ptr)
         raise_exception_ra(env, EXCP0D_GPF, GETPC());
     }
     /* XXX: store address? */
-    cpu_svm_check_intercept_param(env, SVM_EXIT_MONITOR, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_MONITOR, 0, GETPC());
 }
 
 void helper_mwait(CPUX86State *env, int next_eip_addend)
@@ -580,7 +580,7 @@ void helper_mwait(CPUX86State *env, int next_eip_addend)
     if ((uint32_t)env->regs[R_ECX] != 0) {
         raise_exception_ra(env, EXCP0D_GPF, GETPC());
     }
-    cpu_svm_check_intercept_param(env, SVM_EXIT_MWAIT, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_MWAIT, 0, GETPC());
     env->eip += next_eip_addend;
 
     cpu = x86_env_get_cpu(env);
@@ -597,7 +597,7 @@ void helper_pause(CPUX86State *env, int next_eip_addend)
 {
     X86CPU *cpu = x86_env_get_cpu(env);
 
-    cpu_svm_check_intercept_param(env, SVM_EXIT_PAUSE, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_PAUSE, 0, GETPC());
     env->eip += next_eip_addend;
 
     do_pause(cpu);
diff --git a/target-i386/seg_helper.c b/target-i386/seg_helper.c
index fb79f31..ce8f4d7 100644
--- a/target-i386/seg_helper.c
+++ b/target-i386/seg_helper.c
@@ -1334,7 +1334,7 @@ bool x86_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
     } else if (env->hflags2 & HF2_GIF_MASK) {
         if ((interrupt_request & CPU_INTERRUPT_SMI) &&
             !(env->hflags & HF_SMM_MASK)) {
-            cpu_svm_check_intercept_param(env, SVM_EXIT_SMI, 0);
+            cpu_svm_check_intercept_param(env, SVM_EXIT_SMI, 0, 0);
             cs->interrupt_request &= ~CPU_INTERRUPT_SMI;
             do_smm_enter(cpu);
             ret = true;
@@ -1355,7 +1355,7 @@ bool x86_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
                      (env->eflags & IF_MASK &&
                       !(env->hflags & HF_INHIBIT_IRQ_MASK))))) {
             int intno;
-            cpu_svm_check_intercept_param(env, SVM_EXIT_INTR, 0);
+            cpu_svm_check_intercept_param(env, SVM_EXIT_INTR, 0, 0);
             cs->interrupt_request &= ~(CPU_INTERRUPT_HARD |
                                        CPU_INTERRUPT_VIRQ);
             intno = cpu_get_pic_interrupt(env);
@@ -1371,7 +1371,7 @@ bool x86_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
                    !(env->hflags & HF_INHIBIT_IRQ_MASK)) {
             int intno;
             /* FIXME: this should respect TPR */
-            cpu_svm_check_intercept_param(env, SVM_EXIT_VINTR, 0);
+            cpu_svm_check_intercept_param(env, SVM_EXIT_VINTR, 0, 0);
             intno = x86_ldl_phys(cs, env->vm_vmcb
                              + offsetof(struct vmcb, control.int_vector));
             qemu_log_mask(CPU_LOG_TB_IN_ASM,
diff --git a/target-i386/svm_helper.c b/target-i386/svm_helper.c
index 782b3f1..7c94be4 100644
--- a/target-i386/svm_helper.c
+++ b/target-i386/svm_helper.c
@@ -60,11 +60,8 @@ void helper_invlpga(CPUX86State *env, int aflag)
 {
 }
 
-void helper_vmexit(CPUX86State *env, uint32_t exit_code, uint64_t exit_info_1)
-{
-}
-
-void cpu_vmexit(CPUX86State *nenv, uint32_t exit_code, uint64_t exit_info_1)
+void cpu_vmexit(CPUX86State *nenv, uint32_t exit_code, uint64_t exit_info_1,
+                uintptr_t retaddr)
 {
 }
 
@@ -74,7 +71,7 @@ void helper_svm_check_intercept_param(CPUX86State *env, uint32_t type,
 }
 
 void cpu_svm_check_intercept_param(CPUX86State *env, uint32_t type,
-                                   uint64_t param)
+                                   uint64_t param, uintptr_t retaddr)
 {
 }
 
@@ -130,7 +127,7 @@ void helper_vmrun(CPUX86State *env, int aflag, int next_eip_addend)
     uint32_t event_inj;
     uint32_t int_ctl;
 
-    cpu_svm_check_intercept_param(env, SVM_EXIT_VMRUN, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_VMRUN, 0, GETPC());
 
     if (aflag == 2) {
         addr = env->regs[R_EAX];
@@ -355,7 +352,7 @@ void helper_vmrun(CPUX86State *env, int aflag, int next_eip_addend)
 
 void helper_vmmcall(CPUX86State *env)
 {
-    cpu_svm_check_intercept_param(env, SVM_EXIT_VMMCALL, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_VMMCALL, 0, GETPC());
     raise_exception(env, EXCP06_ILLOP);
 }
 
@@ -364,7 +361,7 @@ void helper_vmload(CPUX86State *env, int aflag)
     CPUState *cs = CPU(x86_env_get_cpu(env));
     target_ulong addr;
 
-    cpu_svm_check_intercept_param(env, SVM_EXIT_VMLOAD, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_VMLOAD, 0, GETPC());
 
     if (aflag == 2) {
         addr = env->regs[R_EAX];
@@ -404,7 +401,7 @@ void helper_vmsave(CPUX86State *env, int aflag)
     CPUState *cs = CPU(x86_env_get_cpu(env));
     target_ulong addr;
 
-    cpu_svm_check_intercept_param(env, SVM_EXIT_VMSAVE, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_VMSAVE, 0, GETPC());
 
     if (aflag == 2) {
         addr = env->regs[R_EAX];
@@ -445,19 +442,19 @@ void helper_vmsave(CPUX86State *env, int aflag)
 
 void helper_stgi(CPUX86State *env)
 {
-    cpu_svm_check_intercept_param(env, SVM_EXIT_STGI, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_STGI, 0, GETPC());
     env->hflags2 |= HF2_GIF_MASK;
 }
 
 void helper_clgi(CPUX86State *env)
 {
-    cpu_svm_check_intercept_param(env, SVM_EXIT_CLGI, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_CLGI, 0, GETPC());
     env->hflags2 &= ~HF2_GIF_MASK;
 }
 
 void helper_skinit(CPUX86State *env)
 {
-    cpu_svm_check_intercept_param(env, SVM_EXIT_SKINIT, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_SKINIT, 0, GETPC());
     /* XXX: not implemented */
     raise_exception(env, EXCP06_ILLOP);
 }
@@ -467,7 +464,7 @@ void helper_invlpga(CPUX86State *env, int aflag)
     X86CPU *cpu = x86_env_get_cpu(env);
     target_ulong addr;
 
-    cpu_svm_check_intercept_param(env, SVM_EXIT_INVLPGA, 0);
+    cpu_svm_check_intercept_param(env, SVM_EXIT_INVLPGA, 0, GETPC());
 
     if (aflag == 2) {
         addr = env->regs[R_EAX];
@@ -480,8 +477,8 @@ void helper_invlpga(CPUX86State *env, int aflag)
     tlb_flush_page(CPU(cpu), addr);
 }
 
-void helper_svm_check_intercept_param(CPUX86State *env, uint32_t type,
-                                      uint64_t param)
+void cpu_svm_check_intercept_param(CPUX86State *env, uint32_t type,
+                                   uint64_t param, uintptr_t retaddr)
 {
     CPUState *cs = CPU(x86_env_get_cpu(env));
 
@@ -491,27 +488,27 @@ void helper_svm_check_intercept_param(CPUX86State *env, uint32_t type,
     switch (type) {
     case SVM_EXIT_READ_CR0 ... SVM_EXIT_READ_CR0 + 8:
         if (env->intercept_cr_read & (1 << (type - SVM_EXIT_READ_CR0))) {
-            helper_vmexit(env, type, param);
+            cpu_vmexit(env, type, param, retaddr);
         }
         break;
     case SVM_EXIT_WRITE_CR0 ... SVM_EXIT_WRITE_CR0 + 8:
         if (env->intercept_cr_write & (1 << (type - SVM_EXIT_WRITE_CR0))) {
-            helper_vmexit(env, type, param);
+            cpu_vmexit(env, type, param, retaddr);
         }
         break;
     case SVM_EXIT_READ_DR0 ... SVM_EXIT_READ_DR0 + 7:
         if (env->intercept_dr_read & (1 << (type - SVM_EXIT_READ_DR0))) {
-            helper_vmexit(env, type, param);
+            cpu_vmexit(env, type, param, retaddr);
         }
         break;
     case SVM_EXIT_WRITE_DR0 ... SVM_EXIT_WRITE_DR0 + 7:
         if (env->intercept_dr_write & (1 << (type - SVM_EXIT_WRITE_DR0))) {
-            helper_vmexit(env, type, param);
+            cpu_vmexit(env, type, param, retaddr);
         }
         break;
     case SVM_EXIT_EXCP_BASE ... SVM_EXIT_EXCP_BASE + 31:
         if (env->intercept_exceptions & (1 << (type - SVM_EXIT_EXCP_BASE))) {
-            helper_vmexit(env, type, param);
+            cpu_vmexit(env, type, param, retaddr);
         }
         break;
     case SVM_EXIT_MSR:
@@ -538,28 +535,28 @@ void helper_svm_check_intercept_param(CPUX86State *env, uint32_t type,
                 t0 %= 8;
                 break;
             default:
-                helper_vmexit(env, type, param);
+                cpu_vmexit(env, type, param, retaddr);
                 t0 = 0;
                 t1 = 0;
                 break;
             }
             if (x86_ldub_phys(cs, addr + t1) & ((1 << param) << t0)) {
-                helper_vmexit(env, type, param);
+                cpu_vmexit(env, type, param, retaddr);
             }
         }
         break;
     default:
         if (env->intercept & (1ULL << (type - SVM_EXIT_INTR))) {
-            helper_vmexit(env, type, param);
+            cpu_vmexit(env, type, param, retaddr);
         }
         break;
     }
 }
 
-void cpu_svm_check_intercept_param(CPUX86State *env, uint32_t type,
-                                   uint64_t param)
+void helper_svm_check_intercept_param(CPUX86State *env, uint32_t type,
+                                      uint64_t param)
 {
-    helper_svm_check_intercept_param(env, type, param);
+    cpu_svm_check_intercept_param(env, type, param, GETPC());
 }
 
 void helper_svm_check_io(CPUX86State *env, uint32_t port, uint32_t param,
@@ -578,17 +575,22 @@ void helper_svm_check_io(CPUX86State *env, uint32_t port, uint32_t param,
             x86_stq_phys(cs,
                      env->vm_vmcb + offsetof(struct vmcb, control.exit_info_2),
                      env->eip + next_eip_addend);
-            helper_vmexit(env, SVM_EXIT_IOIO, param | (port << 16));
+            cpu_vmexit(env, SVM_EXIT_IOIO, param | (port << 16), GETPC());
         }
     }
 }
 
 /* Note: currently only 32 bits of exit_code are used */
-void helper_vmexit(CPUX86State *env, uint32_t exit_code, uint64_t exit_info_1)
+void cpu_vmexit(CPUX86State *env, uint32_t exit_code, uint64_t exit_info_1,
+                uintptr_t retaddr)
 {
     CPUState *cs = CPU(x86_env_get_cpu(env));
     uint32_t int_ctl;
 
+    if (retaddr) {
+        cpu_restore_state(cs, retaddr);
+    }
+
     qemu_log_mask(CPU_LOG_TB_IN_ASM, "vmexit(%08x, %016" PRIx64 ", %016"
                   PRIx64 ", " TARGET_FMT_lx ")!\n",
                   exit_code, exit_info_1,
@@ -766,9 +768,4 @@ void helper_vmexit(CPUX86State *env, uint32_t exit_code, uint64_t exit_info_1)
     cpu_loop_exit(cs);
 }
 
-void cpu_vmexit(CPUX86State *env, uint32_t exit_code, uint64_t exit_info_1)
-{
-    helper_vmexit(env, exit_code, exit_info_1);
-}
-
 #endif
-- 
2.7.4

  parent reply	other threads:[~2017-03-20 23:10 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-20 23:07 [Qemu-devel] [PATCH 00/81] Patch Round-up for stable 2.8.1, freeze on 2017-03-27 Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 01/81] 9pfs: local: move xattr security ops to 9p-xattr.c Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 02/81] 9pfs: remove side-effects in local_init() Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 03/81] 9pfs: remove side-effects in local_open() and local_opendir() Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 04/81] 9pfs: introduce relative_openat_nofollow() helper Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 05/81] 9pfs: local: keep a file descriptor on the shared folder Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 06/81] 9pfs: local: open/opendir: don't follow symlinks Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 07/81] 9pfs: local: lgetxattr: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 08/81] 9pfs: local: llistxattr: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 09/81] 9pfs: local: lsetxattr: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 10/81] 9pfs: local: lremovexattr: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 11/81] 9pfs: local: unlinkat: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 12/81] 9pfs: local: remove: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 13/81] 9pfs: local: utimensat: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 14/81] 9pfs: local: statfs: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 15/81] 9pfs: local: truncate: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 16/81] 9pfs: local: readlink: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 17/81] 9pfs: local: lstat: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 18/81] 9pfs: local: renameat: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 19/81] 9pfs: local: rename: use renameat Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 20/81] 9pfs: local: improve error handling in link op Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 21/81] 9pfs: local: link: don't follow symlinks Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 22/81] 9pfs: local: chmod: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 23/81] 9pfs: local: chown: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 24/81] 9pfs: local: symlink: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 25/81] 9pfs: local: mknod: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 26/81] 9pfs: local: mkdir: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 27/81] 9pfs: local: open2: " Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 28/81] 9pfs: local: drop unused code Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 29/81] 9pfs: fix bogus fd check in local_remove() Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 30/81] 9pfs: fix fd leak in local_opendir() Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 31/81] 9pfs: fail local_statfs() earlier Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 32/81] 9pfs: don't use AT_EMPTY_PATH in local_set_cred_passthrough() Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 33/81] 9pfs: fix O_PATH build break with older glibc versions Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 34/81] 9pfs: fix vulnerability in openat_dir() and local_unlinkat_common() Michael Roth
2017-03-20 23:07 ` [Qemu-devel] [PATCH 35/81] machine: Convert abstract typename on compat_props to subclass names Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 36/81] balloon: Don't balloon roms Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 37/81] pci: fix error message for express slots Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 38/81] virtio: fix vq->inuse recalc after migr Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 39/81] 9pfs: fix crash when fsdev is missing Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 40/81] pc: fix crash in rtc_set_memory() if initial cpu is marked as hotplugged Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 41/81] ui/gtk: fix crash at startup when no console is available Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 42/81] scsi-block: fix direction of BYTCHK test for VERIFY commands Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 43/81] ui/vnc: Fix problem with sending too many bytes as server name Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 44/81] qemu-thread: fix qemu_thread_set_name() race in qemu_thread_create() Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 45/81] virtio-crypto: fix possible integer and heap overflow Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 46/81] exec: Add missing rcu_read_unlock Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 47/81] display: cirrus: ignore source pitch value as needed in blit_is_unsafe Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 48/81] x86: ioapic: fix fail migration when irqchip=split Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 49/81] char: fix ctrl-a b not working Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 50/81] tcg/aarch64: Fix addsub2 for 0+C Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 51/81] tcg/aarch64: Fix tcg_out_movi Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 52/81] ui: use evdev keymap when running under wayland Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 53/81] virtio: fix up max size checks Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 54/81] block/iscsi: avoid data corruption with cache=writeback Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 55/81] s390x/kvm: fix cmma reset for KVM Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 56/81] cirrus: fix oob access issue (CVE-2017-2615) Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 57/81] cpu-exec: fix icount out-of-bounds access Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 58/81] ahci: advertise HOST_CAP_64 Michael Roth
2017-03-22 13:11   ` John Snow
2017-03-20 23:08 ` [Qemu-devel] [PATCH 59/81] target/s390x: use "qemu" cpu model in user mode Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 60/81] s390x/kvm: fix small race reboot vs. cmma Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 61/81] block/nfs: fix NULL pointer dereference in URI parsing Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 62/81] block/nfs: fix naming of runtime opts Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 63/81] sd: sdhci: check data length during dma_memory_read Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 64/81] vnc: do not disconnect on EAGAIN Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 65/81] target-ppc, tcg: fix usermode segfault with pthread_create() Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 66/81] block/vmdk: Fix the endian problem of buf_len and lba Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 67/81] target/sparc: Restore ldstub of odd asis Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 68/81] apic: reset apic_delivered global variable on machine reset Michael Roth
2017-03-20 23:08 ` Michael Roth [this message]
2017-03-20 23:08 ` [Qemu-devel] [PATCH 70/81] qga: ignore EBUSY when freezing a filesystem Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 71/81] hmp: fix block_set_io_throttle Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 72/81] cirrus: add blit_is_unsafe call to cirrus_bitblt_cputovideo (CVE-2017-2620) Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 73/81] eth: Extend vlan stripping functions Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 74/81] NetRxPkt: Fix memory corruption on VLAN header stripping Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 75/81] NetRxPkt: Do not try to pull more data than present Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 76/81] NetRxPkt: Account buffer with ETH header in IOV length Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 77/81] e1000e: correctly tear down MSI-X memory regions Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 78/81] scsi: mptsas: fix the wrong reading size in fetch request Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 79/81] virtio-pci: reset modern vq meta data Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 80/81] s390x/css: reassign subchannel if schid is changed after migration Michael Roth
2017-03-20 23:08 ` [Qemu-devel] [PATCH 81/81] thread-pool: add missing qemu_bh_cancel in completion function Michael Roth
2017-03-21  0:47 ` [Qemu-devel] [PATCH 00/81] Patch Round-up for stable 2.8.1, freeze on 2017-03-27 Eric Blake
2017-03-21  1:31 ` Richard Henderson
2017-03-21  9:13 ` [Qemu-devel] [Qemu-stable] " Greg Kurz
2017-03-21 16:26   ` Greg Kurz
2017-03-22 14:31 ` [Qemu-devel] " Christian Borntraeger
2017-04-05  2:01 ` [Qemu-devel] [Qemu-stable] " Gonglei (Arei)
2017-04-05  4:08   ` Michael Roth
2017-04-05  4:51     ` Gonglei (Arei)
2017-04-05  5:21       ` Michael Roth
2017-04-05  5:52         ` Gonglei (Arei)
2017-04-05  6:16           ` Michael Roth
2017-04-05  6:22             ` Gonglei (Arei)
2017-04-06  2:32             ` Gonglei (Arei)

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=1490051325-3770-70-git-send-email-mdroth@linux.vnet.ibm.com \
    --to=mdroth@linux.vnet.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-stable@nongnu.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.