• Bart Van Assche's avatar
    RDMA/cma: Avoid triggering undefined behavior · c0b64f58
    Bart Van Assche authored
    According to the C standard the behavior of computations with
    integer operands is as follows:
    * A computation involving unsigned operands can never overflow,
      because a result that cannot be represented by the resulting
      unsigned integer type is reduced modulo the number that is one
      greater than the largest value that can be represented by the
      resulting type.
    * The behavior for signed integer underflow and overflow is
      undefined.
    
    Hence only use unsigned integers when checking for integer
    overflow.
    
    This patch is what I came up with after having analyzed the
    following smatch warnings:
    
    drivers/infiniband/core/cma.c:3448: cma_resolve_ib_udp() warn: signed overflow undefined. 'offset + conn_param->private_data_len < conn_param->private_data_len'
    drivers/infiniband/core/cma.c:3505: cma_connect_ib() warn: signed overflow undefined. 'offset + conn_param->private_data_len < conn_param->private_data_len'
    Signed-off-by: default avatarBart Van Assche <bart.vanassche@wdc.com>
    Acked-by: default avatarSean Hefty <sean.hefty@intel.com>
    Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
    c0b64f58
cma.c 116 KB