Ver código fonte

mei: bus: check if the device is enabled before data transfer

The bus data transfer interface was missing the check if the device is
in enabled state, this may lead to stack corruption during link reset.

Cc: <stable@vger.kernel.org> #4.0
Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Alexander Usyskin 10 anos atrás
pai
commit
15c13dfcad
1 arquivos alterados com 9 adições e 0 exclusões
  1. 9 0
      drivers/misc/mei/bus.c

+ 9 - 0
drivers/misc/mei/bus.c

@@ -53,6 +53,11 @@ ssize_t __mei_cl_send(struct mei_cl *cl, u8 *buf, size_t length,
 	bus = cl->dev;
 	bus = cl->dev;
 
 
 	mutex_lock(&bus->device_lock);
 	mutex_lock(&bus->device_lock);
+	if (bus->dev_state != MEI_DEV_ENABLED) {
+		rets = -ENODEV;
+		goto out;
+	}
+
 	if (!mei_cl_is_connected(cl)) {
 	if (!mei_cl_is_connected(cl)) {
 		rets = -ENODEV;
 		rets = -ENODEV;
 		goto out;
 		goto out;
@@ -109,6 +114,10 @@ ssize_t __mei_cl_recv(struct mei_cl *cl, u8 *buf, size_t length)
 	bus = cl->dev;
 	bus = cl->dev;
 
 
 	mutex_lock(&bus->device_lock);
 	mutex_lock(&bus->device_lock);
+	if (bus->dev_state != MEI_DEV_ENABLED) {
+		rets = -ENODEV;
+		goto out;
+	}
 
 
 	cb = mei_cl_read_cb(cl, NULL);
 	cb = mei_cl_read_cb(cl, NULL);
 	if (cb)
 	if (cb)