All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Beulich <jbeulich@suse.com>
To: Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>
Cc: boris.ostrovsky@oracle.com, xen-devel@lists.xenproject.org,
	linux-kernel@vger.kernel.org,
	Stefano Stabellini <stefano.stabellini@xilinx.com>,
	stable@vger.kernel.org
Subject: Re: [PATCH v3] xen: detect uninitialized xenbus in xenbus_init
Date: Tue, 23 Nov 2021 09:20:00 +0100	[thread overview]
Message-ID: <799aea46-80de-972a-571a-b0d946178f4b@suse.com> (raw)
In-Reply-To: <2533e721-a01b-6659-71fa-24a8d2896e84@suse.com>

On 23.11.2021 06:42, Juergen Gross wrote:
> On 22.11.21 23:16, Stefano Stabellini wrote:
>> From: Stefano Stabellini <stefano.stabellini@xilinx.com>
>>
>> If the xenstore page hasn't been allocated properly, reading the value
>> of the related hvm_param (HVM_PARAM_STORE_PFN) won't actually return
>> error. Instead, it will succeed and return zero. Instead of attempting
>> to xen_remap a bad guest physical address, detect this condition and
>> return early.
>>
>> Note that although a guest physical address of zero for
>> HVM_PARAM_STORE_PFN is theoretically possible, it is not a good choice
>> and zero has never been validly used in that capacity.
>>
>> Also recognize the invalid value of INVALID_PFN which is ULLONG_MAX.
>>
>> For 32-bit Linux, any pfn above ULONG_MAX would get truncated. Pfns
>> above ULONG_MAX should never be passed by the Xen tools to HVM guests
>> anyway, so check for this condition and return early.
>>
>> Cc: stable@vger.kernel.org
>> Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
>> ---
>> Changes in v3:
>> - improve in-code comment
>> - improve check
>>
>> Changes in v2:
>> - add check for ULLONG_MAX (unitialized)
>> - add check for ULONG_MAX #if BITS_PER_LONG == 32 (actual error)
>> - add pr_err error message
>> ---
>>   drivers/xen/xenbus/xenbus_probe.c | 24 ++++++++++++++++++++++++
>>   1 file changed, 24 insertions(+)
>>
>> diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
>> index 94405bb3829e..d3ca57d48a73 100644
>> --- a/drivers/xen/xenbus/xenbus_probe.c
>> +++ b/drivers/xen/xenbus/xenbus_probe.c
>> @@ -951,6 +951,30 @@ static int __init xenbus_init(void)
>>   		err = hvm_get_parameter(HVM_PARAM_STORE_PFN, &v);
>>   		if (err)
>>   			goto out_error;
>> +		/*
>> +		 * Uninitialized hvm_params are zero and return no error.
>> +		 * Although it is theoretically possible to have
>> +		 * HVM_PARAM_STORE_PFN set to zero on purpose, in reality it is
>> +		 * not zero when valid. If zero, it means that Xenstore hasn't
>> +		 * been properly initialized. Instead of attempting to map a
>> +		 * wrong guest physical address return error.
>> +		 *
>> +		 * Also recognize the invalid value of INVALID_PFN which is
>> +		 * ULLONG_MAX.
> 
> Adjust the comment, e.g. s/ULLONG_MAX/all bits set/ (in the commit
> message, too)?

I also don't think the reference to INVALID_PFN is appropriate here. Afaict
the two aren't the same on 32-bit. Plus I can't even find a constant named
this way in Linux'es include/.

>> +		 */
>> +		if (!v || !(v + 1)) {
> 
> For me "if (!v || !~v)" would be more readable, but I don't really feel
> strong here.

Oh, indeed.

Jan


      reply	other threads:[~2021-11-23  8:20 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-22 22:16 [PATCH v3] xen: detect uninitialized xenbus in xenbus_init Stefano Stabellini
2021-11-23  5:42 ` Juergen Gross
2021-11-23  8:20   ` Jan Beulich [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=799aea46-80de-972a-571a-b0d946178f4b@suse.com \
    --to=jbeulich@suse.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=jgross@suse.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sstabellini@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=stefano.stabellini@xilinx.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.