Re: [PATCH-next v2] loop: loop_set_status_from_info() check before assignment

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

 



Hi,

在 2023/02/06 10:07, Zhong Jinghua 写道:
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.

Modifying to the wrong value logic is always not quiet right, we hope to
optimize this.


Please add a fix tag and cc stable:

Fixes: c490a0b5a4f3 ("loop: Check for overflow while configuring loop")

This commit doesn't fix the problem it described in commit message.

Thanks,
Kuai

Signed-off-by: Zhong Jinghua <zhongjinghua@xxxxxxxxxx>
---
  v1->v2: Modify note: overflowing -> overflow
  drivers/block/loop.c | 8 ++++----
  1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 1518a6423279..1b35cbd029c7 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -977,13 +977,13 @@ loop_set_status_from_info(struct loop_device *lo,
  		return -EINVAL;
  	}
+ /* 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);
  	lo->lo_file_name[LO_NAME_SIZE-1] = 0;
  	lo->lo_flags = info->lo_flags;





[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux