Commit 5e50efea authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Greg Kroah-Hartman
Browse files

staging/lustre: use 64-bit time LNetCtl()



This ioctl function passes a 64-bit time argument but then performs
a computation with a 32-bit get_seconds() value.

In order to avoid overflow here, this changes the code to use
64-bit math and ktime_get_real_seconds().

Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarOleg Drokin <green@linuxhacker.ru>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a11ef8ca
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1343,6 +1343,7 @@ LNetCtl(unsigned int cmd, void *arg)
	lnet_process_id_t id = {0};
	lnet_ni_t *ni;
	int rc;
	unsigned long secs_passed;

	LASSERT(the_lnet.ln_init);
	LASSERT(the_lnet.ln_refcount > 0);
@@ -1370,10 +1371,9 @@ LNetCtl(unsigned int cmd, void *arg)
				      &data->ioc_nid, &data->ioc_flags,
				      &data->ioc_priority);
	case IOC_LIBCFS_NOTIFY_ROUTER:
		secs_passed = (ktime_get_real_seconds() - data->ioc_u64[0]);
		return lnet_notify(NULL, data->ioc_nid, data->ioc_flags,
				   cfs_time_current() -
				   cfs_time_seconds(get_seconds() -
						    (time_t)data->ioc_u64[0]));
				   jiffies - secs_passed * HZ);

	case IOC_LIBCFS_PORTALS_COMPATIBILITY:
		/* This can be removed once lustre stops calling it */