Skip to content

[compiler-rt][sanitizer] fix msghdr for musl #136195

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 27 additions & 3 deletions compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
Original file line number Diff line number Diff line change
Expand Up @@ -476,7 +476,31 @@ struct __sanitizer_cmsghdr {
int cmsg_level;
int cmsg_type;
};
#else
# elif SANITIZER_MUSL
struct __sanitizer_msghdr {
void *msg_name;
unsigned msg_namelen;
struct __sanitizer_iovec *msg_iov;
int msg_iovlen;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think big endian is realy supported.
Let's assume little endian.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed the big endian code.

# if SANITIZER_WORDSIZE == 64
int __pad1;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do you have a link to declaration?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You mean for __pad1?
It is not a macro.

# endif
void *msg_control;
unsigned msg_controllen;
# if SANITIZER_WORDSIZE == 64
int __pad2;
# endif
int msg_flags;
};
struct __sanitizer_cmsghdr {
unsigned cmsg_len;
# if SANITIZER_WORDSIZE == 64
int __pad1;
# endif
int cmsg_level;
int cmsg_type;
};
# else
// In POSIX, int msg_iovlen; socklen_t msg_controllen; socklen_t cmsg_len; but
// many implementations don't conform to the standard.
struct __sanitizer_msghdr {
Expand All @@ -493,9 +517,9 @@ struct __sanitizer_cmsghdr {
int cmsg_level;
int cmsg_type;
};
#endif
# endif

#if SANITIZER_LINUX
# if SANITIZER_LINUX
struct __sanitizer_mmsghdr {
__sanitizer_msghdr msg_hdr;
unsigned int msg_len;
Expand Down