Re: [tip:x86/urgent] x86/io: Mark target address as output in 'insb()' asm

From: Ingo Molnar
Date: Wed Jul 12 2017 - 15:24:34 EST



* Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote:

> On Wed, Jul 12, 2017 at 6:10 AM, tip-bot for Arnd Bergmann
> <tipbot@xxxxxxxxx> wrote:
> >
> > Apparently the assember constraints are slightly off here, as marking the
> > 'addr' argument as a memory output seems appropriate here and gets rid
> > of the warning. For consistency I'm also adding it as input for outsb().
>
> The new constraints look very questionable to me.

Ok, I've removed the commit.

> The real fix is probably to just mark them as "clobbers memory" (ie
> just add "memory" to the clobber list).
>
> If you want to be fancy, you can try to do what <asm/uaccess.h> does,
> which is a disgusting hack, but has traditionally worked;
>
> struct __large_struct { unsigned long buf[100]; };
> #define __m(x) (*(struct __large_struct __user *)(x))
>
> and then use your approach with "m" and "=m".

Arnd, could you please try Linus's suggestions?

Thanks,

Ingo