|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] x86: guard against port I/O overlapping the RTC/CMOS range
On Mon, Jul 20, 2020 at 01:58:40PM +0200, Jan Beulich wrote:
> On 20.07.2020 12:52, Roger Pau Monné wrote:
> > On Fri, Jul 17, 2020 at 03:10:43PM +0200, Jan Beulich wrote:
> >> Since we intercept RTC/CMOS port accesses, let's do so consistently in
> >> all cases, i.e. also for e.g. a dword access to [006E,0071]. To avoid
> >> the risk of unintended impact on Dom0 code actually doing so (despite
> >> the belief that none ought to exist), also extend
> >> guest_io_{read,write}() to decompose accesses where some ports are
> >> allowed to be directly accessed and some aren't.
> >
> > Wouldn't the same apply to displaced accesses to port 0xcf8?
>
> No, CF8 is special - partial accesses have no meaning as to the
> index selection for subsequent CFC accesses. Or else CF9
> couldn't be a standalone port with entirely different
> functionality..
Right:
Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
See below.
> >> @@ -373,25 +384,31 @@ static int read_io(unsigned int port, un
> >> return X86EMUL_OKAY;
> >> }
> >>
> >> +static void _guest_io_write(unsigned int port, unsigned int bytes,
> >> + uint32_t data)
> >
> > There's nothing guest specific about this function I think? If so you
> > could drop the _guest_ prefix and just name it io_write?
>
> Hmm, when choosing the name I decided that (a) it's a helper of
> the other function and (b) it's still guest driven data that we
> output.
Well, the fact that it's guest driven data shouldn't matter much,
because there are no guest-specific checks in the function anyway - it
might as well be used for non-guest driven data AFAICT? (even if it's
not the case ATM).
It's likely that if I have to change code here in the future I will
drop such prefix, but the change is correct regardless of the naming,
so I'm not going to insist.
> >> +{
> >> + switch ( bytes )
> >> + {
> >> + case 1:
> >> + outb((uint8_t)data, port);
> >> + if ( amd_acpi_c1e_quirk )
> >> + amd_check_disable_c1e(port, (uint8_t)data);
> >> + break;
> >> + case 2:
> >> + outw((uint16_t)data, port);
> >> + break;
> >> + case 4:
> >> + outl(data, port);
> >> + break;
> >> + }
> >
> > Newlines after break statements would be nice, and maybe add a
> > default: ASSERT_UNREACHABLE() case to be on the safe side?
>
> Well, yes, I guess I should. But then if I edit this moved code,
> I guess I'll also get rid of the stray casts.
Was going to also ask for that, but I assumed there might we some
value in making the truncations explicit here. Feel free to drop those
also if you end up making the above adjustments.
Thanks, Roger.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |