Re: [PATCH v4 04/12] iommu/vt-d: Add 256-bit invalidation descriptor support

From: Lu Baolu
Date: Thu Nov 08 2018 - 01:18:03 EST




On 11/8/18 1:48 PM, Liu, Yi L wrote:
From: Liu, Yi L
Sent: Thursday, November 8, 2018 1:45 PM
+ memcpy(desc, qi->desc + (wait_index << shift),

Would "memcpy(desc, (unsigned long long) (qi->desc + (wait_index
<< shift)," be more safe?

Can that be compiled? memcpy() requires a "const void *" for the
second
parameter.
By the way, why it's safer with this casting?

This is just an example. My point is the possibility that "qi->desc
+ (wait_index <<
shift)"
would be treated as "qi->desc plus (wait_index <<
shift)*sizeof(*qi->desc)". Is it possible for kernel build?

qi->desc is of type of "void *".

no, I donât think so... Refer to the code below. Even it has no correctness issue her,
It's not due to qi->desc is "void *" type...

struct qi_desc {
- u64 low, high;
+ u64 qw0;
+ u64 qw1;
+ u64 qw2;
+ u64 qw3;
};

Oops, just see you modified it to be "void *" in this patch. Ok, then this is fair enough.

Yes. :-)

Best regards,
Lu Baolu