1. 31 Jan, 2022 1 commit
    • Jakub Sitnicki's avatar
      bpf: Make dst_port field in struct bpf_sock 16-bit wide · 4421a582
      Jakub Sitnicki authored
      Menglong Dong reports that the documentation for the dst_port field in
      struct bpf_sock is inaccurate and confusing. From the BPF program PoV, the
      field is a zero-padded 16-bit integer in network byte order. The value
      appears to the BPF user as if laid out in memory as so:
      
        offsetof(struct bpf_sock, dst_port) + 0  <port MSB>
                                            + 8  <port LSB>
                                            +16  0x00
                                            +24  0x00
      
      32-, 16-, and 8-bit wide loads from the field are all allowed, but only if
      the offset into the field is 0.
      
      32-bit wide loads from dst_port are especially confusing. The loaded value,
      after converting to host byte order with bpf_ntohl(dst_port), contains the
      port number in the upper 16-bits.
      
      Remove the confusion by splitting the field into two 16-bit fields. For
      backward compatibility, allow 32-bit wide loads from offsetof(struct
      bpf_sock, dst_port).
      
      While at it, allow loads 8-bit loads at offset [0] and [1] from dst_port.
      Reported-by: default avatarMenglong Dong <imagedong@tencent.com>
      Signed-off-by: default avatarJakub Sitnicki <jakub@cloudflare.com>
      Link: https://lore.kernel.org/r/20220130115518.213259-2-jakub@cloudflare.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      4421a582
  2. 28 Jan, 2022 8 commits
  3. 27 Jan, 2022 22 commits
  4. 26 Jan, 2022 9 commits