On 8/25/2018 4:28 PM, Artem S. Tashkinov wrote:
> On 08/25/2018 06:39 PM, Casey Schaufler wrote:
>> On 8/25/2018 3:42 AM, Artem S. Tashkinov wrote:
>>> Hello LKML,
>>>
>>> As time goes by more and more fixes of Intel/AMD/ARM CPUs vulnerabilities 
>>> are added to the Linux kernel without a simple way to disable them all in 
>>> one fell swoop.
>>
>> Many of the mitigations are unrelated to each other. There is no one
>> aspect of the system that identifies a behavior as a security issue.
>> I don't know anyone who could create a list of all the "fixes" that
>> have gone in over the years. Realize that features like speculative
>> execution have had security issues that are unrelated to obscure attacks
>> like side-channels. While you may think that you don't care, some of
>> those flaws affect correctness. My bet is you wouldn't want to disable
>> those.
>
> As far as I know mitigations started to appear in January 2018 and kernels 
> released prior to this date all work just fine without any issues with 
> "correctness", so I'm not sure what you're talking about.

Mitigations specific to Specture and Meltdown started showing up then.
Speculative execution has been around for a very long time. It would be
foolish to assume that no work has been done in response to other related
issues before then.

> I'm quite sure at least Intel perfectly knows, as well as Linus Torvalds who 
> coordinates everything.

Don't believe for a minute that no work had been done to address known issues
prior to January.  

>
> Also
>
> diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
> index f73fa6f6d85e..e6362717c895 100644
> --- a/arch/x86/kernel/cpu/common.c
> +++ b/arch/x86/kernel/cpu/common.c
> @@ -991,7 +991,7 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
> {
> u64 ia32_cap = 0;
>
> - if (x86_match_cpu(cpu_no_speculation))
> + //if (x86_match_cpu(cpu_no_speculation))
> return;
>
> setup_force_cpu_bug(X86_BUG_SPECTRE_V1);
>
> and setting this in .config:
>
> CONFIG_RETPOLINE=n
> CONFIG_PAGE_TABLE_ISOLATION=n
>
> Ostensibly disables all mitigations and everything continues to work just 
> fine.

Well, then there's your answer.

>
>>
>>> Disabling is a good option for strictly confined environments where no 3d 
>>> party untrusted code is ever to be run, e.g. a rendering farm, a 
>>> supercomputer, or even a home server which runs Samba/SSH server and 
>>> nothing else.
>>
>> Like maybe the software in centrifuges in a nuclear fuel processing plant?
>>
>> All the examples you've cited are network connected and are vulnerable to 
>> attack.
>> And don't try the "no untrusted code" argument. You'll have code on those 
>> systems
>> that has been known vulnerable for decades.
>
> I'm not sure

I am.

>
> 1) why you're trying to mix unrelated classes of vulnerabilities - of course 
> there are vulnerabilities other than the ones caused by speculative execution;

Most of the other vulnerabilities are massively easier to exploit than
side-channel. To that end you're right, enabling side-channel mitigations
may be pointless of your systems.

> 2) why you're insisting that my argument, that someone may never run 
> untrusted code, has no merit. I may perfectly have a standard Linux distro 
> installed on my PC/server and never run a web browser or any similar 
> applications other than the ones provided by my distro in a form of various 
> packages - which means I will never run any untrusted code. I will also never 
> run any scriptable applications (bash/python/php/ruby/etc) from the net 
> either. How such a configuration might be susceptible to speculative 
> execution attacks?

You have millions of lines of code in a standard distribution.
Some of that code has not been updated since the Reagan administration.
Why on earth would you trust it?

>
>>
>>> I wonder if someone could wrote a patch which implemented the following two 
>>> options for the kernel:
>>>
>>> * A boot option option which allows to disable most runtime 
>>> protections/workarounds/fixes (as far as I understand some of them can't be 
>>> reverted since they are compiled in or use certain GCC flags), e.g. let's 
>>> call it "insecure" or "insecurecpumode".
>>
>> That would be an interesting exercise for the opposite case. A boot option
>> that enables all the runtime protections would certainly be interesting to
>> some people. If you could implement one, you could do the other.
>>
>> I would be happy to review such a patch. Go for it.
>
> I'd love to leave that task to those who are more proficient in writing 
> kernel code and whose work is more likely to be merged. My patch might be 
> never streamlined for totally unrelated reasons (and we've seen too many 
> examples of that already).

OK, but if you want the feature, who better than you to
contribute it?

>
>>
>>> * A compile-time CONFIG_ option which disables all these fixes 
>>> _permanently_ without a way to turn them later back on during runtime.
>>
>> This suffers from all the challenges previously mentioned, but would
>> be equally interesting, again for the opposite case.
>
> Again, I see no challenges since, for instance, RHEL has gone as far as to 
> backport all the patches to previously released officially unmaintained 
> kernels, so all these patches could be easily disabled if one really wanted 
> to.

If you really want to, go ahead and do it!

>
>>
>>>
>>> Right now linux/Documentation/admin-guide/kernel-parameters.txt is a mess 
>>> of various things which take ages to sift through and there's zero 
>>> understanding whether you've found everything and correctly disabled it.
>>
>> I can't argue with you on that. Again, I believe the greater value would
>> come from documenting how to turn everything on.
>
> I guess you meant "turn everything off".

Oh no, I'm pretty good at distinguishing "on" from "off".

>
>
> Best regards,
> Artem
>

Reply via email to