Patch "regmap-irq: Fix offset/index mismatch in read_sub_irq_data()" has been added to the 5.15-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

    regmap-irq: Fix offset/index mismatch in read_sub_irq_data()

to the 5.15-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:
     regmap-irq-fix-offset-index-mismatch-in-read_sub_irq.patch
and it can be found in the queue-5.15 subdirectory.

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



commit 609e3e770484bb7a8558ec15393f893d4c3adfe7
Author: Aidan MacDonald <aidanmacdonald.0x0@xxxxxxxxx>
Date:   Mon Jun 20 21:05:57 2022 +0100

    regmap-irq: Fix offset/index mismatch in read_sub_irq_data()
    
    [ Upstream commit 3f05010f243be06478a9b11cfce0ce994f5a0890 ]
    
    We need to divide the sub-irq status register offset by register
    stride to get an index for the status buffer to avoid an out of
    bounds write when the register stride is greater than 1.
    
    Fixes: a2d21848d921 ("regmap: regmap-irq: Add main status register support")
    Signed-off-by: Aidan MacDonald <aidanmacdonald.0x0@xxxxxxxxx>
    Link: https://lore.kernel.org/r/20220620200644.1961936-3-aidanmacdonald.0x0@xxxxxxxxx
    Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/base/regmap/regmap-irq.c b/drivers/base/regmap/regmap-irq.c
index cd12078ed51b..3aac960ae30a 100644
--- a/drivers/base/regmap/regmap-irq.c
+++ b/drivers/base/regmap/regmap-irq.c
@@ -387,6 +387,7 @@ static inline int read_sub_irq_data(struct regmap_irq_chip_data *data,
 		subreg = &chip->sub_reg_offsets[b];
 		for (i = 0; i < subreg->num_regs; i++) {
 			unsigned int offset = subreg->offset[i];
+			unsigned int index = offset / map->reg_stride;
 
 			if (chip->not_fixed_stride)
 				ret = regmap_read(map,
@@ -395,7 +396,7 @@ static inline int read_sub_irq_data(struct regmap_irq_chip_data *data,
 			else
 				ret = regmap_read(map,
 						chip->status_base + offset,
-						&data->status_buf[offset]);
+						&data->status_buf[index]);
 
 			if (ret)
 				break;



[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