* [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
` (3 more replies)
0 siblings, 4 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
` (2 subsequent siblings)
3 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
2016-04-13 14:18 ` [PATCH v3 0/2] vfs: Define new syscall getumask Cyrill Gorcunov
2016-04-13 18:52 ` Davidlohr Bueso
3 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.
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
@ 2016-04-13 14:18 ` Cyrill Gorcunov
2016-04-13 18:52 ` Davidlohr Bueso
3 siblings, 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, tglx, mingo, hpa, akpm, luto, viro,
mathieu.desnoyers, zab, emunson, paulmck, aarcange, josh, xemul,
sfr, milosz, rostedt, arnd, ebiederm, iulia.manda21, dave.hansen,
mguzik, adobriyan, dave, linux-api, fw
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@openvz.org>
Thank you!
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 0/2] vfs: Define new syscall getumask.
2016-04-13 13:57 [PATCH v3 0/2] vfs: Define new syscall getumask Richard W.M. Jones
` (2 preceding siblings ...)
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
3 siblings, 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, 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
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
2016-04-13 19:12 ` Mathieu Desnoyers
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.
2016-04-13 19:06 ` Richard W.M. Jones
@ 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, Thomas Gleixner, mingo,
H. Peter Anvin, Andrew Morton, luto, viro, zab, emunson,
Paul E. McKenney, Andrea Arcangeli, josh, Pavel Emelyanov, sfr,
Milosz Tanski, rostedt, arnd, ebiederm, gorcunov, iulia manda21,
dave hansen, mguzik, adobriyan, linux-api, gorcunov, fw
----- On Apr 13, 2016, at 3:06 PM, Richard W.M. Jones rjones@redhat.com 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
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
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