Patch "cdrom: Avoid barrier_nospec() in cdrom_ioctl_media_changed()" has been added to the 6.11-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.11-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.11 subdirectory.

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



commit 0c198c5cf7f64fb0ba332c5a0f2317425a00d53e
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 9b0f37d4b9d49..6a99a459b80b2 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