|
Lines 753-768
static struct udevd_uevent_msg *get_netl
Link Here
|
| 753 |
struct udevd_uevent_msg *msg; |
753 |
struct udevd_uevent_msg *msg; |
| 754 |
int bufpos; |
754 |
int bufpos; |
| 755 |
ssize_t size; |
755 |
ssize_t size; |
|
|
756 |
struct sockaddr_nl snl; |
| 757 |
struct msghdr smsg; |
| 758 |
struct iovec iov; |
| 756 |
static char buffer[UEVENT_BUFFER_SIZE+512]; |
759 |
static char buffer[UEVENT_BUFFER_SIZE+512]; |
| 757 |
char *pos; |
760 |
char *pos; |
| 758 |
|
761 |
|
| 759 |
size = recv(uevent_netlink_sock, &buffer, sizeof(buffer), 0); |
762 |
iov.iov_base = buffer; |
|
|
763 |
iov.iov_len = sizeof(buffer); |
| 764 |
|
| 765 |
memset(&smsg, 0x00, sizeof(struct msghdr)); |
| 766 |
smsg.msg_name = &snl; |
| 767 |
smsg.msg_namelen = sizeof(struct sockaddr_nl); |
| 768 |
smsg.msg_iov = &iov; |
| 769 |
smsg.msg_iovlen = 1; |
| 770 |
|
| 771 |
size = recvmsg(uevent_netlink_sock, &smsg, 0); |
| 760 |
if (size < 0) { |
772 |
if (size < 0) { |
| 761 |
if (errno != EINTR) |
773 |
if (errno != EINTR) |
| 762 |
err("unable to receive kernel netlink message: %s\n", strerror(errno)); |
774 |
err("unable to receive kernel netlink message: %s\n", strerror(errno)); |
| 763 |
return NULL; |
775 |
return NULL; |
| 764 |
} |
776 |
} |
| 765 |
|
777 |
|
|
|
778 |
if ((snl.nl_groups != 1) || (snl.nl_pid != 0)) { |
| 779 |
info("ignored netlink message from invalid group/sender %d/%d\n", |
| 780 |
snl.nl_groups, snl.nl_pid); |
| 781 |
return NULL; |
| 782 |
} |
| 783 |
|
| 766 |
if ((size_t)size > sizeof(buffer)-1) |
784 |
if ((size_t)size > sizeof(buffer)-1) |
| 767 |
size = sizeof(buffer)-1; |
785 |
size = sizeof(buffer)-1; |
| 768 |
buffer[size] = '\0'; |
786 |
buffer[size] = '\0'; |