[systemd-devel] [PATCH] dhcp-network: ignore IP packets with More Fragments (MF) flag set
Tom Gundersen
teg at jklm.no
Mon Jul 7 06:10:44 PDT 2014
On Mon, Jul 7, 2014 at 2:45 PM, Michal Sekletar <msekleta at redhat.com> wrote:
> We already ignore IP fragments, because we expect that Fragment
> offset (FO) field is not set. However first fragment in a fragmented IP
> flow will have all zeroes in FO field. We should ignore such packet as
> well, thus we need to look at MF flag in the IP header. Checking MF flag
> will filter out all except last packet in fragmented flows. Last one
> will be ruled out by next check for value of FO.
> ---
> src/libsystemd-network/dhcp-network.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/src/libsystemd-network/dhcp-network.c b/src/libsystemd-network/dhcp-network.c
> index f119cae..455d5a8 100644
> --- a/src/libsystemd-network/dhcp-network.c
> +++ b/src/libsystemd-network/dhcp-network.c
> @@ -41,6 +41,10 @@ int dhcp_network_bind_raw_socket(int index, union sockaddr_union *link,
> BPF_STMT(BPF_LD + BPF_B + BPF_ABS, offsetof(DHCPPacket, ip.protocol)), /* A <- IP protocol */
> BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, IPPROTO_UDP, 1, 0), /* IP protocol == UDP ? */
> BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
> + BPF_STMT(BPF_LD + BPF_B + BPF_ABS, offsetof(DHCPPacket, ip.frag_off)), /* A <- Flags */
> + BPF_STMT(BPF_ALU + BPF_AND + BPF_K, 0x20), /* A <- A & 0x20 */
Maybe express better what we are checking here? Something like /* A <-
A & 0x20 (More Fragments bit) */
> + BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 1, 0), /* A == 0 ? */
> + BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
> BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(DHCPPacket, ip.frag_off)), /* A <- Flags + Fragment offset */
> BPF_STMT(BPF_ALU + BPF_AND + BPF_K, 0x1fff), /* A <- A & 0x1fff */
Actually, here we should probably comment /* A <- A & 0x1fff (Fragment
offset) */
> BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 1, 0), /* A == 0 ? */
Apart from that, it looks good. So please push with updated comments.
Cheers,
Tom
More information about the systemd-devel
mailing list