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

Re: [Xen-devel] [PATCH] xen-blkback: correctly respond to unknown, non-native requests



On 04/03/13 09:57, Jan Beulich wrote:
>>>> On 01.03.13 at 18:33, David Vrabel <david.vrabel@xxxxxxxxxx> wrote:
>> If the frontend is using a non-native protocol (e.g., a 64-bit
>> frontend with a 32-bit backend) and it sent an unrecognized request,
>> the request was not translated and the response would have the
>> incorrect ID.  This may cause the frontend driver to behave
>> incorrectly or crash.
>>
>> Since the ID field in the request is always in the same place,
>> regardless of the request type we can get the correct ID and make a
>> valid response (which will report BLKIF_RSP_EOPNOTSUPP).
>>
>> This bug affected 64-bit SLES 11 guests when using a 32-bit backend.
>> This guest does a BLKIF_OP_RESERVED_1 (BLKIF_OP_PACKET in the SLES
>> source) and would crash in blkif_int() as the ID in the response would
>> be invalid.
> 
> I recognize the need for the change, and I'm also fine with the
> patch, but ...
> 
>> --- a/include/xen/interface/io/blkif.h
>> +++ b/include/xen/interface/io/blkif.h
>> @@ -138,11 +138,21 @@ struct blkif_request_discard {
>>      uint8_t        _pad3;
>>  } __attribute__((__packed__));
>>  
>> +struct blkif_request_unknown {
>> +    uint8_t      _pad1;
>> +    blkif_vdev_t _pad2;        /* only for read/write requests         */
>> +#ifdef CONFIG_X86_64
>> +    uint32_t     _pad3;        /* offsetof(blkif_req..,u.unknown.id)==8*/
>> +#endif
>> +    uint64_t     id;           /* private guest value, echoed in resp  */
>> +} __attribute__((__packed__));
>> +
>>  struct blkif_request {
>>      uint8_t        operation;    /* BLKIF_OP_???                         */
>>      union {
>>              struct blkif_request_rw rw;
>>              struct blkif_request_discard discard;
>> +            struct blkif_request_unknown unknown;
>>      } u;
>>  } __attribute__((__packed__));
>>  
> 
> ... I wonder whether "unknown" here really is a suitable term.
> I'd favor "generic" or "other", as "unknown" suggests we know
> _nothing_ about it, which would include the position of the ID
> field.

'other' it is then.

> Also, we'd need a matching patch for the master copy of the
> public header...

The header in Xen only has the native structures doesn't have any the
union so there's nothing to fix.

David

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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