Mark arguments to certain syscalls as being const

Mark arguments to certain system calls as being const where they should be but
aren't. The list includes:

(*) The filename arguments of various stat syscalls, execve(), various utimes
syscalls and some mount syscalls.

(*) The filename arguments of some syscall helpers relating to the above.

(*) The buffer argument of various write syscalls.

Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by David Howells and committed by Linus Torvalds c7887325 b84ae4a1

+125 -109
+3 -3
arch/alpha/kernel/osf_sys.c
··· 244 244 return error; 245 245 } 246 246 247 - SYSCALL_DEFINE3(osf_statfs, char __user *, pathname, 247 + SYSCALL_DEFINE3(osf_statfs, const char __user *, pathname, 248 248 struct osf_statfs __user *, buffer, unsigned long, bufsiz) 249 249 { 250 250 struct path path; ··· 358 358 return do_mount("", dirname, "proc", flags, NULL); 359 359 } 360 360 361 - SYSCALL_DEFINE4(osf_mount, unsigned long, typenr, char __user *, path, 361 + SYSCALL_DEFINE4(osf_mount, unsigned long, typenr, const char __user *, path, 362 362 int, flag, void __user *, data) 363 363 { 364 364 int retval; ··· 932 932 933 933 } 934 934 935 - SYSCALL_DEFINE2(osf_utimes, char __user *, filename, 935 + SYSCALL_DEFINE2(osf_utimes, const char __user *, filename, 936 936 struct timeval32 __user *, tvs) 937 937 { 938 938 struct timespec tv[2];
+1 -1
arch/alpha/kernel/process.c
··· 387 387 * sys_execve() executes a new program. 388 388 */ 389 389 asmlinkage int 390 - do_sys_execve(char __user *ufilename, char __user * __user *argv, 390 + do_sys_execve(const char __user *ufilename, char __user * __user *argv, 391 391 char __user * __user *envp, struct pt_regs *regs) 392 392 { 393 393 int error;
+2 -2
arch/arm/kernel/sys_arm.c
··· 62 62 /* sys_execve() executes a new program. 63 63 * This is called indirectly via a small wrapper 64 64 */ 65 - asmlinkage int sys_execve(char __user *filenamei, char __user * __user *argv, 65 + asmlinkage int sys_execve(const char __user *filenamei, char __user * __user *argv, 66 66 char __user * __user *envp, struct pt_regs *regs) 67 67 { 68 68 int error; ··· 84 84 int ret; 85 85 86 86 memset(&regs, 0, sizeof(struct pt_regs)); 87 - ret = do_execve((char *)filename, (char __user * __user *)argv, 87 + ret = do_execve(filename, (char __user * __user *)argv, 88 88 (char __user * __user *)envp, &regs); 89 89 if (ret < 0) 90 90 goto out;
+3 -3
arch/arm/kernel/sys_oabi-compat.c
··· 141 141 return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; 142 142 } 143 143 144 - asmlinkage long sys_oabi_stat64(char __user * filename, 144 + asmlinkage long sys_oabi_stat64(const char __user * filename, 145 145 struct oldabi_stat64 __user * statbuf) 146 146 { 147 147 struct kstat stat; ··· 151 151 return error; 152 152 } 153 153 154 - asmlinkage long sys_oabi_lstat64(char __user * filename, 154 + asmlinkage long sys_oabi_lstat64(const char __user * filename, 155 155 struct oldabi_stat64 __user * statbuf) 156 156 { 157 157 struct kstat stat; ··· 172 172 } 173 173 174 174 asmlinkage long sys_oabi_fstatat64(int dfd, 175 - char __user *filename, 175 + const char __user *filename, 176 176 struct oldabi_stat64 __user *statbuf, 177 177 int flag) 178 178 {
+1 -1
arch/avr32/include/asm/syscalls.h
··· 21 21 unsigned long, unsigned long, 22 22 struct pt_regs *); 23 23 asmlinkage int sys_vfork(struct pt_regs *); 24 - asmlinkage int sys_execve(char __user *, char __user *__user *, 24 + asmlinkage int sys_execve(const char __user *, char __user *__user *, 25 25 char __user *__user *, struct pt_regs *); 26 26 27 27 /* kernel/signal.c */
+2 -1
arch/avr32/kernel/process.c
··· 383 383 0, NULL, NULL); 384 384 } 385 385 386 - asmlinkage int sys_execve(char __user *ufilename, char __user *__user *uargv, 386 + asmlinkage int sys_execve(const char __user *ufilename, 387 + char __user *__user *uargv, 387 388 char __user *__user *uenvp, struct pt_regs *regs) 388 389 { 389 390 int error;
+1 -1
arch/blackfin/kernel/process.c
··· 209 209 /* 210 210 * sys_execve() executes a new program. 211 211 */ 212 - asmlinkage int sys_execve(char __user *name, char __user * __user *argv, char __user * __user *envp) 212 + asmlinkage int sys_execve(const char __user *name, char __user * __user *argv, char __user * __user *envp) 213 213 { 214 214 int error; 215 215 char *filename;
+2 -1
arch/frv/kernel/process.c
··· 250 250 /* 251 251 * sys_execve() executes a new program. 252 252 */ 253 - asmlinkage int sys_execve(char __user *name, char __user * __user *argv, char __user * __user *envp) 253 + asmlinkage int sys_execve(const char __user *name, char __user * __user *argv, 254 + char __user * __user *envp) 254 255 { 255 256 int error; 256 257 char * filename;
+1 -1
arch/h8300/kernel/process.c
··· 212 212 /* 213 213 * sys_execve() executes a new program. 214 214 */ 215 - asmlinkage int sys_execve(char *name, char **argv, char **envp,int dummy,...) 215 + asmlinkage int sys_execve(const char *name, char **argv, char **envp,int dummy,...) 216 216 { 217 217 int error; 218 218 char * filename;
+1 -1
arch/ia64/include/asm/unistd.h
··· 353 353 int fd, long pgoff); 354 354 struct pt_regs; 355 355 struct sigaction; 356 - long sys_execve(char __user *filename, char __user * __user *argv, 356 + long sys_execve(const char __user *filename, char __user * __user *argv, 357 357 char __user * __user *envp, struct pt_regs *regs); 358 358 asmlinkage long sys_ia64_pipe(void); 359 359 asmlinkage long sys_rt_sigaction(int sig,
+1 -1
arch/ia64/kernel/process.c
··· 633 633 } 634 634 635 635 long 636 - sys_execve (char __user *filename, char __user * __user *argv, char __user * __user *envp, 636 + sys_execve (const char __user *filename, char __user * __user *argv, char __user * __user *envp, 637 637 struct pt_regs *regs) 638 638 { 639 639 char *fname;
+2 -1
arch/m32r/kernel/process.c
··· 288 288 /* 289 289 * sys_execve() executes a new program. 290 290 */ 291 - asmlinkage int sys_execve(char __user *ufilename, char __user * __user *uargv, 291 + asmlinkage int sys_execve(const char __user *ufilename, 292 + char __user * __user *uargv, 292 293 char __user * __user *uenvp, 293 294 unsigned long r3, unsigned long r4, unsigned long r5, 294 295 unsigned long r6, struct pt_regs regs)
+1 -1
arch/m68k/kernel/process.c
··· 315 315 /* 316 316 * sys_execve() executes a new program. 317 317 */ 318 - asmlinkage int sys_execve(char __user *name, char __user * __user *argv, char __user * __user *envp) 318 + asmlinkage int sys_execve(const char __user *name, char __user * __user *argv, char __user * __user *envp) 319 319 { 320 320 int error; 321 321 char * filename;
+1 -1
arch/m68knommu/kernel/process.c
··· 350 350 /* 351 351 * sys_execve() executes a new program. 352 352 */ 353 - asmlinkage int sys_execve(char *name, char **argv, char **envp) 353 + asmlinkage int sys_execve(const char *name, char **argv, char **envp) 354 354 { 355 355 int error; 356 356 char * filename;
+1 -1
arch/microblaze/kernel/sys_microblaze.c
··· 47 47 return do_fork(flags, stack, regs, 0, NULL, NULL); 48 48 } 49 49 50 - asmlinkage long microblaze_execve(char __user *filenamei, char __user *__user *argv, 50 + asmlinkage long microblaze_execve(const char __user *filenamei, char __user *__user *argv, 51 51 char __user *__user *envp, struct pt_regs *regs) 52 52 { 53 53 int error;
+1 -1
arch/mips/kernel/syscall.c
··· 254 254 int error; 255 255 char * filename; 256 256 257 - filename = getname((char __user *) (long)regs.regs[4]); 257 + filename = getname((const char __user *) (long)regs.regs[4]); 258 258 error = PTR_ERR(filename); 259 259 if (IS_ERR(filename)) 260 260 goto out;
+1 -1
arch/mn10300/kernel/process.c
··· 268 268 0, NULL, NULL); 269 269 } 270 270 271 - asmlinkage long sys_execve(char __user *name, 271 + asmlinkage long sys_execve(const char __user *name, 272 272 char __user * __user *argv, 273 273 char __user * __user *envp) 274 274 {
+4 -3
arch/parisc/hpux/fs.c
··· 36 36 int error; 37 37 char *filename; 38 38 39 - filename = getname((char __user *) regs->gr[26]); 39 + filename = getname((const char __user *) regs->gr[26]); 40 40 error = PTR_ERR(filename); 41 41 if (IS_ERR(filename)) 42 42 goto out; ··· 169 169 return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; 170 170 } 171 171 172 - long hpux_stat64(char __user *filename, struct hpux_stat64 __user *statbuf) 172 + long hpux_stat64(const char __user *filename, struct hpux_stat64 __user *statbuf) 173 173 { 174 174 struct kstat stat; 175 175 int error = vfs_stat(filename, &stat); ··· 191 191 return error; 192 192 } 193 193 194 - long hpux_lstat64(char __user *filename, struct hpux_stat64 __user *statbuf) 194 + long hpux_lstat64(const char __user *filename, 195 + struct hpux_stat64 __user *statbuf) 195 196 { 196 197 struct kstat stat; 197 198 int error = vfs_lstat(filename, &stat);
+1 -1
arch/powerpc/kernel/process.c
··· 1027 1027 int error; 1028 1028 char *filename; 1029 1029 1030 - filename = getname((char __user *) a0); 1030 + filename = getname((const char __user *) a0); 1031 1031 error = PTR_ERR(filename); 1032 1032 if (IS_ERR(filename)) 1033 1033 goto out;
+1 -1
arch/powerpc/kernel/sys_ppc32.c
··· 546 546 return sys_pread64(fd, ubuf, count, ((loff_t)poshi << 32) | poslo); 547 547 } 548 548 549 - compat_ssize_t compat_sys_pwrite64(unsigned int fd, char __user *ubuf, compat_size_t count, 549 + compat_ssize_t compat_sys_pwrite64(unsigned int fd, const char __user *ubuf, compat_size_t count, 550 550 u32 reg6, u32 poshi, u32 poslo) 551 551 { 552 552 return sys_pwrite64(fd, ubuf, count, ((loff_t)poshi << 32) | poslo);
+5 -5
arch/s390/kernel/compat_linux.c
··· 436 436 * sys32_execve() executes a new program after the asm stub has set 437 437 * things up for us. This should basically do what I want it to. 438 438 */ 439 - asmlinkage long sys32_execve(char __user *name, compat_uptr_t __user *argv, 439 + asmlinkage long sys32_execve(const char __user *name, compat_uptr_t __user *argv, 440 440 compat_uptr_t __user *envp) 441 441 { 442 442 struct pt_regs *regs = task_pt_regs(current); ··· 570 570 return copy_to_user(ubuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; 571 571 } 572 572 573 - asmlinkage long sys32_stat64(char __user * filename, struct stat64_emu31 __user * statbuf) 573 + asmlinkage long sys32_stat64(const char __user * filename, struct stat64_emu31 __user * statbuf) 574 574 { 575 575 struct kstat stat; 576 576 int ret = vfs_stat(filename, &stat); ··· 579 579 return ret; 580 580 } 581 581 582 - asmlinkage long sys32_lstat64(char __user * filename, struct stat64_emu31 __user * statbuf) 582 + asmlinkage long sys32_lstat64(const char __user * filename, struct stat64_emu31 __user * statbuf) 583 583 { 584 584 struct kstat stat; 585 585 int ret = vfs_lstat(filename, &stat); ··· 597 597 return ret; 598 598 } 599 599 600 - asmlinkage long sys32_fstatat64(unsigned int dfd, char __user *filename, 600 + asmlinkage long sys32_fstatat64(unsigned int dfd, const char __user *filename, 601 601 struct stat64_emu31 __user* statbuf, int flag) 602 602 { 603 603 struct kstat stat; ··· 655 655 return sys_read(fd, buf, count); 656 656 } 657 657 658 - asmlinkage long sys32_write(unsigned int fd, char __user * buf, size_t count) 658 + asmlinkage long sys32_write(unsigned int fd, const char __user * buf, size_t count) 659 659 { 660 660 if ((compat_ssize_t) count < 0) 661 661 return -EINVAL;
+5 -5
arch/s390/kernel/compat_linux.h
··· 193 193 compat_sigset_t __user *oset, size_t sigsetsize); 194 194 long sys32_rt_sigpending(compat_sigset_t __user *set, size_t sigsetsize); 195 195 long sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t __user *uinfo); 196 - long sys32_execve(char __user *name, compat_uptr_t __user *argv, 196 + long sys32_execve(const char __user *name, compat_uptr_t __user *argv, 197 197 compat_uptr_t __user *envp); 198 198 long sys32_init_module(void __user *umod, unsigned long len, 199 199 const char __user *uargs); ··· 207 207 size_t count); 208 208 long sys32_sendfile64(int out_fd, int in_fd, compat_loff_t __user *offset, 209 209 s32 count); 210 - long sys32_stat64(char __user * filename, struct stat64_emu31 __user * statbuf); 211 - long sys32_lstat64(char __user * filename, 210 + long sys32_stat64(const char __user * filename, struct stat64_emu31 __user * statbuf); 211 + long sys32_lstat64(const char __user * filename, 212 212 struct stat64_emu31 __user * statbuf); 213 213 long sys32_fstat64(unsigned long fd, struct stat64_emu31 __user * statbuf); 214 - long sys32_fstatat64(unsigned int dfd, char __user *filename, 214 + long sys32_fstatat64(unsigned int dfd, const char __user *filename, 215 215 struct stat64_emu31 __user* statbuf, int flag); 216 216 unsigned long old32_mmap(struct mmap_arg_struct_emu31 __user *arg); 217 217 long sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg); 218 218 long sys32_read(unsigned int fd, char __user * buf, size_t count); 219 - long sys32_write(unsigned int fd, char __user * buf, size_t count); 219 + long sys32_write(unsigned int fd, const char __user * buf, size_t count); 220 220 long sys32_fadvise64(int fd, loff_t offset, size_t len, int advise); 221 221 long sys32_fadvise64_64(struct fadvise64_64_args __user *args); 222 222 long sys32_sigaction(int sig, const struct old_sigaction32 __user *act,
+1 -1
arch/s390/kernel/entry.h
··· 42 42 int __user *parent_tidptr, int __user *child_tidptr); 43 43 long sys_vfork(void); 44 44 void execve_tail(void); 45 - long sys_execve(char __user *name, char __user * __user *argv, 45 + long sys_execve(const char __user *name, char __user * __user *argv, 46 46 char __user * __user *envp); 47 47 long sys_sigsuspend(int history0, int history1, old_sigset_t mask); 48 48 long sys_sigaction(int sig, const struct old_sigaction __user *act,
+1 -1
arch/s390/kernel/process.c
··· 267 267 /* 268 268 * sys_execve() executes a new program. 269 269 */ 270 - SYSCALL_DEFINE3(execve, char __user *, name, char __user * __user *, argv, 270 + SYSCALL_DEFINE3(execve, const char __user *, name, char __user * __user *, argv, 271 271 char __user * __user *, envp) 272 272 { 273 273 struct pt_regs *regs = task_pt_regs(current);
+1 -1
arch/sh/include/asm/syscalls_32.h
··· 19 19 asmlinkage int sys_vfork(unsigned long r4, unsigned long r5, 20 20 unsigned long r6, unsigned long r7, 21 21 struct pt_regs __regs); 22 - asmlinkage int sys_execve(char __user *ufilename, char __user * __user *uargv, 22 + asmlinkage int sys_execve(const char __user *ufilename, char __user * __user *uargv, 23 23 char __user * __user *uenvp, unsigned long r7, 24 24 struct pt_regs __regs); 25 25 asmlinkage int sys_sigsuspend(old_sigset_t mask, unsigned long r5,
+1 -1
arch/sh/include/asm/syscalls_64.h
··· 21 21 unsigned long r4, unsigned long r5, 22 22 unsigned long r6, unsigned long r7, 23 23 struct pt_regs *pregs); 24 - asmlinkage int sys_execve(char *ufilename, char **uargv, 24 + asmlinkage int sys_execve(const char *ufilename, char **uargv, 25 25 char **uenvp, unsigned long r5, 26 26 unsigned long r6, unsigned long r7, 27 27 struct pt_regs *pregs);
+1 -1
arch/sh/kernel/process_64.c
··· 483 483 /* 484 484 * sys_execve() executes a new program. 485 485 */ 486 - asmlinkage int sys_execve(char *ufilename, char **uargv, 486 + asmlinkage int sys_execve(const char *ufilename, char **uargv, 487 487 char **uenvp, unsigned long r5, 488 488 unsigned long r6, unsigned long r7, 489 489 struct pt_regs *pregs)
+4 -3
arch/sparc/kernel/sys_sparc32.c
··· 162 162 return err; 163 163 } 164 164 165 - asmlinkage long compat_sys_stat64(char __user * filename, 165 + asmlinkage long compat_sys_stat64(const char __user * filename, 166 166 struct compat_stat64 __user *statbuf) 167 167 { 168 168 struct kstat stat; ··· 173 173 return error; 174 174 } 175 175 176 - asmlinkage long compat_sys_lstat64(char __user * filename, 176 + asmlinkage long compat_sys_lstat64(const char __user * filename, 177 177 struct compat_stat64 __user *statbuf) 178 178 { 179 179 struct kstat stat; ··· 195 195 return error; 196 196 } 197 197 198 - asmlinkage long compat_sys_fstatat64(unsigned int dfd, char __user *filename, 198 + asmlinkage long compat_sys_fstatat64(unsigned int dfd, 199 + const char __user *filename, 199 200 struct compat_stat64 __user * statbuf, int flag) 200 201 { 201 202 struct kstat stat;
+3 -3
arch/um/kernel/exec.c
··· 44 44 PT_REGS_SP(regs) = esp; 45 45 } 46 46 47 - static long execve1(char *file, char __user * __user *argv, 47 + static long execve1(const char *file, char __user * __user *argv, 48 48 char __user *__user *env) 49 49 { 50 50 long error; ··· 61 61 return error; 62 62 } 63 63 64 - long um_execve(char *file, char __user *__user *argv, char __user *__user *env) 64 + long um_execve(const char *file, char __user *__user *argv, char __user *__user *env) 65 65 { 66 66 long err; 67 67 ··· 71 71 return err; 72 72 } 73 73 74 - long sys_execve(char __user *file, char __user *__user *argv, 74 + long sys_execve(const char __user *file, char __user *__user *argv, 75 75 char __user *__user *env) 76 76 { 77 77 long error;
+1 -1
arch/um/kernel/internal.h
··· 1 - extern long um_execve(char *file, char __user *__user *argv, char __user *__user *env); 1 + extern long um_execve(const char *file, char __user *__user *argv, char __user *__user *env);
+1 -1
arch/um/kernel/syscall.c
··· 58 58 59 59 fs = get_fs(); 60 60 set_fs(KERNEL_DS); 61 - ret = um_execve((char *)filename, (char __user *__user *)argv, 61 + ret = um_execve(filename, (char __user *__user *)argv, 62 62 (char __user *__user *) envp); 63 63 set_fs(fs); 64 64
+7 -7
arch/x86/ia32/sys_ia32.c
··· 51 51 #define AA(__x) ((unsigned long)(__x)) 52 52 53 53 54 - asmlinkage long sys32_truncate64(char __user *filename, 54 + asmlinkage long sys32_truncate64(const char __user *filename, 55 55 unsigned long offset_low, 56 56 unsigned long offset_high) 57 57 { ··· 96 96 return 0; 97 97 } 98 98 99 - asmlinkage long sys32_stat64(char __user *filename, 99 + asmlinkage long sys32_stat64(const char __user *filename, 100 100 struct stat64 __user *statbuf) 101 101 { 102 102 struct kstat stat; ··· 107 107 return ret; 108 108 } 109 109 110 - asmlinkage long sys32_lstat64(char __user *filename, 110 + asmlinkage long sys32_lstat64(const char __user *filename, 111 111 struct stat64 __user *statbuf) 112 112 { 113 113 struct kstat stat; ··· 126 126 return ret; 127 127 } 128 128 129 - asmlinkage long sys32_fstatat(unsigned int dfd, char __user *filename, 129 + asmlinkage long sys32_fstatat(unsigned int dfd, const char __user *filename, 130 130 struct stat64 __user *statbuf, int flag) 131 131 { 132 132 struct kstat stat; ··· 408 408 ((loff_t)AA(poshi) << 32) | AA(poslo)); 409 409 } 410 410 411 - asmlinkage long sys32_pwrite(unsigned int fd, char __user *ubuf, u32 count, 412 - u32 poslo, u32 poshi) 411 + asmlinkage long sys32_pwrite(unsigned int fd, const char __user *ubuf, 412 + u32 count, u32 poslo, u32 poshi) 413 413 { 414 414 return sys_pwrite64(fd, ubuf, count, 415 415 ((loff_t)AA(poshi) << 32) | AA(poslo)); ··· 449 449 return ret; 450 450 } 451 451 452 - asmlinkage long sys32_execve(char __user *name, compat_uptr_t __user *argv, 452 + asmlinkage long sys32_execve(const char __user *name, compat_uptr_t __user *argv, 453 453 compat_uptr_t __user *envp, struct pt_regs *regs) 454 454 { 455 455 long error;
+6 -6
arch/x86/include/asm/sys_ia32.h
··· 18 18 #include <asm/ia32.h> 19 19 20 20 /* ia32/sys_ia32.c */ 21 - asmlinkage long sys32_truncate64(char __user *, unsigned long, unsigned long); 21 + asmlinkage long sys32_truncate64(const char __user *, unsigned long, unsigned long); 22 22 asmlinkage long sys32_ftruncate64(unsigned int, unsigned long, unsigned long); 23 23 24 - asmlinkage long sys32_stat64(char __user *, struct stat64 __user *); 25 - asmlinkage long sys32_lstat64(char __user *, struct stat64 __user *); 24 + asmlinkage long sys32_stat64(const char __user *, struct stat64 __user *); 25 + asmlinkage long sys32_lstat64(const char __user *, struct stat64 __user *); 26 26 asmlinkage long sys32_fstat64(unsigned int, struct stat64 __user *); 27 - asmlinkage long sys32_fstatat(unsigned int, char __user *, 27 + asmlinkage long sys32_fstatat(unsigned int, const char __user *, 28 28 struct stat64 __user *, int); 29 29 struct mmap_arg_struct32; 30 30 asmlinkage long sys32_mmap(struct mmap_arg_struct32 __user *); ··· 49 49 asmlinkage long sys32_rt_sigqueueinfo(int, int, compat_siginfo_t __user *); 50 50 51 51 asmlinkage long sys32_pread(unsigned int, char __user *, u32, u32, u32); 52 - asmlinkage long sys32_pwrite(unsigned int, char __user *, u32, u32, u32); 52 + asmlinkage long sys32_pwrite(unsigned int, const char __user *, u32, u32, u32); 53 53 54 54 asmlinkage long sys32_personality(unsigned long); 55 55 asmlinkage long sys32_sendfile(int, int, compat_off_t __user *, s32); 56 56 57 - asmlinkage long sys32_execve(char __user *, compat_uptr_t __user *, 57 + asmlinkage long sys32_execve(const char __user *, compat_uptr_t __user *, 58 58 compat_uptr_t __user *, struct pt_regs *); 59 59 asmlinkage long sys32_clone(unsigned int, unsigned int, struct pt_regs *); 60 60
+1 -1
arch/x86/include/asm/syscalls.h
··· 23 23 /* kernel/process.c */ 24 24 int sys_fork(struct pt_regs *); 25 25 int sys_vfork(struct pt_regs *); 26 - long sys_execve(char __user *, char __user * __user *, 26 + long sys_execve(const char __user *, char __user * __user *, 27 27 char __user * __user *, struct pt_regs *); 28 28 long sys_clone(unsigned long, unsigned long, void __user *, 29 29 void __user *, struct pt_regs *);
+2 -2
arch/x86/kernel/entry_64.S
··· 1185 1185 * execve(). This function needs to use IRET, not SYSRET, to set up all state properly. 1186 1186 * 1187 1187 * C extern interface: 1188 - * extern long execve(char *name, char **argv, char **envp) 1188 + * extern long execve(const char *name, char **argv, char **envp) 1189 1189 * 1190 1190 * asm input arguments: 1191 1191 * rdi: name, rsi: argv, rdx: envp 1192 1192 * 1193 1193 * We want to fallback into: 1194 - * extern long sys_execve(char *name, char **argv,char **envp, struct pt_regs *regs) 1194 + * extern long sys_execve(const char *name, char **argv,char **envp, struct pt_regs *regs) 1195 1195 * 1196 1196 * do_sys_execve asm fallback arguments: 1197 1197 * rdi: name, rsi: argv, rdx: envp, rcx: fake frame on the stack
+1 -1
arch/x86/kernel/process.c
··· 301 301 /* 302 302 * sys_execve() executes a new program. 303 303 */ 304 - long sys_execve(char __user *name, char __user * __user *argv, 304 + long sys_execve(const char __user *name, char __user * __user *argv, 305 305 char __user * __user *envp, struct pt_regs *regs) 306 306 { 307 307 long error;
+1 -1
arch/xtensa/kernel/process.c
··· 318 318 */ 319 319 320 320 asmlinkage 321 - long xtensa_execve(char __user *name, char __user * __user *argv, 321 + long xtensa_execve(const char __user *name, char __user * __user *argv, 322 322 char __user * __user *envp, 323 323 long a3, long a4, long a5, 324 324 struct pt_regs *regs)
+13 -10
fs/compat.c
··· 77 77 * Not all architectures have sys_utime, so implement this in terms 78 78 * of sys_utimes. 79 79 */ 80 - asmlinkage long compat_sys_utime(char __user *filename, struct compat_utimbuf __user *t) 80 + asmlinkage long compat_sys_utime(const char __user *filename, 81 + struct compat_utimbuf __user *t) 81 82 { 82 83 struct timespec tv[2]; 83 84 ··· 92 91 return do_utimes(AT_FDCWD, filename, t ? tv : NULL, 0); 93 92 } 94 93 95 - asmlinkage long compat_sys_utimensat(unsigned int dfd, char __user *filename, struct compat_timespec __user *t, int flags) 94 + asmlinkage long compat_sys_utimensat(unsigned int dfd, const char __user *filename, struct compat_timespec __user *t, int flags) 96 95 { 97 96 struct timespec tv[2]; 98 97 ··· 107 106 return do_utimes(dfd, filename, t ? tv : NULL, flags); 108 107 } 109 108 110 - asmlinkage long compat_sys_futimesat(unsigned int dfd, char __user *filename, struct compat_timeval __user *t) 109 + asmlinkage long compat_sys_futimesat(unsigned int dfd, const char __user *filename, struct compat_timeval __user *t) 111 110 { 112 111 struct timespec tv[2]; 113 112 ··· 126 125 return do_utimes(dfd, filename, t ? tv : NULL, 0); 127 126 } 128 127 129 - asmlinkage long compat_sys_utimes(char __user *filename, struct compat_timeval __user *t) 128 + asmlinkage long compat_sys_utimes(const char __user *filename, struct compat_timeval __user *t) 130 129 { 131 130 return compat_sys_futimesat(AT_FDCWD, filename, t); 132 131 } ··· 170 169 return err; 171 170 } 172 171 173 - asmlinkage long compat_sys_newstat(char __user * filename, 172 + asmlinkage long compat_sys_newstat(const char __user * filename, 174 173 struct compat_stat __user *statbuf) 175 174 { 176 175 struct kstat stat; ··· 182 181 return cp_compat_stat(&stat, statbuf); 183 182 } 184 183 185 - asmlinkage long compat_sys_newlstat(char __user * filename, 184 + asmlinkage long compat_sys_newlstat(const char __user * filename, 186 185 struct compat_stat __user *statbuf) 187 186 { 188 187 struct kstat stat; ··· 195 194 } 196 195 197 196 #ifndef __ARCH_WANT_STAT64 198 - asmlinkage long compat_sys_newfstatat(unsigned int dfd, char __user *filename, 197 + asmlinkage long compat_sys_newfstatat(unsigned int dfd, 198 + const char __user *filename, 199 199 struct compat_stat __user *statbuf, int flag) 200 200 { 201 201 struct kstat stat; ··· 839 837 #define NCPFS_NAME "ncpfs" 840 838 #define NFS4_NAME "nfs4" 841 839 842 - asmlinkage long compat_sys_mount(char __user * dev_name, char __user * dir_name, 843 - char __user * type, unsigned long flags, 844 - void __user * data) 840 + asmlinkage long compat_sys_mount(const char __user * dev_name, 841 + const char __user * dir_name, 842 + const char __user * type, unsigned long flags, 843 + const void __user * data) 845 844 { 846 845 char *kernel_type; 847 846 unsigned long data_page;
+18 -11
fs/stat.c
··· 68 68 } 69 69 EXPORT_SYMBOL(vfs_fstat); 70 70 71 - int vfs_fstatat(int dfd, char __user *filename, struct kstat *stat, int flag) 71 + int vfs_fstatat(int dfd, const char __user *filename, struct kstat *stat, 72 + int flag) 72 73 { 73 74 struct path path; 74 75 int error = -EINVAL; ··· 92 91 } 93 92 EXPORT_SYMBOL(vfs_fstatat); 94 93 95 - int vfs_stat(char __user *name, struct kstat *stat) 94 + int vfs_stat(const char __user *name, struct kstat *stat) 96 95 { 97 96 return vfs_fstatat(AT_FDCWD, name, stat, 0); 98 97 } 99 98 EXPORT_SYMBOL(vfs_stat); 100 99 101 - int vfs_lstat(char __user *name, struct kstat *stat) 100 + int vfs_lstat(const char __user *name, struct kstat *stat) 102 101 { 103 102 return vfs_fstatat(AT_FDCWD, name, stat, AT_SYMLINK_NOFOLLOW); 104 103 } ··· 148 147 return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; 149 148 } 150 149 151 - SYSCALL_DEFINE2(stat, char __user *, filename, struct __old_kernel_stat __user *, statbuf) 150 + SYSCALL_DEFINE2(stat, const char __user *, filename, 151 + struct __old_kernel_stat __user *, statbuf) 152 152 { 153 153 struct kstat stat; 154 154 int error; ··· 161 159 return cp_old_stat(&stat, statbuf); 162 160 } 163 161 164 - SYSCALL_DEFINE2(lstat, char __user *, filename, struct __old_kernel_stat __user *, statbuf) 162 + SYSCALL_DEFINE2(lstat, const char __user *, filename, 163 + struct __old_kernel_stat __user *, statbuf) 165 164 { 166 165 struct kstat stat; 167 166 int error; ··· 237 234 return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; 238 235 } 239 236 240 - SYSCALL_DEFINE2(newstat, char __user *, filename, struct stat __user *, statbuf) 237 + SYSCALL_DEFINE2(newstat, const char __user *, filename, 238 + struct stat __user *, statbuf) 241 239 { 242 240 struct kstat stat; 243 241 int error = vfs_stat(filename, &stat); ··· 248 244 return cp_new_stat(&stat, statbuf); 249 245 } 250 246 251 - SYSCALL_DEFINE2(newlstat, char __user *, filename, struct stat __user *, statbuf) 247 + SYSCALL_DEFINE2(newlstat, const char __user *, filename, 248 + struct stat __user *, statbuf) 252 249 { 253 250 struct kstat stat; 254 251 int error; ··· 262 257 } 263 258 264 259 #if !defined(__ARCH_WANT_STAT64) || defined(__ARCH_WANT_SYS_NEWFSTATAT) 265 - SYSCALL_DEFINE4(newfstatat, int, dfd, char __user *, filename, 260 + SYSCALL_DEFINE4(newfstatat, int, dfd, const char __user *, filename, 266 261 struct stat __user *, statbuf, int, flag) 267 262 { 268 263 struct kstat stat; ··· 360 355 return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; 361 356 } 362 357 363 - SYSCALL_DEFINE2(stat64, char __user *, filename, struct stat64 __user *, statbuf) 358 + SYSCALL_DEFINE2(stat64, const char __user *, filename, 359 + struct stat64 __user *, statbuf) 364 360 { 365 361 struct kstat stat; 366 362 int error = vfs_stat(filename, &stat); ··· 372 366 return error; 373 367 } 374 368 375 - SYSCALL_DEFINE2(lstat64, char __user *, filename, struct stat64 __user *, statbuf) 369 + SYSCALL_DEFINE2(lstat64, const char __user *, filename, 370 + struct stat64 __user *, statbuf) 376 371 { 377 372 struct kstat stat; 378 373 int error = vfs_lstat(filename, &stat); ··· 395 388 return error; 396 389 } 397 390 398 - SYSCALL_DEFINE4(fstatat64, int, dfd, char __user *, filename, 391 + SYSCALL_DEFINE4(fstatat64, int, dfd, const char __user *, filename, 399 392 struct stat64 __user *, statbuf, int, flag) 400 393 { 401 394 struct kstat stat;
+4 -3
fs/utimes.c
··· 126 126 * must be owner or have write permission. 127 127 * Else, update from *times, must be owner or super user. 128 128 */ 129 - long do_utimes(int dfd, char __user *filename, struct timespec *times, int flags) 129 + long do_utimes(int dfd, const char __user *filename, struct timespec *times, 130 + int flags) 130 131 { 131 132 int error = -EINVAL; 132 133 ··· 171 170 return error; 172 171 } 173 172 174 - SYSCALL_DEFINE4(utimensat, int, dfd, char __user *, filename, 173 + SYSCALL_DEFINE4(utimensat, int, dfd, const char __user *, filename, 175 174 struct timespec __user *, utimes, int, flags) 176 175 { 177 176 struct timespec tstimes[2]; ··· 189 188 return do_utimes(dfd, filename, utimes ? tstimes : NULL, flags); 190 189 } 191 190 192 - SYSCALL_DEFINE3(futimesat, int, dfd, char __user *, filename, 191 + SYSCALL_DEFINE3(futimesat, int, dfd, const char __user *, filename, 193 192 struct timeval __user *, utimes) 194 193 { 195 194 struct timeval times[2];
+3 -3
include/linux/compat.h
··· 331 331 const compat_sigset_t __user *sigmask, 332 332 compat_size_t sigsetsize); 333 333 334 - asmlinkage long compat_sys_utimensat(unsigned int dfd, char __user *filename, 334 + asmlinkage long compat_sys_utimensat(unsigned int dfd, const char __user *filename, 335 335 struct compat_timespec __user *t, int flags); 336 336 337 337 asmlinkage long compat_sys_signalfd(int ufd, ··· 348 348 const int __user *nodes, 349 349 int __user *status, 350 350 int flags); 351 - asmlinkage long compat_sys_futimesat(unsigned int dfd, char __user *filename, 351 + asmlinkage long compat_sys_futimesat(unsigned int dfd, const char __user *filename, 352 352 struct compat_timeval __user *t); 353 - asmlinkage long compat_sys_newfstatat(unsigned int dfd, char __user * filename, 353 + asmlinkage long compat_sys_newfstatat(unsigned int dfd, const char __user * filename, 354 354 struct compat_stat __user *statbuf, 355 355 int flag); 356 356 asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename,
+3 -3
include/linux/fs.h
··· 2320 2320 2321 2321 extern int vfs_readdir(struct file *, filldir_t, void *); 2322 2322 2323 - extern int vfs_stat(char __user *, struct kstat *); 2324 - extern int vfs_lstat(char __user *, struct kstat *); 2323 + extern int vfs_stat(const char __user *, struct kstat *); 2324 + extern int vfs_lstat(const char __user *, struct kstat *); 2325 2325 extern int vfs_fstat(unsigned int, struct kstat *); 2326 - extern int vfs_fstatat(int , char __user *, struct kstat *, int); 2326 + extern int vfs_fstatat(int , const char __user *, struct kstat *, int); 2327 2327 2328 2328 extern int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd, 2329 2329 unsigned long arg);
+10 -10
include/linux/syscalls.h
··· 394 394 asmlinkage long sys_oldumount(char __user *name); 395 395 asmlinkage long sys_truncate(const char __user *path, long length); 396 396 asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length); 397 - asmlinkage long sys_stat(char __user *filename, 397 + asmlinkage long sys_stat(const char __user *filename, 398 398 struct __old_kernel_stat __user *statbuf); 399 399 asmlinkage long sys_statfs(const char __user * path, 400 400 struct statfs __user *buf); ··· 403 403 asmlinkage long sys_fstatfs(unsigned int fd, struct statfs __user *buf); 404 404 asmlinkage long sys_fstatfs64(unsigned int fd, size_t sz, 405 405 struct statfs64 __user *buf); 406 - asmlinkage long sys_lstat(char __user *filename, 406 + asmlinkage long sys_lstat(const char __user *filename, 407 407 struct __old_kernel_stat __user *statbuf); 408 408 asmlinkage long sys_fstat(unsigned int fd, 409 409 struct __old_kernel_stat __user *statbuf); 410 - asmlinkage long sys_newstat(char __user *filename, 410 + asmlinkage long sys_newstat(const char __user *filename, 411 411 struct stat __user *statbuf); 412 - asmlinkage long sys_newlstat(char __user *filename, 412 + asmlinkage long sys_newlstat(const char __user *filename, 413 413 struct stat __user *statbuf); 414 414 asmlinkage long sys_newfstat(unsigned int fd, struct stat __user *statbuf); 415 415 asmlinkage long sys_ustat(unsigned dev, struct ustat __user *ubuf); 416 416 #if BITS_PER_LONG == 32 417 - asmlinkage long sys_stat64(char __user *filename, 417 + asmlinkage long sys_stat64(const char __user *filename, 418 418 struct stat64 __user *statbuf); 419 419 asmlinkage long sys_fstat64(unsigned long fd, struct stat64 __user *statbuf); 420 - asmlinkage long sys_lstat64(char __user *filename, 420 + asmlinkage long sys_lstat64(const char __user *filename, 421 421 struct stat64 __user *statbuf); 422 422 asmlinkage long sys_truncate64(const char __user *path, loff_t length); 423 423 asmlinkage long sys_ftruncate64(unsigned int fd, loff_t length); ··· 760 760 int newdfd, const char __user *newname, int flags); 761 761 asmlinkage long sys_renameat(int olddfd, const char __user * oldname, 762 762 int newdfd, const char __user * newname); 763 - asmlinkage long sys_futimesat(int dfd, char __user *filename, 763 + asmlinkage long sys_futimesat(int dfd, const char __user *filename, 764 764 struct timeval __user *utimes); 765 765 asmlinkage long sys_faccessat(int dfd, const char __user *filename, int mode); 766 766 asmlinkage long sys_fchmodat(int dfd, const char __user * filename, ··· 769 769 gid_t group, int flag); 770 770 asmlinkage long sys_openat(int dfd, const char __user *filename, int flags, 771 771 int mode); 772 - asmlinkage long sys_newfstatat(int dfd, char __user *filename, 772 + asmlinkage long sys_newfstatat(int dfd, const char __user *filename, 773 773 struct stat __user *statbuf, int flag); 774 - asmlinkage long sys_fstatat64(int dfd, char __user *filename, 774 + asmlinkage long sys_fstatat64(int dfd, const char __user *filename, 775 775 struct stat64 __user *statbuf, int flag); 776 776 asmlinkage long sys_readlinkat(int dfd, const char __user *path, char __user *buf, 777 777 int bufsiz); 778 - asmlinkage long sys_utimensat(int dfd, char __user *filename, 778 + asmlinkage long sys_utimensat(int dfd, const char __user *filename, 779 779 struct timespec __user *utimes, int flags); 780 780 asmlinkage long sys_unshare(unsigned long unshare_flags); 781 781
+1 -1
include/linux/time.h
··· 150 150 extern int do_settimeofday(struct timespec *tv); 151 151 extern int do_sys_settimeofday(struct timespec *tv, struct timezone *tz); 152 152 #define do_posix_clock_monotonic_gettime(ts) ktime_get_ts(ts) 153 - extern long do_utimes(int dfd, char __user *filename, struct timespec *times, int flags); 153 + extern long do_utimes(int dfd, const char __user *filename, struct timespec *times, int flags); 154 154 struct itimerval; 155 155 extern int do_setitimer(int which, struct itimerval *value, 156 156 struct itimerval *ovalue);