lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <d1af83620908110756h6c9782b5tbc03470f7d33153e@mail.gmail.com>
Date:	Tue, 11 Aug 2009 11:56:05 -0300
From:	Kevin Winchester <kjwinchester@...il.com>
To:	Mikael Pettersson <mikpe@...uu.se>
Cc:	Borislav Petkov <borislav.petkov@....com>,
	Borislav Petkov <petkovbb@...glemail.com>,
	Ingo Molnar <mingo@...e.hu>,
	LKML <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH v3] x86: clear incorrectly forced X86_FEATURE_LAHF_LM flag

2009/8/11 Mikael Pettersson <mikpe@...uu.se>:
> Kevin Winchester writes:
>  > Due to an erratum with certain AMD Athlon 64 processors, the BIOS may
>  > need to force enable the LAHF_LM capability.  Unfortunately, in at
>  > least one case, the BIOS does this even for processors that do not
>  > support the functionality.
>  >
>  > Add a specific check that will clear the feature bit for processors
>  > known not to support the LAHF/SAHF instructions.
>  >
>  > Signed-off-by: Kevin Winchester <kjwinchester@...il.com>
>  > ---
>  >  arch/x86/kernel/cpu/amd.c |    7 +++++++
>  >  1 files changed, 7 insertions(+), 0 deletions(-)
>  >
>  > diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
>  > index e2485b0..63fddcd 100644
>  > --- a/arch/x86/kernel/cpu/amd.c
>  > +++ b/arch/x86/kernel/cpu/amd.c
>  > @@ -400,6 +400,13 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
>  >              level = cpuid_eax(1);
>  >              if((level >= 0x0f48 && level < 0x0f50) || level >= 0x0f58)
>  >                      set_cpu_cap(c, X86_FEATURE_REP_GOOD);
>  > +
>  > +            /*
>  > +             * Some BIOSes incorrectly force this feature, but only K8
>  > +             * revision D (model = 0x14) and later actually support it.
>  > +             */
>  > +            if (c->x86_model < 0x14)
>  > +                    clear_cpu_cap(c, X86_FEATURE_LAHF_LM);
>  >      }
>  >      if (c->x86 == 0x10 || c->x86 == 0x11)
>  >              set_cpu_cap(c, X86_FEATURE_REP_GOOD);
>
> But this only fixes /proc/cpuinfo, right?
>
> Since the BIOS apparently wrote some MSR to get LAHF_LM incorrectly
> reported by CPUID, would it be possible to also correct that MSR so
> that applications that execute CPUID get the correct feature flags?
>

Yes, this does only fix /proc/cpuinfo.  The problem I was experiencing was
related to the 64-bit Adobe Flash plugin, which always uses the LAHF
instruction, regardless of the capabilities of the processor.  Gentoo has
a special additional browser plugin that will basically emulate the LAHF
instruction when it gets an illegal instruction signal, but that plugin is not
installed if /proc/cpuinfo indicates that LAHF is supported.

Thus this patch precisely fixes my problem.

Other options would be, as you mention, to correct the MSR value, or even
to have the kernel emulate the instruction (if that is possible).

I would be happy to implement any other solution instead if it would
help others,
while continuing to solve my problem - but this was the simplest answer I had.

-- 
Kevin Winchester
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ