hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/ipc/syscall.c
....@@ -17,8 +17,8 @@
1717 #include <linux/shm.h>
1818 #include <linux/uaccess.h>
1919
20
-SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, unsigned long, second,
21
- unsigned long, third, void __user *, ptr, long, fifth)
20
+int ksys_ipc(unsigned int call, int first, unsigned long second,
21
+ unsigned long third, void __user * ptr, long fifth)
2222 {
2323 int version, ret;
2424
....@@ -30,12 +30,12 @@
3030 return ksys_semtimedop(first, (struct sembuf __user *)ptr,
3131 second, NULL);
3232 case SEMTIMEDOP:
33
- if (IS_ENABLED(CONFIG_64BIT) || !IS_ENABLED(CONFIG_64BIT_TIME))
33
+ if (IS_ENABLED(CONFIG_64BIT))
3434 return ksys_semtimedop(first, ptr, second,
3535 (const struct __kernel_timespec __user *)fifth);
3636 else if (IS_ENABLED(CONFIG_COMPAT_32BIT_TIME))
3737 return compat_ksys_semtimedop(first, ptr, second,
38
- (const struct compat_timespec __user *)fifth);
38
+ (const struct old_timespec32 __user *)fifth);
3939 else
4040 return -ENOSYS;
4141
....@@ -47,7 +47,7 @@
4747 return -EINVAL;
4848 if (get_user(arg, (unsigned long __user *) ptr))
4949 return -EFAULT;
50
- return ksys_semctl(first, second, third, arg);
50
+ return ksys_old_semctl(first, second, third, arg);
5151 }
5252
5353 case MSGSND:
....@@ -75,7 +75,7 @@
7575 case MSGGET:
7676 return ksys_msgget((key_t) first, second);
7777 case MSGCTL:
78
- return ksys_msgctl(first, second,
78
+ return ksys_old_msgctl(first, second,
7979 (struct msqid_ds __user *)ptr);
8080
8181 case SHMAT:
....@@ -100,11 +100,17 @@
100100 case SHMGET:
101101 return ksys_shmget(first, second, third);
102102 case SHMCTL:
103
- return ksys_shmctl(first, second,
103
+ return ksys_old_shmctl(first, second,
104104 (struct shmid_ds __user *) ptr);
105105 default:
106106 return -ENOSYS;
107107 }
108
+}
109
+
110
+SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, unsigned long, second,
111
+ unsigned long, third, void __user *, ptr, long, fifth)
112
+{
113
+ return ksys_ipc(call, first, second, third, ptr, fifth);
108114 }
109115 #endif
110116
....@@ -121,8 +127,8 @@
121127 };
122128
123129 #ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC
124
-COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second,
125
- u32, third, compat_uptr_t, ptr, u32, fifth)
130
+int compat_ksys_ipc(u32 call, int first, int second,
131
+ u32 third, compat_uptr_t ptr, u32 fifth)
126132 {
127133 int version;
128134 u32 pad;
....@@ -146,7 +152,7 @@
146152 return -EINVAL;
147153 if (get_user(pad, (u32 __user *) compat_ptr(ptr)))
148154 return -EFAULT;
149
- return compat_ksys_semctl(first, second, third, pad);
155
+ return compat_ksys_old_semctl(first, second, third, pad);
150156
151157 case MSGSND:
152158 return compat_ksys_msgsnd(first, ptr, second, third);
....@@ -171,7 +177,7 @@
171177 case MSGGET:
172178 return ksys_msgget(first, second);
173179 case MSGCTL:
174
- return compat_ksys_msgctl(first, second, compat_ptr(ptr));
180
+ return compat_ksys_old_msgctl(first, second, compat_ptr(ptr));
175181
176182 case SHMAT: {
177183 int err;
....@@ -190,10 +196,16 @@
190196 case SHMGET:
191197 return ksys_shmget(first, (unsigned int)second, third);
192198 case SHMCTL:
193
- return compat_ksys_shmctl(first, second, compat_ptr(ptr));
199
+ return compat_ksys_old_shmctl(first, second, compat_ptr(ptr));
194200 }
195201
196202 return -ENOSYS;
197203 }
204
+
205
+COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second,
206
+ u32, third, compat_uptr_t, ptr, u32, fifth)
207
+{
208
+ return compat_ksys_ipc(call, first, second, third, ptr, fifth);
209
+}
198210 #endif
199211 #endif