diff mbox series

ceph: fix possible integer overflow in ceph_zero_objects()

Message ID 20250422093206.1228087-1-d.kandybka@gmail.com
State New
Headers show
Series ceph: fix possible integer overflow in ceph_zero_objects() | expand

Commit Message

Dmitry Kandybka April 22, 2025, 9:32 a.m. UTC
In 'ceph_zero_objects', promote 'object_size' to 'u64' to avoid possible
integer overflow.
Compile tested only.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Signed-off-by: Dmitry Kandybka <d.kandybka@gmail.com>
---
 fs/ceph/file.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Viacheslav Dubeyko April 22, 2025, 6:25 p.m. UTC | #1
On Tue, 2025-04-22 at 12:32 +0300, Dmitry Kandybka wrote:
> In 'ceph_zero_objects', promote 'object_size' to 'u64' to avoid possible
> integer overflow.
> Compile tested only.
> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 
> Signed-off-by: Dmitry Kandybka <d.kandybka@gmail.com>
> ---
>  fs/ceph/file.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/fs/ceph/file.c b/fs/ceph/file.c
> index 851d70200c6b..a7254cab44cc 100644
> --- a/fs/ceph/file.c
> +++ b/fs/ceph/file.c
> @@ -2616,7 +2616,7 @@ static int ceph_zero_objects(struct inode *inode, loff_t offset, loff_t length)
>  	s32 stripe_unit = ci->i_layout.stripe_unit;
>  	s32 stripe_count = ci->i_layout.stripe_count;
>  	s32 object_size = ci->i_layout.object_size;

Frankly speaking, I don't quite follow why we are using signed type here (s32).
As object size as stripe count should be positive value always.

> -	u64 object_set_size = object_size * stripe_count;
> +	u64 object_set_size = (u64) object_size * stripe_count;
>  	u64 nearly, t;
>  
>  	/* round offset up to next period boundary */

Looks good.

Reviewed-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>

Thanks,
Slava.
diff mbox series

Patch

diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index 851d70200c6b..a7254cab44cc 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -2616,7 +2616,7 @@  static int ceph_zero_objects(struct inode *inode, loff_t offset, loff_t length)
 	s32 stripe_unit = ci->i_layout.stripe_unit;
 	s32 stripe_count = ci->i_layout.stripe_count;
 	s32 object_size = ci->i_layout.object_size;
-	u64 object_set_size = object_size * stripe_count;
+	u64 object_set_size = (u64) object_size * stripe_count;
 	u64 nearly, t;
 
 	/* round offset up to next period boundary */