]> git.baikalelectronics.ru Git - kernel.git/commit
RDMA/cma: Avoid triggering undefined behavior
authorBart Van Assche <bart.vanassche@wdc.com>
Wed, 11 Oct 2017 17:48:45 +0000 (10:48 -0700)
committerDoug Ledford <dledford@redhat.com>
Sun, 15 Oct 2017 00:47:05 +0000 (20:47 -0400)
commit9c8e0cfef7b3ab4690bb9f80cab4a36feeeaa2e9
treeb1017ce60e242ef0c849e49c21049ba1607e9d86
parente81ba2e62e995de5aa0d863f3d4a681b051188d9
RDMA/cma: Avoid triggering undefined behavior

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: Bart Van Assche <bart.vanassche@wdc.com>
Acked-by: Sean Hefty <sean.hefty@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/core/cma.c