| From c8be9f52f6ac716385381aaedd2a093bcd7b2be2 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 2 Jul 2025 16:32:21 +0300 |
| Subject: pNFS: Fix disk addr range check in block/scsi layout |
| |
| From: Sergey Bashirov <sergeybashirov@gmail.com> |
| |
| [ Upstream commit 7db6e66663681abda54f81d5916db3a3b8b1a13d ] |
| |
| At the end of the isect translation, disc_addr represents the physical |
| disk offset. Thus, end calculated from disk_addr is also a physical disk |
| offset. Therefore, range checking should be done using map->disk_offset, |
| not map->start. |
| |
| Signed-off-by: Sergey Bashirov <sergeybashirov@gmail.com> |
| Reviewed-by: Christoph Hellwig <hch@lst.de> |
| Link: https://lore.kernel.org/r/20250702133226.212537-1-sergeybashirov@gmail.com |
| Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| fs/nfs/blocklayout/blocklayout.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c |
| index 6be13e0ec170..e498aade8c47 100644 |
| --- a/fs/nfs/blocklayout/blocklayout.c |
| +++ b/fs/nfs/blocklayout/blocklayout.c |
| @@ -149,8 +149,8 @@ do_add_page_to_bio(struct bio *bio, int npg, enum req_op op, sector_t isect, |
| |
| /* limit length to what the device mapping allows */ |
| end = disk_addr + *len; |
| - if (end >= map->start + map->len) |
| - *len = map->start + map->len - disk_addr; |
| + if (end >= map->disk_offset + map->len) |
| + *len = map->disk_offset + map->len - disk_addr; |
| |
| retry: |
| if (!bio) { |
| -- |
| 2.39.5 |
| |