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'; |