On 9/8/22 8:48 PM, Huang, Kai wrote: > On Wed, 2022-09-07 at 17:27 -0700, Kuppuswamy Sathyanarayanan wrote: >> +TEST(verify_report) >> +{ >> + __u8 reportdata[TDX_REPORTDATA_LEN]; >> + struct tdreport tdreport; >> + struct tdx_report_req req; >> + int devfd, i; >> + >> + devfd = open(TDX_GUEST_DEVNAME, O_RDWR | O_SYNC); >> + >> + ASSERT_LT(0, devfd); >> + >> + /* Generate sample report data */ >> + for (i = 0; i < TDX_REPORTDATA_LEN; i++) >> + reportdata[i] = i; >> + >> + /* Initialize IOCTL request */ >> + req.subtype = 0; >> + req.reportdata = (__u64)reportdata; >> + req.rpd_len = TDX_REPORTDATA_LEN; >> + req.tdreport = (__u64)&tdreport; >> + req.tdr_len = sizeof(tdreport); >> + > > 'req' is a local variable, which isn't guaranteed to be zero. Looks you need to > explicitly clear 'req' otherwise the req.reserved[7] may not be zero. In the next version, I explicitly set it to 0. I could initialize the struct to 0. But doing it explicitly will show the expected values clearly. memset(req.reserved, 0, sizeof(req.reserved)); > -- Sathyanarayanan Kuppuswamy Linux Kernel Developer