chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
bc078e7
)
sd-dhcp-client: recevie_message - verify cmsg_len before reading
author
Tom Gundersen
<teg@jklm.no>
Thu, 10 Apr 2014 22:51:55 +0000
(
00:51
+0200)
committer
Tom Gundersen
<teg@jklm.no>
Thu, 10 Apr 2014 22:52:23 +0000
(
00:52
+0200)
src/libsystemd-network/sd-dhcp-client.c
patch
|
blob
|
history
diff --git
a/src/libsystemd-network/sd-dhcp-client.c
b/src/libsystemd-network/sd-dhcp-client.c
index da41c478eaeb477ba286001e5517abc6014ccca9..392e294ae43e27fe404c30c03542347e201eb99b 100644
(file)
--- a/
src/libsystemd-network/sd-dhcp-client.c
+++ b/
src/libsystemd-network/sd-dhcp-client.c
@@
-1124,8
+1124,10
@@
static int client_receive_message_raw(sd_event_source *s, int fd,
return 0;
for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
return 0;
for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
- if (cmsg->cmsg_level == SOL_PACKET && cmsg->cmsg_type == PACKET_AUXDATA) {
- struct tpacket_auxdata *aux = (void *)CMSG_DATA(cmsg);
+ if (cmsg->cmsg_level == SOL_PACKET &&
+ cmsg->cmsg_type == PACKET_AUXDATA &&
+ cmsg->cmsg_len == CMSG_LEN(sizeof(struct tpacket_auxdata))) {
+ struct tpacket_auxdata *aux = (struct tpacket_auxdata*)CMSG_DATA(cmsg);
checksum = !(aux->tp_status & TP_STATUS_CSUMNOTREADY);
break;
checksum = !(aux->tp_status & TP_STATUS_CSUMNOTREADY);
break;