]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
misc: mic: Fix for double fetch security bug in VOP driver
authorAshutosh Dixit <ashutosh.dixit@intel.com>
Wed, 27 Apr 2016 21:36:05 +0000 (14:36 -0700)
committerBen Hutchings <ben@decadent.org.uk>
Mon, 22 Aug 2016 21:38:29 +0000 (22:38 +0100)
commit 9bf292bfca94694a721449e3fd752493856710f6 upstream.

The MIC VOP driver does two successive reads from user space to read a
variable length data structure. Kernel memory corruption can result if
the data structure changes between the two reads. This patch disallows
the chance of this happening.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=116651
Reported by: Pengfei Wang <wpengfeinudt@gmail.com>
Reviewed-by: Sudeep Dutt <sudeep.dutt@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[bwh: Backported to 3.16:
 - Adjust filename, context
 - goto exit on failure]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/misc/mic/host/mic_virtio.c

index 7e1ef0ebbb800bfcf00d7d07aaff02f7a5af7b4a..dba3c19929db03eb0d110bb82f798592b3a6e41c 100644 (file)
@@ -456,6 +456,11 @@ static int mic_copy_dp_entry(struct mic_vdev *mvdev,
                        __func__, __LINE__, ret);
                goto exit;
        }
+       /* Ensure desc has not changed between the two reads */
+       if (memcmp(&dd, dd_config, sizeof(dd))) {
+               ret = -EINVAL;
+               goto exit;
+       }
 
        vqconfig = mic_vq_config(dd_config);
        for (i = 0; i < dd.num_vq; i++) {