[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 1/3] x86: Reject bad %dr6/%dr7 values when loading guest state


  • To: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Wed, 30 Aug 2023 17:12:29 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=EzO3aEO+QNTL6cHJibhd5bsBTTNKCXbJhWQpEdGfbto=; b=W7F0MMofp+XCx92HS77vGyt131hZBxdvE0UzIC+XENzDBQlT/Na14rElbzwrBdMGpsuVbKli0n8vVBUjiZaoEPh28wh5hlpFSCa1BvITs4P2WNyCS48ggXwerGq5MjebUG0V4zVJCOlyC17zG4JKPbA8ZFdnlkXF7FaO4UE7UJCAg7UdQ600PvznZU/2Nksh1Uqmz2QLRqoI3oCbZ6jG8ayBJDH7GdCrPZjybO0PhspcOF2TaCNXZ2PePRfKdaHy/s3Ky9EB5kYMMc38uxpxMBJqN4sIemU3UUYp6OmRhCoMj0srhV4GvpxTwYDtScv8UcJXCQfIXvx+eADLCtUfEw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jN1Ethr0/qfeMqNL42VIPT+t+2kMAsi42Te2oEHxUOLvFG7QwJdqFuzADATmrYyLU4sS11Ah9226VZUSkgZTD24i7IRANry31M7aT58jCVvLPVxHDBxjW/1xax4O4pNnaMlWBJxS3XKwl8ENMdQeRlTrMKbIHCzJ4R9Yt3g0j+pIZMM5E0eu4dsxSEHom6InswRZU33Uqz9dfcHmBZpDGJOuQEyc1nQMkzTbhaERu0QmKmlCr3lk9cTfVW9VBXYZ8fu3u+dL3FGdikPxJHIL0xMJrGjIC+UtEMMPjHZ0Q+syqoB1bDVIsEknoRzxmYpZH5uCM2/vUtjWbcqTi/rZJQ==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
  • Cc: Roger Pau Monné <roger.pau@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Jinoh Kang <jinoh.kang.kr@xxxxxxxxx>, Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Wed, 30 Aug 2023 15:12:43 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 30.08.2023 16:35, Andrew Cooper wrote:
> On 29/08/2023 3:08 pm, Jan Beulich wrote:
>> On 29.08.2023 15:43, Andrew Cooper wrote:
>>> --- a/xen/arch/x86/domain.c
>>> +++ b/xen/arch/x86/domain.c
>>> @@ -1074,8 +1074,27 @@ int arch_set_info_guest(
>>>  #endif
>>>      flags = c(flags);
>>>  
>>> +    if ( !compat )
>>> +    {
>>> +        if ( c(debugreg[6]) != (uint32_t)c(debugreg[6]) ||
>>> +             c(debugreg[7]) != (uint32_t)c(debugreg[7]) )
>>> +            return -EINVAL;
>>> +    }
>>> +
>>>      if ( is_pv_domain(d) )
>>>      {
>>> +        /*
>>> +         * Prior to Xen 4.11, dr5 was used to hold the emulated-only
>>> +         * subset of dr7, and dr4 was unused.
>>> +         *
>>> +         * In Xen 4.11 and later, dr4/5 are written as zero, ignored for
>>> +         * backwards compatibility, and dr7 emulation is handled
>>> +         * internally.
>>> +         */
>>> +        for ( i = 0; i < ARRAY_SIZE(v->arch.dr); i++ )
>>> +            if ( !access_ok(c(debugreg[i]), sizeof(long)) )
>> Don't you mean __addr_ok() here, i.e. not including the
>> is_compat_arg_xlat_range() check? (Else I would have asked why
>> sizeof(long), but that question resolves itself with using the other
>> macro.)
> 
> For now, I'm simply moving a check from set_debugreg() earlier in
> arch_set_info_guest().
> 
> I think it would be beneficial to keep that change independent.

Hmm, difficult. I'd be okay if you indeed moved the other check. But
you duplicate it here, and duplicating questionable code is, well,
questionable.

Jan



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.