Re: [PATCH] x86/selftests: add clobbers for int80 on x86_64
From: Andy Lutomirski
Date: Fri Feb 10 2017 - 11:47:38 EST
On Fri, Feb 10, 2017 at 8:28 AM, Dmitry Safonov <dsafonov@xxxxxxxxxxxxx> wrote:
> On 02/10/2017 07:13 PM, Andy Lutomirski wrote:
>> On Fri, Feb 10, 2017 at 3:52 AM, Dmitry Safonov <dsafonov@xxxxxxxxxxxxx>
>>> Kernel erases R8..R11 registers prior returning to userspace
>>> from int80: https://lkml.org/lkml/2009/10/1/164
>>> GCC can reuse this registers and doesn't expect them to change
>>> during syscall invocation. I met this kind of bug in CRIU once
>>> gcc 6.1 and clang stored local variables in those registers
>>> and the kernel zerofied them during syscall:
>>> By that reason I suggest to add those registers to clobbers
>>> in selftests.
>> Seems reasonable, but presumably INT80_CLOBBERS should be defined the
>> same way in all the tests. IOW, if the "flags" clobber is actually
>> needed, it should be "flags", INT80_CLOBBERS (possibly without the
>> comma if it's problematic).
> Well, that was my initial attempt: I've defined it as:
> +# define INT80_CLOBBERS , "r8", "r9", "r10", "r11"
> But that hanging comma looks awful, so I added "flags" there.
> And if I do define it without coma and leave it in asm statement,
> 32-bit version would be unhappy.
> So, I found that it's easier to define it with flags included.
Woudl the right answer be to get rid of "flags" in the test where it
appears? I'm not sure it's needed in the first place.