mirror of
https://github.com/systemd/systemd.git
synced 2024-11-06 08:26:52 +03:00
dhcp-identifier: fix for unaligned write
Reported by Michael Olbrich.
This commit is contained in:
parent
69301c1743
commit
9ee18af3a0
Notes:
Lennart Poettering
2015-05-21 19:30:42 +02:00
Backport: bugfix
@ -46,8 +46,9 @@ int dhcp_identifier_set_duid_en(struct duid *duid, size_t *len) {
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
duid->type = htobe16(DHCP6_DUID_EN);
|
unaligned_write_be16(&duid->type, DHCP6_DUID_EN);
|
||||||
duid->en.pen = htobe32(SYSTEMD_PEN);
|
unaligned_write_be32(&duid->en.pen, SYSTEMD_PEN);
|
||||||
|
|
||||||
*len = sizeof(duid->type) + sizeof(duid->en);
|
*len = sizeof(duid->type) + sizeof(duid->en);
|
||||||
|
|
||||||
/* a bit of snake-oil perhaps, but no need to expose the machine-id
|
/* a bit of snake-oil perhaps, but no need to expose the machine-id
|
||||||
@ -58,7 +59,7 @@ int dhcp_identifier_set_duid_en(struct duid *duid, size_t *len) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int dhcp_identifier_set_iaid(int ifindex, uint8_t *mac, size_t mac_len, uint32_t *_id) {
|
int dhcp_identifier_set_iaid(int ifindex, uint8_t *mac, size_t mac_len, void *_id) {
|
||||||
/* name is a pointer to memory in the udev_device struct, so must
|
/* name is a pointer to memory in the udev_device struct, so must
|
||||||
have the same scope */
|
have the same scope */
|
||||||
_cleanup_udev_device_unref_ struct udev_device *device = NULL;
|
_cleanup_udev_device_unref_ struct udev_device *device = NULL;
|
||||||
@ -92,7 +93,7 @@ int dhcp_identifier_set_iaid(int ifindex, uint8_t *mac, size_t mac_len, uint32_t
|
|||||||
siphash24((uint8_t*)&id, mac, mac_len, HASH_KEY.bytes);
|
siphash24((uint8_t*)&id, mac, mac_len, HASH_KEY.bytes);
|
||||||
|
|
||||||
/* fold into 32 bits */
|
/* fold into 32 bits */
|
||||||
*_id = (id & 0xffffffff) ^ (id >> 32);
|
unaligned_write_be32(_id, (id & 0xffffffff) ^ (id >> 32));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include "macro.h"
|
#include "macro.h"
|
||||||
#include "sparse-endian.h"
|
#include "sparse-endian.h"
|
||||||
|
#include "unaligned.h"
|
||||||
#include "sd-id128.h"
|
#include "sd-id128.h"
|
||||||
|
|
||||||
/* RFC 3315 section 9.1:
|
/* RFC 3315 section 9.1:
|
||||||
@ -61,4 +62,4 @@ struct duid {
|
|||||||
} _packed_;
|
} _packed_;
|
||||||
|
|
||||||
int dhcp_identifier_set_duid_en(struct duid *duid, size_t *len);
|
int dhcp_identifier_set_duid_en(struct duid *duid, size_t *len);
|
||||||
int dhcp_identifier_set_iaid(int ifindex, uint8_t *mac, size_t mac_len, uint32_t *_id);
|
int dhcp_identifier_set_iaid(int ifindex, uint8_t *mac, size_t mac_len, void *_id);
|
||||||
|
Loading…
Reference in New Issue
Block a user