On 01/25/17 12:23, Ricardo Neri wrote: > + case UMIP_SMSW: > + dummy_value = CR0_STATE; Unless the user space process is running in 64-bit mode this value should be & 0xffff. I'm not sure if we should even support fixing up UMIP instructions in 64-bit mode. Also, please put an explicit /* fall through */ here. > + /* > + * These two instructions return a 16-bit value. We return > + * all zeros. This is equivalent to a null descriptor for > + * str and sldt. > + */ > + case UMIP_SLDT: > + case UMIP_STR: > + /* if operand is a register, it is zero-extended*/ > + if (X86_MODRM_MOD(insn->modrm.value) == 3) { > + memset(data, 0, insn->opnd_bytes); > + *data_size = insn->opnd_bytes; > + /* if not, only the two least significant bytes are copied */ > + } else { > + *data_size = 2; > + } > + memcpy(data, &dummy_value, sizeof(dummy_value)); > + break; > + default: > + return -EINVAL; > + } > + return 0; > +bool fixup_umip_exception(struct pt_regs *regs) > +{ > + struct insn insn; > + unsigned char buf[MAX_INSN_SIZE]; > + /* 10 bytes is the maximum size of the result of UMIP instructions */ > + unsigned char dummy_data[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; > +#ifdef CONFIG_X86_64 > + int x86_64 = user_64bit_mode(regs); > +#else > + int x86_64 = 0; > +#endif Again, could we simply do: if (user_64bit_mode(regs)) return false; or are there known users of these instructions *in 64-bit mode*? -hpa -- To unsubscribe from this list: send the line "unsubscribe linux-msdos" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html