Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 20 Sep 2018 13:23:05 -0700
From:      Mark Millard <marklmi@yahoo.com>
To:        yongari@FreeBSD.org, FreeBSD Current <freebsd-current@freebsd.org>
Subject:   Use of cbp->tbd[-1].tb_size in /usr/src/sys/dev/fxp/if_fxp.c : clang 7 rejects it
Message-ID:  <3EBF1660-6CD5-4C80-A36D-4DE945073006@yahoo.com>

next in thread | raw e-mail | index | archive | help
The sources listed here are from head -r338675 .

/usr/src/sys/dev/fxp/if_fxpreg.h:297 is in:

struct fxp_cb_tx {
       uint16_t cb_status;
       uint16_t cb_command;
       uint32_t link_addr;
       uint32_t tbd_array_addr;
       uint16_t byte_count;
       uint8_t tx_threshold;
       uint8_t tbd_number;

       /*
        * The following structure isn't actually part of the TxCB,
        * unless the extended TxCB feature is being used.  In this
        * case, the first two elements of the structure below are
        * fetched along with the TxCB.
        */
       union {
               struct fxp_ipcb ipcb;
               struct fxp_tbd tbd[FXP_NTXSEG + 1];
       } tx_cb_u;
};


/usr/src/sys/dev/fxp/if_fxp.c:1630 is in:

       /* Configure TSO. */
       if (m->m_pkthdr.csum_flags & CSUM_TSO) {
               cbp->tbd[-1].tb_size =3D htole32(m->m_pkthdr.tso_segsz << =
16);
               cbp->tbd[1].tb_size |=3D htole32(tcp_payload << 16);
               cbp->ipcb_ip_schedule |=3D FXP_IPCB_LARGESEND_ENABLE |
                   FXP_IPCB_IP_CHECKSUM_ENABLE |
                   FXP_IPCB_TCP_PACKET |
                   FXP_IPCB_TCPUDP_CHECKSUM_ENABLE;
       }

But this cbp->tbd[-1].tb_size use goes back to -r185330 in 2008-Nov-26.

This is also when the "+ 1" was added to the:

struct fxp_tbd tbd[FXP_NTXSEG + 1]

above.

clang 7's report was:

--- if_fxp.o ---
/usr/src/sys/dev/fxp/if_fxp.c:1630:3: error: array index -1 is before =
the beginning of the array [-Werror,-Warray-bounds]
               cbp->tbd[-1].tb_size =3D htole32(m->m_pkthdr.tso_segsz << =
16);
               ^        ~~
/usr/src/sys/dev/fxp/if_fxpreg.h:297:3: note: array 'tbd' declared here
               struct fxp_tbd tbd[FXP_NTXSEG + 1];
               ^
1 error generated.
*** [if_fxp.o] Error code 1

It does look odd to me.

=3D=3D=3D
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3EBF1660-6CD5-4C80-A36D-4DE945073006>