In socket.h, sockaddr is defined as follows:
struct sockaddr {
sa_family_t sa_family;
char sa_data[];
};
However, according to Linux man pages, it should be defined as follows:
struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
}
This can cause out-of-bounds memory access when casting between sockaddr and sockaddr_in, which is often done. For reference, here is how sockaddr_in is defined in libctru in.h :
struct sockaddr_in {
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
};
I am no socket expert, so I'm not sure if this is intended or not.
Thank you!
In socket.h,
sockaddris defined as follows:However, according to Linux man pages, it should be defined as follows:
This can cause out-of-bounds memory access when casting between
sockaddrandsockaddr_in, which is often done. For reference, here is howsockaddr_inis defined in libctru in.h :I am no socket expert, so I'm not sure if this is intended or not.
Thank you!