drm/i915: Sanity check DP AUX message buffer and size
authorImre Deak <imre.deak@intel.com>
Fri, 29 Jan 2016 12:52:26 +0000 (14:52 +0200)
committerImre Deak <imre.deak@intel.com>
Tue, 2 Feb 2016 16:28:20 +0000 (18:28 +0200)
While we are calling intel_dp_aux_transfer() with msg->size=0 whenever
msg->buffer is NULL, passing NULL to memcpy() is undefined according to
the ISO C standard. I haven't found any notes about this in the GNU C's
or the kernel's documentation of the function and can't imagine what it
would do with the NULL ptr. To better document this use of the
parameters it still make sense to add an explicit check for this to the
code.

Signed-off-by: Imre Deak <imre.deak@intel.com>
Reviewed-by: David Weinehall <david.weinehall@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1454071949-24677-1-git-send-email-imre.deak@intel.com
drivers/gpu/drm/i915/intel_dp.c

index f44aba1019b819fa3437dafcee58c59e617d1962..a073f04a5330794a3056cfa2fc8152170f1e4500 100644 (file)
@@ -979,7 +979,10 @@ intel_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
                if (WARN_ON(txsize > 20))
                        return -E2BIG;
 
-               memcpy(txbuf + HEADER_SIZE, msg->buffer, msg->size);
+               if (msg->buffer)
+                       memcpy(txbuf + HEADER_SIZE, msg->buffer, msg->size);
+               else
+                       WARN_ON(msg->size);
 
                ret = intel_dp_aux_ch(intel_dp, txbuf, txsize, rxbuf, rxsize);
                if (ret > 0) {