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]
Date:   Wed, 5 Jan 2022 07:20:10 +0000
From:   Matthew Garrett <mjg59@...f.ucam.org>
To:     Kai-Heng Feng <kai.heng.feng@...onical.com>
Cc:     jmorris@...ei.org, linux-security-module@...r.kernel.org,
        linux-kernel@...r.kernel.org, linux-api@...r.kernel.org,
        David Howells <dhowells@...hat.com>,
        Kees Cook <keescook@...omium.org>, x86@...nel.org
Subject: Re: [PATCH V40 12/29] x86: Lock down IO port access when the kernel
 is locked down

On Wed, Jan 05, 2022 at 02:57:57PM +0800, Kai-Heng Feng wrote:

> The affected system from the customer has SecureBoot enabled (and
> hence lockdown), and the kernel upgrade surprisingly broke ioperm()
> usage.

Which kernel was being used that was signed but didn't implement 
lockdown? That sounds, uh, bad.

> The userspace program is proprietary so I can't share it here.

Ok. Are you able to describe anything about what it does so we can 
figure out a better solution?

> Basically this patch makes ioperm() a noop on SecureBoot enabled x86 systems.
> If reverting is not an option, what else can we do to circumvent the regression?

There's two main choices:

1) Disable secure boot on the system in question - if there's a need to 
run userland that can do arbitrary port IO then secure boot isn't 
providing any meaningful security benefit in any case.

2) Implement a kernel driver that abstracts the hardware access away 
from userland, and ensures that all the accesses are performed in a safe 
way.

Doing port IO from userland is almost always a terrible idea - it 
usually involves indexed accesses (you write an address to one port and 
then write or read data from another), and if two processes are trying 
to do this simultaneously (either because SMP or because one process 
gets preempted after writing the address but before accessing the data 
register), and in that case you can end up with accesses to the wrong 
register as a result. You really want this sort of thing to be mediated 
by the kernel, both from a safety perspective and to ensure appropriate 
synchronisation.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ