From f475850f314e7e99bfb08a24c182da5ced517759 Mon Sep 17 00:00:00 2001 From: hinus Date: Wed, 11 Aug 2021 17:10:09 +0800 Subject: [PATCH] Title: System call 'umask' Issue: https://gitee.com/hinus/linux_kernel_011/issues/I44ZQO Description: System call 'umask' --- include/linux/sys.h | 4 ++-- include/unistd.h | 1 + kernel/sys.c | 7 +++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/include/linux/sys.h b/include/linux/sys.h index 8c92ab3..532b87b 100644 --- a/include/linux/sys.h +++ b/include/linux/sys.h @@ -58,7 +58,7 @@ extern int sys_mpx(); //extern int sys_setpgid(); extern int sys_ulimit(); extern int sys_uname(); -//extern int sys_umask(); +extern int sys_umask(); extern int sys_chroot(); //extern int sys_ustat(); //extern int sys_dup2(); @@ -156,7 +156,7 @@ fn_ptr sys_call_table[] = { sys_ulimit, sys_uname, - 0, // sys_umask, + sys_umask, sys_chroot, 0, // sys_ustat, 0, // sys_dup2, diff --git a/include/unistd.h b/include/unistd.h index f180a18..f2436f2 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -168,6 +168,7 @@ int lseek(int fildes, off_t offset, int origin); int rmdir(const char* pathname); time_t time(time_t * tloc); +mode_t umask(mode_t mask); int uname(struct utsname * name); #endif diff --git a/kernel/sys.c b/kernel/sys.c index e114595..6e29cda 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -102,3 +102,10 @@ int sys_uname(struct utsname * name) { return 0; } +int sys_umask(int mask) { + int old = current->umask; + + current->umask = mask & 0777; + return (old); +} + -- Gitee