fuzz-ndisc-rs: also test packets with sd-radv
Addresses https://github.com/systemd/systemd/pull/32267#discussion_r1566715787. Suggested-by: Evgeny Vereshchagin <evvers@ya.ru>
This commit is contained in:
committed by
Evgeny Vereshchagin
parent
88382e8dab
commit
54a4ffc077
@@ -5,6 +5,7 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include "sd-ndisc.h"
|
||||
#include "sd-radv.h"
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "fd-util.h"
|
||||
@@ -31,7 +32,30 @@ static void test_with_sd_ndisc(const uint8_t *data, size_t size) {
|
||||
assert_se(write(test_fd[1], data, size) == (ssize_t) size);
|
||||
(void) sd_event_run(e, UINT64_MAX);
|
||||
assert_se(sd_ndisc_stop(nd) >= 0);
|
||||
close(test_fd[1]);
|
||||
test_fd[1] = safe_close(test_fd[1]);
|
||||
TAKE_FD(test_fd[0]); /* It should be already closed by sd_ndisc_stop(). */
|
||||
}
|
||||
|
||||
static void test_with_sd_radv(const uint8_t *data, size_t size) {
|
||||
struct ether_addr mac_addr = {
|
||||
.ether_addr_octet = {'A', 'B', 'C', '1', '2', '3'}
|
||||
};
|
||||
_cleanup_(sd_event_unrefp) sd_event *e = NULL;
|
||||
_cleanup_(sd_radv_unrefp) sd_radv *ra = NULL;
|
||||
|
||||
assert_se(socketpair(AF_UNIX, SOCK_SEQPACKET | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_fd) >= 0);
|
||||
|
||||
assert_se(sd_event_new(&e) >= 0);
|
||||
assert_se(sd_radv_new(&ra) >= 0);
|
||||
assert_se(sd_radv_attach_event(ra, e, 0) >= 0);
|
||||
assert_se(sd_radv_set_ifindex(ra, 42) >= 0);
|
||||
assert_se(sd_radv_set_mac(ra, &mac_addr) >= 0);
|
||||
assert_se(sd_radv_start(ra) >= 0);
|
||||
assert_se(write(test_fd[0], data, size) == (ssize_t) size);
|
||||
(void) sd_event_run(e, UINT64_MAX);
|
||||
assert_se(sd_radv_stop(ra) >= 0);
|
||||
test_fd[0] = safe_close(test_fd[0]);
|
||||
TAKE_FD(test_fd[1]); /* It should be already closed by sd_radv_stop(). */
|
||||
}
|
||||
|
||||
static void test_with_icmp6_packet(const uint8_t *data, size_t size) {
|
||||
@@ -68,6 +92,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
fuzz_setup_logging();
|
||||
|
||||
test_with_sd_ndisc(data, size);
|
||||
test_with_sd_radv(data, size);
|
||||
test_with_icmp6_packet(data, size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user