On Tue, Oct 17, 2017 at 12:22 PM, Dave Hansen <[email protected]> wrote: > > We do not have tracepoints for sys_modify_ldt() because we define > it directly instead of using the normal SYSCALL_DEFINEx() macros. > > However, there is a reason sys_modify_ldt() does not use the macros: > it has an 'int' return type instead of 'unsigned long'. This is > a bug, but it's a bug cemented in the ABI. > > What does this mean? If we return -EINVAL from a function that > returns 'int', we have 0x00000000ffffffea in %rax. But, if we > return -EINVAL from a function returning 'unsigned long', we end > up with 0xffffffffffffffea in %rax, which is wrong. > > To work around this and maintain the 'int' behavior while using > the SYSCALL_DEFINEx() macros, so we add a cast to 'unsigned int' > in both implementations of sys_modify_ldt().
Reviewed-by: Brian Gerst <[email protected]>

