Skip to content

Commit 5aa87ec

Browse files
committed
network: neighbor: use sd_netlink_message_read_data() at one more place
1 parent 2775e1c commit 5aa87ec

File tree

1 file changed

+7
-30
lines changed

1 file changed

+7
-30
lines changed

src/network/networkd-neighbor.c

Lines changed: 7 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -437,36 +437,9 @@ int link_drop_neighbors(Link *link) {
437437
return r;
438438
}
439439

440-
static int manager_rtnl_process_neighbor_lladdr(sd_netlink_message *message, union lladdr_union *lladdr, size_t *size) {
441-
int r;
442-
443-
assert(message);
444-
assert(lladdr);
445-
assert(size);
446-
447-
r = sd_netlink_message_read(message, NDA_LLADDR, sizeof(lladdr->ip.in6), &lladdr->ip.in6);
448-
if (r >= 0) {
449-
*size = sizeof(lladdr->ip.in6);
450-
return r;
451-
}
452-
453-
r = sd_netlink_message_read(message, NDA_LLADDR, sizeof(lladdr->mac), &lladdr->mac);
454-
if (r >= 0) {
455-
*size = sizeof(lladdr->mac);
456-
return r;
457-
}
458-
459-
r = sd_netlink_message_read(message, NDA_LLADDR, sizeof(lladdr->ip.in), &lladdr->ip.in);
460-
if (r >= 0) {
461-
*size = sizeof(lladdr->ip.in);
462-
return r;
463-
}
464-
465-
return r;
466-
}
467-
468440
int manager_rtnl_process_neighbor(sd_netlink *rtnl, sd_netlink_message *message, Manager *m) {
469441
_cleanup_(neighbor_freep) Neighbor *tmp = NULL;
442+
_cleanup_free_ void *lladdr = NULL;
470443
Neighbor *neighbor = NULL;
471444
uint16_t type, state;
472445
int ifindex, r;
@@ -536,11 +509,15 @@ int manager_rtnl_process_neighbor(sd_netlink *rtnl, sd_netlink_message *message,
536509
return 0;
537510
}
538511

539-
r = manager_rtnl_process_neighbor_lladdr(message, &tmp->lladdr, &tmp->lladdr_size);
512+
r = sd_netlink_message_read_data(message, NDA_LLADDR, &tmp->lladdr_size, &lladdr);
540513
if (r < 0) {
541-
log_link_warning_errno(link, r, "rtnl: received neighbor message with invalid lladdr, ignoring: %m");
514+
log_link_warning_errno(link, r, "rtnl: received neighbor message without valid lladdr, ignoring: %m");
515+
return 0;
516+
} else if (!IN_SET(tmp->lladdr_size, sizeof(struct ether_addr), sizeof(struct in_addr), sizeof(struct in6_addr))) {
517+
log_link_warning(link, "rtnl: received neighbor message with invalid lladdr size (%zu), ignoring: %m", tmp->lladdr_size);
542518
return 0;
543519
}
520+
memcpy(&tmp->lladdr, lladdr, tmp->lladdr_size);
544521

545522
(void) neighbor_get(link, tmp, &neighbor);
546523

0 commit comments

Comments
 (0)