mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-04-08 12:02:33 +02:00
iommufd/selftest: Make it clearer to gcc that the access is not out of bounds
GCC gets a bit confused and reports:
In function '_test_cmd_get_hw_info',
inlined from 'iommufd_ioas_get_hw_info' at iommufd.c:779:3,
inlined from 'wrapper_iommufd_ioas_get_hw_info' at iommufd.c:752:1:
>> iommufd_utils.h:804:37: warning: array subscript 'struct iommu_test_hw_info[0]' is partly outside array bounds of 'struct iommu_test_hw_info_buffer_smaller[1]' [-Warray-bounds=]
804 | assert(!info->flags);
| ~~~~^~~~~~~
iommufd.c: In function 'wrapper_iommufd_ioas_get_hw_info':
iommufd.c:761:11: note: object 'buffer_smaller' of size 4
761 | } buffer_smaller;
| ^~~~~~~~~~~~~~
While it is true that "struct iommu_test_hw_info[0]" is partly out of
bounds of the input pointer, it is not true that info->flags is out of
bounds. Unclear why it warns on this.
Reuse an existing properly sized stack buffer and pass a truncated length
instead to test the same thing.
Fixes: af4fde93c3 ("iommufd/selftest: Add coverage for IOMMU_GET_HW_INFO ioctl")
Link: https://patch.msgid.link/r/0-v1-63a2cffb09da+4486-iommufd_gcc_bounds_jgg@nvidia.com
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Nicolin Chen <nicolinc@nvidia.com>
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202512032344.kaAcKFIM-lkp@intel.com/
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
@@ -755,9 +755,6 @@ TEST_F(iommufd_ioas, get_hw_info)
|
||||
struct iommu_test_hw_info info;
|
||||
uint64_t trailing_bytes;
|
||||
} buffer_larger;
|
||||
struct iommu_test_hw_info_buffer_smaller {
|
||||
__u32 flags;
|
||||
} buffer_smaller;
|
||||
|
||||
if (self->device_id) {
|
||||
uint8_t max_pasid = 0;
|
||||
@@ -789,8 +786,9 @@ TEST_F(iommufd_ioas, get_hw_info)
|
||||
* the fields within the size range still gets updated.
|
||||
*/
|
||||
test_cmd_get_hw_info(self->device_id,
|
||||
IOMMU_HW_INFO_TYPE_DEFAULT,
|
||||
&buffer_smaller, sizeof(buffer_smaller));
|
||||
IOMMU_HW_INFO_TYPE_DEFAULT, &buffer_exact,
|
||||
offsetofend(struct iommu_test_hw_info,
|
||||
flags));
|
||||
test_cmd_get_hw_info_pasid(self->device_id, &max_pasid);
|
||||
ASSERT_EQ(0, max_pasid);
|
||||
if (variant->pasid_capable) {
|
||||
|
||||
Reference in New Issue
Block a user