All of lore.kernel.org
 help / color / mirror / Atom feed
* re: KVM: x86: Handle errors when RIP is set during far jumps
@ 2014-10-27 13:42 Dan Carpenter
  2014-10-27 14:05 ` Nadav Amit
  0 siblings, 1 reply; 3+ messages in thread
From: Dan Carpenter @ 2014-10-27 13:42 UTC (permalink / raw)
  To: namit; +Cc: kvm

Hello Nadav Amit,

The patch d1442d85cc30: "KVM: x86: Handle errors when RIP is set
during far jumps" from Sep 18, 2014, leads to the following static
checker warning:

	arch/x86/kvm/emulate.c:2015 em_jmp_far()
	warn: add some parenthesis here?

arch/x86/kvm/emulate.c
  2013          rc = assign_eip_far(ctxt, ctxt->src.val, new_desc.l);
  2014          if (rc != X86EMUL_CONTINUE) {
  2015                  WARN_ON(!ctxt->mode != X86EMUL_MODE_PROT64);
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
No idea what was intended here.  The negate has higher precedence than
the !=.

  2016                  /* assigning eip failed; restore the old cs */
  2017                  ops->set_segment(ctxt, old_sel, &old_desc, 0, VCPU_SREG_CS);
  2018                  return rc;
  2019          }

There are a couple other static checker warnings as well:

	arch/x86/kvm/emulate.c:579 assign_eip_far()
	warn: bitwise AND condition is false here

   567  static inline int assign_eip_far(struct x86_emulate_ctxt *ctxt, ulong dst,
   568                                 int cs_l)
   569  {
   570          switch (ctxt->op_bytes) {
   571          case 2:
   572                  ctxt->_eip = (u16)dst;
   573                  break;
   574          case 4:
   575                  ctxt->_eip = (u32)dst;
   576                  break;
   577          case 8:
   578                  if ((cs_l && is_noncanonical_address(dst)) ||
   579                      (!cs_l && (dst & ~(u32)-1)))
					     ^^^^^^^^
This is a very complicated way of saying zero.

   580                          return emulate_gp(ctxt, 0);
   581                  ctxt->_eip = dst;
   582                  break;
   583          default:
   584                  WARN(1, "unsupported eip assignment size\n");
   585          }
   586          return X86EMUL_CONTINUE;
   587  }

	arch/x86/kvm/emulate.c:2112 em_ret_far()
	warn: add some parenthesis here?

  2110          rc = assign_eip_far(ctxt, eip, new_desc.l);
  2111          if (rc != X86EMUL_CONTINUE) {
  2112                  WARN_ON(!ctxt->mode != X86EMUL_MODE_PROT64);
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  2113                  ops->set_segment(ctxt, old_cs, &old_desc, 0, VCPU_SREG_CS);
  2114          }
  2115          return rc;
  2116  }

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-10-27 22:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-27 13:42 KVM: x86: Handle errors when RIP is set during far jumps Dan Carpenter
2014-10-27 14:05 ` Nadav Amit
2014-10-27 22:03   ` [PATCH] KVM: x86: Fix far-jump to non-canonical check Nadav Amit

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.