diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-12-21 09:17:52 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-12-21 09:17:52 -0800 | 
| commit | 96d6ee7d2f8110f6f3460eab5d3826a6f1ca058d (patch) | |
| tree | cd67b5914afeecb46961d512ed5608713fa2faa7 | |
| parent | 0b517333721c1b7a740e54b1cbe78a14884d51e7 (diff) | |
| parent | b6aac625e579ca684448f8ace632f8dceb972afb (diff) | |
Merge tag 'drm-fixes-2018-12-21' of git://anongit.freedesktop.org/drm/drm
Pull final drm fix from Daniel Vetter:
 "Very calm week, so either everything perfect or everyone on holidays
  already. Just one array_index_nospec patch, also for stable"
* tag 'drm-fixes-2018-12-21' of git://anongit.freedesktop.org/drm/drm:
  drm/ioctl: Fix Spectre v1 vulnerabilities
| -rw-r--r-- | drivers/gpu/drm/drm_ioctl.c | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index 94bd872d56c4..7e6746b2d704 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -37,6 +37,7 @@  #include <linux/pci.h>  #include <linux/export.h> +#include <linux/nospec.h>  /**   * DOC: getunique and setversion story @@ -800,13 +801,17 @@ long drm_ioctl(struct file *filp,  	if (is_driver_ioctl) {  		/* driver ioctl */ -		if (nr - DRM_COMMAND_BASE >= dev->driver->num_ioctls) +		unsigned int index = nr - DRM_COMMAND_BASE; + +		if (index >= dev->driver->num_ioctls)  			goto err_i1; -		ioctl = &dev->driver->ioctls[nr - DRM_COMMAND_BASE]; +		index = array_index_nospec(index, dev->driver->num_ioctls); +		ioctl = &dev->driver->ioctls[index];  	} else {  		/* core ioctl */  		if (nr >= DRM_CORE_IOCTL_COUNT)  			goto err_i1; +		nr = array_index_nospec(nr, DRM_CORE_IOCTL_COUNT);  		ioctl = &drm_ioctls[nr];  	} @@ -888,6 +893,7 @@ bool drm_ioctl_flags(unsigned int nr, unsigned int *flags)  	if (nr >= DRM_CORE_IOCTL_COUNT)  		return false; +	nr = array_index_nospec(nr, DRM_CORE_IOCTL_COUNT);  	*flags = drm_ioctls[nr].flags;  	return true;  | 
