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)
|
||||
return r;
|
||||
|
||||
duid->type = htobe16(DHCP6_DUID_EN);
|
||||
duid->en.pen = htobe32(SYSTEMD_PEN);
|
||||
unaligned_write_be16(&duid->type, DHCP6_DUID_EN);
|
||||
unaligned_write_be32(&duid->en.pen, SYSTEMD_PEN);
|
||||
|
||||
*len = sizeof(duid->type) + sizeof(duid->en);
|
||||
|
||||
/* 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
|
||||
have the same scope */
|
||||
_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);
|
||||
|
||||
/* fold into 32 bits */
|
||||
*_id = (id & 0xffffffff) ^ (id >> 32);
|
||||
unaligned_write_be32(_id, (id & 0xffffffff) ^ (id >> 32));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -24,6 +24,7 @@
|
||||
|
||||
#include "macro.h"
|
||||
#include "sparse-endian.h"
|
||||
#include "unaligned.h"
|
||||
#include "sd-id128.h"
|
||||
|
||||
/* RFC 3315 section 9.1:
|
||||
@ -61,4 +62,4 @@ struct duid {
|
||||
} _packed_;
|
||||
|
||||
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