Bug:
23239997
The Clang update exposed a latent bug in the code here, where a pointer
to a local variable escaped the encapsulating block. Clang noticed the
end of this object's lifetime, and removed assignments to its original
storage (because they are now dead assignments). By moving the union out
of the block, it will survive until the sendmsg() call, and the expected
writes will be restored.
Change-Id: If2106d2f53d761ddca6dd26ab2648244d737dcd9
message.msg_iov = &iov;
message.msg_iovlen = 1;
- if (data->cmdId != FwmarkCommand::QUERY_USER_ACCESS) {
- union {
- cmsghdr cmh;
- char cmsg[CMSG_SPACE(sizeof(fd))];
- } cmsgu;
+ union {
+ cmsghdr cmh;
+ char cmsg[CMSG_SPACE(sizeof(fd))];
+ } cmsgu;
+ if (data->cmdId != FwmarkCommand::QUERY_USER_ACCESS) {
memset(cmsgu.cmsg, 0, sizeof(cmsgu.cmsg));
message.msg_control = cmsgu.cmsg;
message.msg_controllen = sizeof(cmsgu.cmsg);