Skip to content

ICMPv6 Router Solicitations are generated with invalid checksums #802

Description

@taspelund

Bad codepath in ndp/src/util.rs:

// dst == None here
cksum(src, dst, ICMP6_RS_ULP_LEN, &mut out);

// but None means ff02::2 here
let dst = SocketAddrV6::new(
    dst.unwrap_or(ALL_ROUTERS_MCAST),
    0,
    0,
    ifindex,
);

cksum(None) internally uses ALL_NODES_MCAST (ff02::1), which is correct for Router Advertisements. But send_rs(None) sends Router Solicitations to ALL_ROUTERS_MCAST (ff02::2).

ICMPv6 checksums include the IPv6 pseudo-header destination, so multicast RS packets are checksummed for ff02::1 but sent to ff02::2. Receivers should drop them as invalid

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugmgdMaghemite daemonndpIPv6 Neighbor Discovery ProtocolrustPull requests that update rust code

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions