mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	time: Enable get/put_compat_itimerspec64 always
This will aid in enabling the compat syscalls on 32-bit architectures later on. Also move compat_itimerspec and related defines to compat_time.h. The compat_time.h file will eventually be deleted. Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: arnd@arndb.de Cc: viro@zeniv.linux.org.uk Cc: linux-fsdevel@vger.kernel.org Cc: linux-api@vger.kernel.org Cc: y2038@lists.linaro.org Link: https://lkml.kernel.org/r/20180617051144.29756-3-deepa.kernel@gmail.com
This commit is contained in:
		
							parent
							
								
									d0dd63a8ae
								
							
						
					
					
						commit
						afef05cf23
					
				
					 4 changed files with 30 additions and 38 deletions
				
			
		| 
						 | 
					@ -109,11 +109,6 @@ typedef	compat_ulong_t		compat_aio_context_t;
 | 
				
			||||||
struct compat_sel_arg_struct;
 | 
					struct compat_sel_arg_struct;
 | 
				
			||||||
struct rusage;
 | 
					struct rusage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct compat_itimerspec {
 | 
					 | 
				
			||||||
	struct compat_timespec it_interval;
 | 
					 | 
				
			||||||
	struct compat_timespec it_value;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct compat_utimbuf {
 | 
					struct compat_utimbuf {
 | 
				
			||||||
	compat_time_t		actime;
 | 
						compat_time_t		actime;
 | 
				
			||||||
	compat_time_t		modtime;
 | 
						compat_time_t		modtime;
 | 
				
			||||||
| 
						 | 
					@ -294,10 +289,6 @@ extern int compat_get_timespec(struct timespec *, const void __user *);
 | 
				
			||||||
extern int compat_put_timespec(const struct timespec *, void __user *);
 | 
					extern int compat_put_timespec(const struct timespec *, void __user *);
 | 
				
			||||||
extern int compat_get_timeval(struct timeval *, const void __user *);
 | 
					extern int compat_get_timeval(struct timeval *, const void __user *);
 | 
				
			||||||
extern int compat_put_timeval(const struct timeval *, void __user *);
 | 
					extern int compat_put_timeval(const struct timeval *, void __user *);
 | 
				
			||||||
extern int get_compat_itimerspec64(struct itimerspec64 *its,
 | 
					 | 
				
			||||||
			const struct compat_itimerspec __user *uits);
 | 
					 | 
				
			||||||
extern int put_compat_itimerspec64(const struct itimerspec64 *its,
 | 
					 | 
				
			||||||
			struct compat_itimerspec __user *uits);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct compat_iovec {
 | 
					struct compat_iovec {
 | 
				
			||||||
	compat_uptr_t	iov_base;
 | 
						compat_uptr_t	iov_base;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,16 @@ struct compat_timeval {
 | 
				
			||||||
	s32		tv_usec;
 | 
						s32		tv_usec;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct compat_itimerspec {
 | 
				
			||||||
 | 
						struct compat_timespec it_interval;
 | 
				
			||||||
 | 
						struct compat_timespec it_value;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int compat_get_timespec64(struct timespec64 *, const void __user *);
 | 
					extern int compat_get_timespec64(struct timespec64 *, const void __user *);
 | 
				
			||||||
extern int compat_put_timespec64(const struct timespec64 *, void __user *);
 | 
					extern int compat_put_timespec64(const struct timespec64 *, void __user *);
 | 
				
			||||||
 | 
					extern int get_compat_itimerspec64(struct itimerspec64 *its,
 | 
				
			||||||
 | 
								const struct compat_itimerspec __user *uits);
 | 
				
			||||||
 | 
					extern int put_compat_itimerspec64(const struct itimerspec64 *its,
 | 
				
			||||||
 | 
								struct compat_itimerspec __user *uits);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* _LINUX_COMPAT_TIME_H */
 | 
					#endif /* _LINUX_COMPAT_TIME_H */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -324,35 +324,6 @@ COMPAT_SYSCALL_DEFINE3(sched_getaffinity, compat_pid_t,  pid, unsigned int, len,
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Todo: Delete these extern declarations when get/put_compat_itimerspec64()
 | 
					 | 
				
			||||||
 * are moved to kernel/time/time.c .
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
extern int __compat_get_timespec64(struct timespec64 *ts64,
 | 
					 | 
				
			||||||
				   const struct compat_timespec __user *cts);
 | 
					 | 
				
			||||||
extern int __compat_put_timespec64(const struct timespec64 *ts64,
 | 
					 | 
				
			||||||
				   struct compat_timespec __user *cts);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int get_compat_itimerspec64(struct itimerspec64 *its,
 | 
					 | 
				
			||||||
			const struct compat_itimerspec __user *uits)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (__compat_get_timespec64(&its->it_interval, &uits->it_interval) ||
 | 
					 | 
				
			||||||
	    __compat_get_timespec64(&its->it_value, &uits->it_value))
 | 
					 | 
				
			||||||
		return -EFAULT;
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
EXPORT_SYMBOL_GPL(get_compat_itimerspec64);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int put_compat_itimerspec64(const struct itimerspec64 *its,
 | 
					 | 
				
			||||||
			struct compat_itimerspec __user *uits)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (__compat_put_timespec64(&its->it_interval, &uits->it_interval) ||
 | 
					 | 
				
			||||||
	    __compat_put_timespec64(&its->it_value, &uits->it_value))
 | 
					 | 
				
			||||||
		return -EFAULT;
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
EXPORT_SYMBOL_GPL(put_compat_itimerspec64);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * We currently only need the following fields from the sigevent
 | 
					 * We currently only need the following fields from the sigevent
 | 
				
			||||||
 * structure: sigev_value, sigev_signo, sig_notify and (sometimes
 | 
					 * structure: sigev_value, sigev_signo, sig_notify and (sometimes
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -955,3 +955,24 @@ int put_itimerspec64(const struct itimerspec64 *it,
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL_GPL(put_itimerspec64);
 | 
					EXPORT_SYMBOL_GPL(put_itimerspec64);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int get_compat_itimerspec64(struct itimerspec64 *its,
 | 
				
			||||||
 | 
								const struct compat_itimerspec __user *uits)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (__compat_get_timespec64(&its->it_interval, &uits->it_interval) ||
 | 
				
			||||||
 | 
						    __compat_get_timespec64(&its->it_value, &uits->it_value))
 | 
				
			||||||
 | 
							return -EFAULT;
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					EXPORT_SYMBOL_GPL(get_compat_itimerspec64);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int put_compat_itimerspec64(const struct itimerspec64 *its,
 | 
				
			||||||
 | 
								struct compat_itimerspec __user *uits)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (__compat_put_timespec64(&its->it_interval, &uits->it_interval) ||
 | 
				
			||||||
 | 
						    __compat_put_timespec64(&its->it_value, &uits->it_value))
 | 
				
			||||||
 | 
							return -EFAULT;
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					EXPORT_SYMBOL_GPL(put_compat_itimerspec64);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue