Re: [PATCH v9 03/24] virt: sev-guest: Make payload a variable length array

Tom Lendacky
2024-06-24T13:00:44Z

On 6/23/24 11:16, Nikunj A. Dadhania wrote:
> On 6/21/2024 10:24 PM, Borislav Petkov wrote:
>> On Fri, May 31, 2024 at 10:00:17AM +0530, Nikunj A Dadhania wrote:
>>> Currently, guest message is PAGE_SIZE bytes and payload is hard-coded to
>>> 4000 bytes, assuming snp_guest_msg_hdr structure as 96 bytes.
>>>
>>> Remove the structure size assumption and hard-coding of payload size and
>>> instead use variable length array.
>>
>> I don't understand here what hard-coding is being removed?
>>
>> It is simply done differently:
>>
>> from
>>
>>> - snp_dev->request = alloc_shared_pages(dev, sizeof(struct snp_guest_msg));
>>
>> to
>>
>>> + snp_dev->request = alloc_shared_pages(dev, SNP_GUEST_MSG_SIZE);
>>
>> Maybe I'm missing the point here but do you mean by removing the hard-coding
>> this:
>>
>> +#define SNP_GUEST_MSG_SIZE 4096
>> +#define SNP_GUEST_MSG_PAYLOAD_SIZE (SNP_GUEST_MSG_SIZE - sizeof(struct snp_guest_msg))
>>
>> where the msg payload size will get computed at build time and you won't have
>> to do that 4000 in the struct definition:
>>
>> u8 payload[4000];
>>
>> ?
>
> Yes, payload was earlier fixed at 4000 bytes, without considering the size of snp_guest_msg.

An alternative to the #defines would be something like:

struct snp_guest_msg {
struct snp_guest_msg_hdr hdr;
u8 payload[PAGE_SIZE - sizeof(struct snp_guest_msg_hdr)];
} __packed;

Not sure it matters, but does reduce the changes while ensuring the
payload plus header doesn't exceed a page.

Thanks,
Tom

>
> Regards
> Nikunj