Hi!

(stable removed from cc).

> [ Upstream commit 67a0514afdbb8b2fc70b771b8c77661a9cb9d3a9 ]
> 
> Objtool spotted that we call native_load_gs_index() with AC set.
> Re-arrange the code to avoid that.

Does this introduce undefined behaviour?
> 
> @@ -72,6 +71,7 @@ static int ia32_restore_sigcontext(struct pt_regs *regs,
>                                  struct sigcontext_32 __user *sc)
>  {
>       unsigned int tmpflags, err = 0;
> +     u16 gs, fs, es, ds;
>       void __user *buf;
>       u32 tmp;
>  
> @@ -79,16 +79,10 @@ static int ia32_restore_sigcontext(struct pt_regs *regs,
>       current->restart_block.fn = do_no_restart_syscall;
>  
>       get_user_try {
> -             /*
> -              * Reload fs and gs if they have changed in the signal
> -              * handler.  This does not handle long fs/gs base changes in
> -              * the handler, but does not clobber them at least in the
> -              * normal case.
> -              */
> -             RELOAD_SEG(gs);
> -             RELOAD_SEG(fs);
> -             RELOAD_SEG(ds);
> -             RELOAD_SEG(es);

> +             gs = GET_SEG(gs);

es is unitialized at this point, and we can trap.

> +             fs = GET_SEG(fs);
> +             ds = GET_SEG(ds);
> +             es = GET_SEG(es);
>  
>               COPY(di); COPY(si); COPY(bp); COPY(sp); COPY(bx);
>               COPY(dx); COPY(cx); COPY(ip); COPY(ax);
> @@ -106,6 +100,17 @@ static int ia32_restore_sigcontext(struct pt_regs *regs,
>               buf = compat_ptr(tmp);
>       } get_user_catch(err);
>  
> +     /*
> +      * Reload fs and gs if they have changed in the signal
> +      * handler.  This does not handle long fs/gs base changes in
> +      * the handler, but does not clobber them at least in the
> +      * normal case.
> +      */
> +     RELOAD_SEG(gs);
> +     RELOAD_SEG(fs);
> +     RELOAD_SEG(ds);
> +     RELOAD_SEG(es);
> +

But now we use uninitialized value in es...

>       err |= fpu__restore_sig(buf, 1);
>  
>       force_iret();

Best regards,
                                                                        Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) 
http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

Attachment: signature.asc
Description: Digital signature

Reply via email to