On Fri, Dec 17, 2021 at 4:30 PM Dumitru Ceara <[email protected]> wrote:
>
> UB Sanitizer report:
>   controller/pinctrl.c:1921:54: runtime error: member access within 
> misaligned address 0x00000261ce26 for type 'const struct sctp_init_chunk', 
> which requires 4 byte alignment
>   0x00000261ce26: note: pointer points here
>    01 00 00 14 00 00  00 02 00 00 00 00 00 01  00 01 00 00 00 02 00 00  00 03 
> 00 05 11 00 00 00  00 04
>                ^
>       #0 0x466da5 in pinctrl_handle_sctp_abort controller/pinctrl.c:1921
>       #1 0x46725a in pinctrl_handle_reject controller/pinctrl.c:1975
>       [...]
>
> Signed-off-by: Dumitru Ceara <[email protected]>


Acked-by: Numan Siddique <[email protected]>

Numan


> ---
>  controller/pinctrl.c |    4 ++--
>  lib/ovn-util.h       |   12 +++++++-----
>  2 files changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/controller/pinctrl.c b/controller/pinctrl.c
> index e4ee8917e..373ed6cb2 100644
> --- a/controller/pinctrl.c
> +++ b/controller/pinctrl.c
> @@ -1857,7 +1857,7 @@ pinctrl_handle_sctp_abort(struct rconn *swconn, const 
> struct flow *ip_flow,
>          return;
>      }
>
> -    const struct sctp_init_chunk *sh_in_init = NULL;
> +    const struct sctp_16aligned_init_chunk *sh_in_init = NULL;
>      if (sh_in_chunk->sctp_chunk_type == SCTP_CHUNK_TYPE_INIT) {
>          static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
>          sh_in_init = dp_packet_at(pkt_in, pkt_in->l4_ofs +
> @@ -1904,7 +1904,7 @@ pinctrl_handle_sctp_abort(struct rconn *swconn, const 
> struct flow *ip_flow,
>      bool tag_reflected;
>      if (get_16aligned_be32(&sh_in->sctp_vtag) == 0 && sh_in_init) {
>          /* See RFC 4960 Section 8.4, item 3. */
> -        put_16aligned_be32(&sh->sctp_vtag, sh_in_init->initiate_tag);
> +        sh->sctp_vtag = sh_in_init->initiate_tag;
>          tag_reflected = false;
>      } else {
>          /* See RFC 4960 Section 8.4, item 8. */
> diff --git a/lib/ovn-util.h b/lib/ovn-util.h
> index a923c3b65..b212c64b7 100644
> --- a/lib/ovn-util.h
> +++ b/lib/ovn-util.h
> @@ -261,14 +261,16 @@ struct sctp_chunk_header {
>  BUILD_ASSERT_DECL(SCTP_CHUNK_HEADER_LEN == sizeof(struct sctp_chunk_header));
>
>  #define SCTP_INIT_CHUNK_LEN 16
> -struct sctp_init_chunk {
> -    ovs_be32 initiate_tag;
> -    ovs_be32 a_rwnd;
> +struct sctp_16aligned_init_chunk {
> +    ovs_16aligned_be32 initiate_tag;
> +    ovs_16aligned_be32 a_rwnd;
>      ovs_be16 num_outbound_streams;
>      ovs_be16 num_inbound_streams;
> -    ovs_be32 initial_tsn;
> +    ovs_16aligned_be32 initial_tsn;
>  };
> -BUILD_ASSERT_DECL(SCTP_INIT_CHUNK_LEN == sizeof(struct sctp_init_chunk));
> +BUILD_ASSERT_DECL(
> +    SCTP_INIT_CHUNK_LEN == sizeof(struct sctp_16aligned_init_chunk)
> +);
>
>  /* These are the only SCTP chunk types that OVN cares about.
>   * There is no need to define the other chunk types until they are
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to