Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

kexec/compat: convert to COMPAT_SYSCALL_DEFINE with changing parameter types

In order to allow the COMPAT_SYSCALL_DEFINE macro generate code that
performs proper zero and sign extension convert all 64 bit parameters
to their corresponding 32 bit compat counterparts.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>

+7 -13
+3 -3
include/linux/compat.h
··· 641 641 u32 val3); 642 642 asmlinkage long compat_sys_getsockopt(int fd, int level, int optname, 643 643 char __user *optval, int __user *optlen); 644 - asmlinkage long compat_sys_kexec_load(unsigned long entry, 645 - unsigned long nr_segments, 644 + asmlinkage long compat_sys_kexec_load(compat_ulong_t entry, 645 + compat_ulong_t nr_segments, 646 646 struct compat_kexec_segment __user *, 647 - unsigned long flags); 647 + compat_ulong_t flags); 648 648 asmlinkage long compat_sys_mq_getsetattr(mqd_t mqdes, 649 649 const struct compat_mq_attr __user *u_mqstat, 650 650 struct compat_mq_attr __user *u_omqstat);
-6
include/linux/kexec.h
··· 127 127 struct kexec_segment __user *segments, 128 128 unsigned long flags); 129 129 extern int kernel_kexec(void); 130 - #ifdef CONFIG_COMPAT 131 - extern asmlinkage long compat_sys_kexec_load(unsigned long entry, 132 - unsigned long nr_segments, 133 - struct compat_kexec_segment __user *segments, 134 - unsigned long flags); 135 - #endif 136 130 extern struct page *kimage_alloc_control_pages(struct kimage *image, 137 131 unsigned int order); 138 132 extern void crash_kexec(struct pt_regs *);
+4 -4
kernel/kexec.c
··· 1039 1039 {} 1040 1040 1041 1041 #ifdef CONFIG_COMPAT 1042 - asmlinkage long compat_sys_kexec_load(unsigned long entry, 1043 - unsigned long nr_segments, 1044 - struct compat_kexec_segment __user *segments, 1045 - unsigned long flags) 1042 + COMPAT_SYSCALL_DEFINE4(kexec_load, compat_ulong_t, entry, 1043 + compat_ulong_t, nr_segments, 1044 + struct compat_kexec_segment __user *, segments, 1045 + compat_ulong_t, flags) 1046 1046 { 1047 1047 struct compat_kexec_segment in; 1048 1048 struct kexec_segment out, __user *ksegments;