* [PATCH 0/2] vfs: Define new syscall getumask. @ 2016-04-13 11:43 Richard W.M. Jones 2016-04-13 11:43 ` [PATCH 1/2] " Richard W.M. Jones ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Richard W.M. Jones @ 2016-04-13 11:43 UTC (permalink / raw) To: linux-kernel-u79uwXL29TY76Z2rM5mHXA Cc: tglx-hfZtesqFncYOwBW4kG4KsQ, mingo-H+wXaHxf7aLQT0dZR+AlfA, hpa-YMNOUZJC4hwAvxtiuMwx3w, akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b, luto-DgEjT+Ai2ygdnm+yROfE0A, viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn, mathieu.desnoyers-vg+e7yoeK/dWk0Htik3J/w, zab-H+wXaHxf7aLQT0dZR+AlfA, emunson-JqFfY2XvxFXQT0dZR+AlfA, paulmck-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8, aarcange-H+wXaHxf7aLQT0dZR+AlfA, josh-iaAMLnmF4UmaiuxdJuQwMA, xemul-bzQdu9zFT3WakBO8gow8eQ, sfr-3FnU+UHB4dNDw9hX6IcOSA, milosz-B5zB6C1i6pkAvxtiuMwx3w, rostedt-nx8X9YLhiw1AfugRpC6u6w, arnd-r2nGTMty4D4, ebiederm-aS9lmoZGLiVWk0Htik3J/w, gorcunov-GEFAQzZX7r8dnm+yROfE0A, iulia.manda21-Re5JQEeQqe8AvxtiuMwx3w, dave.hansen-VuQAYsv1563Yd54FQh9/CA, mguzik-H+wXaHxf7aLQT0dZR+AlfA, adobriyan-Re5JQEeQqe8AvxtiuMwx3w, dave-h16yJtLeMjHk1uMJSBkQmQ, linux-api-u79uwXL29TY76Z2rM5mHXA It's not possible to read the process umask without also modifying it, which is what umask(2) does. A library cannot read umask safely, especially if the main program might be multithreaded. This patch series adds a trivial system call "getumask" which returns the umask of the current process. Another approach to this has been attempted before, adding something to /proc, although it didn't go anywhere. See: http://comments.gmane.org/gmane.linux.kernel/1292109 Another way to solve this would be to add a thread-safe getumask to glibc. Since glibc could own the mutex, this would permit libraries linked to this glibc to read umask safely. I should also note that man-pages documents getumask(3), but no version of glibc has ever implemented it. Typical test script: #include <stdio.h> #include <stdlib.h> #include <linux/unistd.h> #include <sys/syscall.h> int main(int argc, char *argv[]) { int r = syscall(329); if (r == -1) { perror("getumask"); exit(1); } printf("umask = %o\n", r); exit(0); } $ ./getumask umask = 22 Rich. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] vfs: Define new syscall getumask. 2016-04-13 11:43 [PATCH 0/2] vfs: Define new syscall getumask Richard W.M. Jones @ 2016-04-13 11:43 ` Richard W.M. Jones [not found] ` <1460547786-16766-2-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2016-04-13 11:43 ` [PATCH 2/2] x86: Wire up new getumask system call on x86 Richard W.M. Jones 2016-04-13 12:05 ` [PATCH 0/2] vfs: Define new syscall getumask Pavel Emelyanov 2 siblings, 1 reply; 7+ messages in thread From: Richard W.M. Jones @ 2016-04-13 11:43 UTC (permalink / raw) To: linux-kernel Cc: tglx, mingo, hpa, akpm, luto, viro, mathieu.desnoyers, zab, emunson, paulmck, aarcange, josh, xemul, sfr, milosz, rostedt, arnd, ebiederm, gorcunov, iulia.manda21, dave.hansen, mguzik, adobriyan, dave, linux-api Define a system call for reading the current umask value. Signed-off-by: Richard W.M. Jones <rjones@redhat.com> --- include/linux/syscalls.h | 1 + kernel/sys.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index d795472..e96e88f 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -659,6 +659,7 @@ asmlinkage long sys_prlimit64(pid_t pid, unsigned int resource, struct rlimit64 __user *old_rlim); asmlinkage long sys_getrusage(int who, struct rusage __user *ru); asmlinkage long sys_umask(int mask); +asmlinkage long sys_getumask(void); asmlinkage long sys_msgget(key_t key, int msgflg); asmlinkage long sys_msgsnd(int msqid, struct msgbuf __user *msgp, diff --git a/kernel/sys.c b/kernel/sys.c index cf8ba54..026c146 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -1649,6 +1649,11 @@ SYSCALL_DEFINE1(umask, int, mask) return mask; } +SYSCALL_DEFINE0(getumask) +{ + return current->fs->umask; +} + static int prctl_set_mm_exe_file(struct mm_struct *mm, unsigned int fd) { struct fd exe; -- 2.7.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
[parent not found: <1460547786-16766-2-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 1/2] vfs: Define new syscall getumask. [not found] ` <1460547786-16766-2-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2016-04-13 12:21 ` Florian Weimer [not found] ` <87inzlg0mo.fsf-ZqZwdwZz9NfTBotR3TxKnbNAH6kLmebB@public.gmane.org> 0 siblings, 1 reply; 7+ messages in thread From: Florian Weimer @ 2016-04-13 12:21 UTC (permalink / raw) To: Richard W.M. Jones Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA, tglx-hfZtesqFncYOwBW4kG4KsQ, mingo-H+wXaHxf7aLQT0dZR+AlfA, hpa-YMNOUZJC4hwAvxtiuMwx3w, akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b, luto-DgEjT+Ai2ygdnm+yROfE0A, viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn, mathieu.desnoyers-vg+e7yoeK/dWk0Htik3J/w, zab-H+wXaHxf7aLQT0dZR+AlfA, emunson-JqFfY2XvxFXQT0dZR+AlfA, paulmck-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8, aarcange-H+wXaHxf7aLQT0dZR+AlfA, josh-iaAMLnmF4UmaiuxdJuQwMA, xemul-bzQdu9zFT3WakBO8gow8eQ, sfr-3FnU+UHB4dNDw9hX6IcOSA, milosz-B5zB6C1i6pkAvxtiuMwx3w, rostedt-nx8X9YLhiw1AfugRpC6u6w, arnd-r2nGTMty4D4, ebiederm-aS9lmoZGLiVWk0Htik3J/w, gorcunov-GEFAQzZX7r8dnm+yROfE0A, iulia.manda21-Re5JQEeQqe8AvxtiuMwx3w, dave.hansen-VuQAYsv1563Yd54FQh9/CA, mguzik-H+wXaHxf7aLQT0dZR+AlfA, adobriyan-Re5JQEeQqe8AvxtiuMwx3w, dave-h16yJtLeMjHk1uMJSBkQmQ, linux-api-u79uwXL29TY76Z2rM5mHXA * Richard W. M. Jones: > +SYSCALL_DEFINE0(getumask) > +{ > + return current->fs->umask; > +} The convention seems to be to call current_umask(), instead of inlining its contents. ^ permalink raw reply [flat|nested] 7+ messages in thread
[parent not found: <87inzlg0mo.fsf-ZqZwdwZz9NfTBotR3TxKnbNAH6kLmebB@public.gmane.org>]
* Re: [PATCH 1/2] vfs: Define new syscall getumask. [not found] ` <87inzlg0mo.fsf-ZqZwdwZz9NfTBotR3TxKnbNAH6kLmebB@public.gmane.org> @ 2016-04-13 12:40 ` Cyrill Gorcunov 0 siblings, 0 replies; 7+ messages in thread From: Cyrill Gorcunov @ 2016-04-13 12:40 UTC (permalink / raw) To: Florian Weimer, Richard W.M. Jones Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA, tglx-hfZtesqFncYOwBW4kG4KsQ, mingo-H+wXaHxf7aLQT0dZR+AlfA, hpa-YMNOUZJC4hwAvxtiuMwx3w, akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b, luto-DgEjT+Ai2ygdnm+yROfE0A, viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn, mathieu.desnoyers-vg+e7yoeK/dWk0Htik3J/w, zab-H+wXaHxf7aLQT0dZR+AlfA, emunson-JqFfY2XvxFXQT0dZR+AlfA, paulmck-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8, aarcange-H+wXaHxf7aLQT0dZR+AlfA, josh-iaAMLnmF4UmaiuxdJuQwMA, xemul-bzQdu9zFT3WakBO8gow8eQ, sfr-3FnU+UHB4dNDw9hX6IcOSA, milosz-B5zB6C1i6pkAvxtiuMwx3w, rostedt-nx8X9YLhiw1AfugRpC6u6w, arnd-r2nGTMty4D4, ebiederm-aS9lmoZGLiVWk0Htik3J/w, iulia.manda21-Re5JQEeQqe8AvxtiuMwx3w, dave.hansen-VuQAYsv1563Yd54FQh9/CA, mguzik-H+wXaHxf7aLQT0dZR+AlfA, adobriyan-Re5JQEeQqe8AvxtiuMwx3w, dave-h16yJtLeMjHk1uMJSBkQmQ, linux-api-u79uwXL29TY76Z2rM5mHXA On Wed, Apr 13, 2016 at 02:21:35PM +0200, Florian Weimer wrote: > * Richard W. M. Jones: > > > +SYSCALL_DEFINE0(getumask) > > +{ > > + return current->fs->umask; > > +} > > The convention seems to be to call current_umask(), instead of > inlining its contents. Yes, please use existing. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2] x86: Wire up new getumask system call on x86. 2016-04-13 11:43 [PATCH 0/2] vfs: Define new syscall getumask Richard W.M. Jones 2016-04-13 11:43 ` [PATCH 1/2] " Richard W.M. Jones @ 2016-04-13 11:43 ` Richard W.M. Jones [not found] ` <1460547786-16766-3-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2016-04-13 12:05 ` [PATCH 0/2] vfs: Define new syscall getumask Pavel Emelyanov 2 siblings, 1 reply; 7+ messages in thread From: Richard W.M. Jones @ 2016-04-13 11:43 UTC (permalink / raw) To: linux-kernel Cc: tglx, mingo, hpa, akpm, luto, viro, mathieu.desnoyers, zab, emunson, paulmck, aarcange, josh, xemul, sfr, milosz, rostedt, arnd, ebiederm, gorcunov, iulia.manda21, dave.hansen, mguzik, adobriyan, dave, linux-api Signed-off-by: Richard W.M. Jones <rjones@redhat.com> --- arch/x86/entry/syscalls/syscall_32.tbl | 1 + arch/x86/entry/syscalls/syscall_64.tbl | 1 + 2 files changed, 2 insertions(+) diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl index b30dd81..af0a032 100644 --- a/arch/x86/entry/syscalls/syscall_32.tbl +++ b/arch/x86/entry/syscalls/syscall_32.tbl @@ -386,3 +386,4 @@ 377 i386 copy_file_range sys_copy_file_range 378 i386 preadv2 sys_preadv2 379 i386 pwritev2 sys_pwritev2 +380 i386 getumask sys_getumask diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl index cac6d17..47c1579 100644 --- a/arch/x86/entry/syscalls/syscall_64.tbl +++ b/arch/x86/entry/syscalls/syscall_64.tbl @@ -335,6 +335,7 @@ 326 common copy_file_range sys_copy_file_range 327 64 preadv2 sys_preadv2 328 64 pwritev2 sys_pwritev2 +329 common getumask sys_getumask # # x32-specific system call numbers start at 512 to avoid cache impact -- 2.7.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
[parent not found: <1460547786-16766-3-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 2/2] x86: Wire up new getumask system call on x86. [not found] ` <1460547786-16766-3-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2016-04-13 12:36 ` kbuild test robot 0 siblings, 0 replies; 7+ messages in thread From: kbuild test robot @ 2016-04-13 12:36 UTC (permalink / raw) To: Richard W.M. Jones Cc: kbuild-all-JC7UmRfGjtg, linux-kernel-u79uwXL29TY76Z2rM5mHXA, tglx-hfZtesqFncYOwBW4kG4KsQ, mingo-H+wXaHxf7aLQT0dZR+AlfA, hpa-YMNOUZJC4hwAvxtiuMwx3w, akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b, luto-DgEjT+Ai2ygdnm+yROfE0A, viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn, mathieu.desnoyers-vg+e7yoeK/dWk0Htik3J/w, zab-H+wXaHxf7aLQT0dZR+AlfA, emunson-JqFfY2XvxFXQT0dZR+AlfA, paulmck-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8, aarcange-H+wXaHxf7aLQT0dZR+AlfA, josh-iaAMLnmF4UmaiuxdJuQwMA, xemul-bzQdu9zFT3WakBO8gow8eQ, sfr-3FnU+UHB4dNDw9hX6IcOSA, milosz-B5zB6C1i6pkAvxtiuMwx3w, rostedt-nx8X9YLhiw1AfugRpC6u6w, arnd-r2nGTMty4D4, ebiederm-aS9lmoZGLiVWk0Htik3J/w, gorcunov-GEFAQzZX7r8dnm+yROfE0A, iulia.manda21-Re5JQEeQqe8AvxtiuMwx3w, dave.hansen-VuQAYsv1563Yd54FQh9/CA, mguzik-H+wXaHxf7aLQT0dZR+AlfA, adobriyan-Re5JQEeQqe8AvxtiuMwx3w, dave-h16yJtLeMjHk1uMJSBkQmQ, linux-api-u79uwXL29TY76Z2rM5mHXA [-- Attachment #1: Type: text/plain, Size: 1417 bytes --] Hi Richard, [auto build test WARNING on v4.6-rc3] [also build test WARNING on next-20160413] [cannot apply to tip/x86/core tip/auto-latest] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Richard-W-M-Jones/vfs-Define-new-syscall-getumask/20160413-194722 config: xtensa-allmodconfig (attached as .config) reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=xtensa All warnings (new ones prefixed by >>): <stdin>:1298:2: warning: #warning syscall userfaultfd not implemented [-Wcpp] <stdin>:1301:2: warning: #warning syscall membarrier not implemented [-Wcpp] <stdin>:1304:2: warning: #warning syscall mlock2 not implemented [-Wcpp] <stdin>:1307:2: warning: #warning syscall copy_file_range not implemented [-Wcpp] <stdin>:1310:2: warning: #warning syscall preadv2 not implemented [-Wcpp] <stdin>:1313:2: warning: #warning syscall pwritev2 not implemented [-Wcpp] >> <stdin>:1316:2: warning: #warning syscall getumask not implemented [-Wcpp] --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation [-- Attachment #2: .config.gz --] [-- Type: application/octet-stream, Size: 44814 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2] vfs: Define new syscall getumask. 2016-04-13 11:43 [PATCH 0/2] vfs: Define new syscall getumask Richard W.M. Jones 2016-04-13 11:43 ` [PATCH 1/2] " Richard W.M. Jones 2016-04-13 11:43 ` [PATCH 2/2] x86: Wire up new getumask system call on x86 Richard W.M. Jones @ 2016-04-13 12:05 ` Pavel Emelyanov 2 siblings, 0 replies; 7+ messages in thread From: Pavel Emelyanov @ 2016-04-13 12:05 UTC (permalink / raw) To: Richard W.M. Jones, linux-kernel Cc: tglx, mingo, hpa, akpm, luto, viro, mathieu.desnoyers, zab, emunson, paulmck, aarcange, josh, xemul, sfr, milosz, rostedt, arnd, ebiederm, gorcunov, iulia.manda21, dave.hansen, mguzik, adobriyan, dave, linux-api On 04/13/2016 02:43 PM, Richard W.M. Jones wrote: > It's not possible to read the process umask without also modifying it, > which is what umask(2) does. A library cannot read umask safely, > especially if the main program might be multithreaded. > > This patch series adds a trivial system call "getumask" which returns > the umask of the current process. Ah! Thanks for this :) Acked-by: Pavel Emelyanov <xemul@virtuozzo.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-04-13 12:40 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-04-13 11:43 [PATCH 0/2] vfs: Define new syscall getumask Richard W.M. Jones 2016-04-13 11:43 ` [PATCH 1/2] " Richard W.M. Jones [not found] ` <1460547786-16766-2-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2016-04-13 12:21 ` Florian Weimer [not found] ` <87inzlg0mo.fsf-ZqZwdwZz9NfTBotR3TxKnbNAH6kLmebB@public.gmane.org> 2016-04-13 12:40 ` Cyrill Gorcunov 2016-04-13 11:43 ` [PATCH 2/2] x86: Wire up new getumask system call on x86 Richard W.M. Jones [not found] ` <1460547786-16766-3-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2016-04-13 12:36 ` kbuild test robot 2016-04-13 12:05 ` [PATCH 0/2] vfs: Define new syscall getumask Pavel Emelyanov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).