On Fri, Dec 25, 2020 at 06:50:33PM +0800, kernel test robot wrote:
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <l...@intel.com>
> 
> All warnings (new ones prefixed by >>):
> 
> >> arch/x86/kernel/sev-es.c:258:7: warning: variable 'ret' is used 
> >> uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
>                    if (!insn_decode_regs(&ctxt->insn, ctxt->regs, buffer, 
> res))
>                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Yeah, good catch, thanks for reporting.

Frankly, the readability and "extensiblity" of that function can be
improved by splitting the two cases (diff ontop):

---
diff --git a/arch/x86/kernel/sev-es.c b/arch/x86/kernel/sev-es.c
index 564cc9fc693d..ea47037f1624 100644
--- a/arch/x86/kernel/sev-es.c
+++ b/arch/x86/kernel/sev-es.c
@@ -241,40 +241,53 @@ static int vc_fetch_insn_kernel(struct es_em_ctxt *ctxt,
        return copy_from_kernel_nofault(buffer, (unsigned char 
*)ctxt->regs->ip, MAX_INSN_SIZE);
 }
 
-static enum es_result vc_decode_insn(struct es_em_ctxt *ctxt)
+static enum es_result __vc_decode_user_insn(struct es_em_ctxt *ctxt)
 {
        char buffer[MAX_INSN_SIZE];
-       int res, ret;
-
-       if (user_mode(ctxt->regs)) {
-               res = insn_fetch_from_user(ctxt->regs, buffer);
-               if (!res) {
-                       ctxt->fi.vector     = X86_TRAP_PF;
-                       ctxt->fi.error_code = X86_PF_INSTR | X86_PF_USER;
-                       ctxt->fi.cr2        = ctxt->regs->ip;
-                       return ES_EXCEPTION;
-               }
+       int res;
 
-               if (!insn_decode_regs(&ctxt->insn, ctxt->regs, buffer, res))
-                       return ES_DECODE_FAILED;
-       } else {
-               res = vc_fetch_insn_kernel(ctxt, buffer);
-               if (res) {
-                       ctxt->fi.vector     = X86_TRAP_PF;
-                       ctxt->fi.error_code = X86_PF_INSTR;
-                       ctxt->fi.cr2        = ctxt->regs->ip;
-                       return ES_EXCEPTION;
-               }
+       res = insn_fetch_from_user(ctxt->regs, buffer);
+       if (!res) {
+               ctxt->fi.vector     = X86_TRAP_PF;
+               ctxt->fi.error_code = X86_PF_INSTR | X86_PF_USER;
+               ctxt->fi.cr2        = ctxt->regs->ip;
+               return ES_EXCEPTION;
+       }
+
+       if (!insn_decode_regs(&ctxt->insn, ctxt->regs, buffer, res))
+               return ES_DECODE_FAILED;
+       else
+               return ES_OK;
+}
+
+static enum es_result __vc_decode_kern_insn(struct es_em_ctxt *ctxt)
+{
+       char buffer[MAX_INSN_SIZE];
+       int res;
 
-               ret = insn_decode(&ctxt->insn, buffer, MAX_INSN_SIZE - res, 
INSN_MODE_64);
+       res = vc_fetch_insn_kernel(ctxt, buffer);
+       if (res) {
+               ctxt->fi.vector     = X86_TRAP_PF;
+               ctxt->fi.error_code = X86_PF_INSTR;
+               ctxt->fi.cr2        = ctxt->regs->ip;
+               return ES_EXCEPTION;
        }
 
-       if (ret < 0)
+       res = insn_decode(&ctxt->insn, buffer, MAX_INSN_SIZE - res, 
INSN_MODE_64);
+       if (res < 0)
                return ES_DECODE_FAILED;
        else
                return ES_OK;
 }
 
+static enum es_result vc_decode_insn(struct es_em_ctxt *ctxt)
+{
+       if (user_mode(ctxt->regs))
+               return __vc_decode_user_insn(ctxt);
+       else
+               return __vc_decode_kern_insn(ctxt);
+}
+
 static enum es_result vc_write_mem(struct es_em_ctxt *ctxt,
                                   char *dst, char *buf, size_t size)
 {

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

Reply via email to