* [PATCH v3 0/2] vfs: Define new syscall getumask.
@ 2016-04-13 13:57 Richard W.M. Jones
2016-04-13 13:57 ` [PATCH v3 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 13:57 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, gorcunov, fw
v2 -> v3:
- Add the syscall to uapi/asm-generic/unistd.h.
- Retest.
----------------------------------------------------------------------
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 v3 1/2] vfs: Define new syscall getumask.
2016-04-13 13:57 [PATCH v3 0/2] vfs: Define new syscall getumask Richard W.M. Jones
@ 2016-04-13 13:57 ` Richard W.M. Jones
2016-04-13 13:57 ` [PATCH v3 2/2] x86: Wire up new getumask system call on x86 Richard W.M. Jones
[not found] ` <1460555877-12950-1-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2 siblings, 0 replies; 7+ messages in thread
From: Richard W.M. Jones @ 2016-04-13 13:57 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, gorcunov, fw
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 +
include/uapi/asm-generic/unistd.h | 4 +++-
kernel/sys.c | 5 +++++
3 files changed, 9 insertions(+), 1 deletion(-)
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/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h
index 2622b33..e59e880 100644
--- a/include/uapi/asm-generic/unistd.h
+++ b/include/uapi/asm-generic/unistd.h
@@ -717,9 +717,11 @@ __SYSCALL(__NR_membarrier, sys_membarrier)
__SYSCALL(__NR_mlock2, sys_mlock2)
#define __NR_copy_file_range 285
__SYSCALL(__NR_copy_file_range, sys_copy_file_range)
+#define __NR_getumask 286
+__SYSCALL(__NR_getumask, sys_getumask)
#undef __NR_syscalls
-#define __NR_syscalls 286
+#define __NR_syscalls 287
/*
* All syscalls below here should go away really,
diff --git a/kernel/sys.c b/kernel/sys.c
index cf8ba54..9db526c 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_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
* [PATCH v3 2/2] x86: Wire up new getumask system call on x86.
2016-04-13 13:57 [PATCH v3 0/2] vfs: Define new syscall getumask Richard W.M. Jones
2016-04-13 13:57 ` [PATCH v3 1/2] " Richard W.M. Jones
@ 2016-04-13 13:57 ` Richard W.M. Jones
[not found] ` <1460555877-12950-1-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2 siblings, 0 replies; 7+ messages in thread
From: Richard W.M. Jones @ 2016-04-13 13:57 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, gorcunov, fw
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
* Re: [PATCH v3 0/2] vfs: Define new syscall getumask.
[not found] ` <1460555877-12950-1-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2016-04-13 14:18 ` Cyrill Gorcunov
2016-04-13 18:52 ` Davidlohr Bueso
1 sibling, 0 replies; 7+ messages in thread
From: Cyrill Gorcunov @ 2016-04-13 14:18 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,
iulia.manda21-Re5JQEeQqe8AvxtiuMwx3w,
dave.hansen-VuQAYsv1563Yd54FQh9/CA, mguzik-H+wXaHxf7aLQT0dZR+AlfA,
adobriyan-Re5JQEeQqe8AvxtiuMwx3w, dave-h16yJtLeMjHk1uMJSBkQmQ,
linux-api-u79uwXL29TY76Z2rM5mHXA, fw-d32yF4oPJVt0XxTmqZlbVQ
On Wed, Apr 13, 2016 at 02:57:55PM +0100, Richard W.M. Jones wrote:
> v2 -> v3:
>
> - Add the syscall to uapi/asm-generic/unistd.h.
>
> - Retest.
Reviewed-by: Cyrill Gorcunov <gorcunov-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
Thank you!
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 0/2] vfs: Define new syscall getumask.
[not found] ` <1460555877-12950-1-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-04-13 14:18 ` [PATCH v3 0/2] vfs: Define new syscall getumask Cyrill Gorcunov
@ 2016-04-13 18:52 ` Davidlohr Bueso
2016-04-13 19:06 ` Richard W.M. Jones
1 sibling, 1 reply; 7+ messages in thread
From: Davidlohr Bueso @ 2016-04-13 18:52 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,
linux-api-u79uwXL29TY76Z2rM5mHXA, gorcunov-Re5JQEeQqe8AvxtiuMwx3w,
fw-d32yF4oPJVt0XxTmqZlbVQ
ENOMANPAGE
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 0/2] vfs: Define new syscall getumask.
2016-04-13 18:52 ` Davidlohr Bueso
@ 2016-04-13 19:06 ` Richard W.M. Jones
[not found] ` <20160413190609.GL11600-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 7+ messages in thread
From: Richard W.M. Jones @ 2016-04-13 19:06 UTC (permalink / raw)
To: Davidlohr Bueso
Cc: linux-kernel, 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, linux-api, gorcunov, fw
On Wed, Apr 13, 2016 at 11:52:53AM -0700, Davidlohr Bueso wrote:
> ENOMANPAGE
Where do man pages go? In the man-pages project?
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines. Supports shell scripting,
bindings from many languages. http://libguestfs.org
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 0/2] vfs: Define new syscall getumask.
[not found] ` <20160413190609.GL11600-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2016-04-13 19:12 ` Mathieu Desnoyers
0 siblings, 0 replies; 7+ messages in thread
From: Mathieu Desnoyers @ 2016-04-13 19:12 UTC (permalink / raw)
To: Richard W.M. Jones
Cc: Davidlohr Bueso, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
Thomas Gleixner, mingo-H+wXaHxf7aLQT0dZR+AlfA, H. Peter Anvin,
Andrew Morton, luto-DgEjT+Ai2ygdnm+yROfE0A,
viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn, zab,
emunson-JqFfY2XvxFXQT0dZR+AlfA, Paul E. McKenney,
Andrea Arcangeli, josh-iaAMLnmF4UmaiuxdJuQwMA, Pavel Emelyanov,
sfr-3FnU+UHB4dNDw9hX6IcOSA, Milosz Tanski, rostedt,
arnd-r2nGTMty4D4, ebiederm-aS9lmoZGLiVWk0Htik3J/w, gorcunov,
iulia manda21, dave hansen, mguzik,
adobriyan-Re5JQEeQqe8AvxtiuMwx3w, linux-api,
gorcunov-Re5JQEeQqe8AvxtiuMwx3w, fw-d32yF4oPJVt0XxTmqZlbVQ
----- On Apr 13, 2016, at 3:06 PM, Richard W.M. Jones rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org wrote:
> On Wed, Apr 13, 2016 at 11:52:53AM -0700, Davidlohr Bueso wrote:
>> ENOMANPAGE
>
> Where do man pages go? In the man-pages project?
Yes. I usually also put a rendered version of the man page after the
changelog of the patch that implements the new system call. This facilitates
the discussion.
Thanks,
Mathieu
>
> Rich.
>
> --
> Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
> Read my programming and virtualization blog: http://rwmj.wordpress.com
> libguestfs lets you edit virtual machines. Supports shell scripting,
> bindings from many languages. http://libguestfs.org
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-04-13 19:12 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-13 13:57 [PATCH v3 0/2] vfs: Define new syscall getumask Richard W.M. Jones
2016-04-13 13:57 ` [PATCH v3 1/2] " Richard W.M. Jones
2016-04-13 13:57 ` [PATCH v3 2/2] x86: Wire up new getumask system call on x86 Richard W.M. Jones
[not found] ` <1460555877-12950-1-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-04-13 14:18 ` [PATCH v3 0/2] vfs: Define new syscall getumask Cyrill Gorcunov
2016-04-13 18:52 ` Davidlohr Bueso
2016-04-13 19:06 ` Richard W.M. Jones
[not found] ` <20160413190609.GL11600-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-04-13 19:12 ` Mathieu Desnoyers
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).