Patch "loop: loop_set_status_from_info() check before assignment" has been added to the 4.19-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

    loop: loop_set_status_from_info() check before assignment

to the 4.19-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:
     loop-loop_set_status_from_info-check-before-assignment.patch
and it can be found in the queue-4.19 subdirectory.

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


>From stable+bounces-25717-greg=kroah.com@xxxxxxxxxxxxxxx Fri Mar  1 02:34:48 2024
From: Genjian <zhanggenjian@xxxxxxx>
Date: Fri,  1 Mar 2024 09:30:28 +0800
Subject: loop: loop_set_status_from_info() check before assignment
To: stable@xxxxxxxxxxxxxxx
Cc: axboe@xxxxxxxxx, stable@xxxxxxxxxx, linux-block@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, zhanggenjian123@xxxxxxxxx, Zhong Jinghua <zhongjinghua@xxxxxxxxxx>, Chaitanya Kulkarni <kch@xxxxxxxxxx>, Genjian Zhang <zhanggenjian@xxxxxxxxxx>
Message-ID: <20240301013028.2293831-10-zhanggenjian@xxxxxxx>

From: Zhong Jinghua <zhongjinghua@xxxxxxxxxx>

[ Upstream commit 9f6ad5d533d1c71e51bdd06a5712c4fbc8768dfa ]

In loop_set_status_from_info(), lo->lo_offset and lo->lo_sizelimit should
be checked before reassignment, because if an overflow error occurs, the
original correct value will be changed to the wrong value, and it will not
be changed back.

More, the original patch did not solve the problem, the value was set and
ioctl returned an error, but the subsequent io used the value in the loop
driver, which still caused an alarm:

loop_handle_cmd
 do_req_filebacked
  loff_t pos = ((loff_t) blk_rq_pos(rq) << 9) + lo->lo_offset;
  lo_rw_aio
   cmd->iocb.ki_pos = pos

Fixes: c490a0b5a4f3 ("loop: Check for overflow while configuring loop")
Signed-off-by: Zhong Jinghua <zhongjinghua@xxxxxxxxxx>
Reviewed-by: Chaitanya Kulkarni <kch@xxxxxxxxxx>
Link: https://lore.kernel.org/r/20230221095027.3656193-1-zhongjinghua@xxxxxxxxxxxxxxx
Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
Signed-off-by: Genjian Zhang <zhanggenjian@xxxxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
---
 drivers/block/loop.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -1269,13 +1269,13 @@ loop_set_status_from_info(struct loop_de
 	if (err)
 		return err;
 
+	/* Avoid assigning overflow values */
+	if (info->lo_offset > LLONG_MAX || info->lo_sizelimit > LLONG_MAX)
+		return -EOVERFLOW;
+
 	lo->lo_offset = info->lo_offset;
 	lo->lo_sizelimit = info->lo_sizelimit;
 
-	/* loff_t vars have been assigned __u64 */
-	if (lo->lo_offset < 0 || lo->lo_sizelimit < 0)
-		return -EOVERFLOW;
-
 	memcpy(lo->lo_file_name, info->lo_file_name, LO_NAME_SIZE);
 	memcpy(lo->lo_crypt_name, info->lo_crypt_name, LO_NAME_SIZE);
 	lo->lo_file_name[LO_NAME_SIZE-1] = 0;


Patches currently in stable-queue which might be from kroah.com@xxxxxxxxxxxxxxx are

queue-4.19/loop-factor-out-configuring-loop-from-status.patch
queue-4.19/loop-call-loop_config_discard-only-after-new-config-is-applied.patch
queue-4.19/loop-refactor-loop_set_status-size-calculation.patch
queue-4.19/loop-factor-out-setting-loop-device-size.patch
queue-4.19/loop-check-for-overflow-while-configuring-loop.patch
queue-4.19/loop-properly-observe-rotational-flag-of-underlying-device.patch
queue-4.19/loop-remove-sector_t-truncation-checks.patch
queue-4.19/revert-loop-check-for-overflow-while-configuring-loop.patch
queue-4.19/loop-loop_set_status_from_info-check-before-assignment.patch




[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