Patch "cdrom: Avoid barrier_nospec() in cdrom_ioctl_media_changed()" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    cdrom: Avoid barrier_nospec() in cdrom_ioctl_media_changed()

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     cdrom-avoid-barrier_nospec-in-cdrom_ioctl_media_chan.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 164e64cfa5af69e9dd94835e60f535cb1a0f71cf
Author: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
Date:   Thu Oct 17 15:09:02 2024 -0700

    cdrom: Avoid barrier_nospec() in cdrom_ioctl_media_changed()
    
    [ Upstream commit b0bf1afde7c34698cf61422fa8ee60e690dc25c3 ]
    
    The barrier_nospec() after the array bounds check is overkill and
    painfully slow for arches which implement it.
    
    Furthermore, most arches don't implement it, so they remain exposed to
    Spectre v1 (which can affect pretty much any CPU with branch
    prediction).
    
    Instead, clamp the user pointer to a valid range so it's guaranteed to
    be a valid array index even when the bounds check mispredicts.
    
    Fixes: 8270cb10c068 ("cdrom: Fix spectre-v1 gadget")
    Signed-off-by: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/1d86f4d9d8fba68e5ca64cdeac2451b95a8bf872.1729202937.git.jpoimboe@xxxxxxxxxx
    Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
index 01f46caf1f88b..54b80911f3e28 100644
--- a/drivers/cdrom/cdrom.c
+++ b/drivers/cdrom/cdrom.c
@@ -2313,7 +2313,7 @@ static int cdrom_ioctl_media_changed(struct cdrom_device_info *cdi,
 		return -EINVAL;
 
 	/* Prevent arg from speculatively bypassing the length check */
-	barrier_nospec();
+	arg = array_index_nospec(arg, cdi->capacity);
 
 	info = kmalloc(sizeof(*info), GFP_KERNEL);
 	if (!info)




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux