Getting rid of get_unused_fd()
Subsystems (5)
v9 cover Getting rid of get_unused_fd()
Hi,
Please find the 9th revision of my patchset to remove get_unused_fd() macro.
In linux-next, tag next-20141013, they're currently:
- 33 calls to fd_install()
with one call part of anon_inode_getfd()
- 27 calls to get_unused_fd_flags()
with one call part of anon_inode_getfd() with another part of get_unused_fd() macro
- 13 calls to anon_inode_getfd()
- 8 calls to anon_inode_getfile()
with one call part of anon_inode_getfd()
- 5 calls to get_unused_fd()
The following patchset replaces the 5 last calls to get_unused_fd() by calls to get_unused_fd_flags(0) and remove the macro so that it won't be used in newer code.
For some detailed background information, please have a look at my previous patchset's cover letter[1].
Changes from patchset v8[1]
- fanotify: enable close-on-exec on events' fd when requested in fanotify_init()
DROPPED: applied upstream, commit 0b37e097a648.
- reduce the amount of explanation in cover letter
[1] http://lkml.kernel.org/r/[email protected]
Yann Droneaud (5):
ia64: trivial: replace get_unused_fd() by get_unused_fd_flags(0) ppc/cell: trivial: replace get_unused_fd() by get_unused_fd_flags(0)
binfmt_misc: trivial: replace get_unused_fd() by
get_unused_fd_flags(0)
file: trivial: replace get_unused_fd() by get_unused_fd_flags(0)
file: remove get_unused_fd() macro
arch/ia64/kernel/perfmon.c | 2 +- arch/powerpc/platforms/cell/spufs/inode.c | 4 ++-- fs/binfmt_misc.c | 2 +- fs/file.c | 2 +- include/linux/file.h | 1 - 5 files changed, 5 insertions(+), 6 deletions(-)
Signature · 1 line
1.9.3
PATCH v9 1/5 ia64: trivial: replace get_unused_fd() by get_unused_fd_flags(0)
This patch replaces calls to get_unused_fd() with equivalent call to get_unused_fd_flags(0) to preserve current behavor for existing code.
In a further patch, get_unused_fd() will be removed so that new code start using get_unused_fd_flags(), with the hope O_CLOEXEC could be used, either by default or choosen by userspace.
--- arch/ia64/kernel/perfmon.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/ia64/kernel/perfmon.c +1 -1
@@ -2662,7 +2662,7 @@ pfm_context_create(pfm_context_t *ctx, void *arg, int count, struct pt_regs *reg ret = -ENOMEM ; - fd =get_unused_fd (); + fd =get_unused_fd_flags (0 );if (fd <0 )return fd;
Signature · 1 line
1.9.3
PATCH v9 2/5 ppc/cell: trivial: replace get_unused_fd() by get_unused_fd_flags(0)
In reply to Yann DroneaudThis patch replaces calls to get_unused_fd() with equivalent call to get_unused_fd_flags(0) to preserve current behavor for existing code.
In a further patch, get_unused_fd() will be removed so that new code start using get_unused_fd_flags(), with the hope O_CLOEXEC could be used, either by default or choosen by userspace.
--- arch/powerpc/platforms/cell/spufs/inode.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/powerpc/platforms/cell/spufs/inode.c +2 -2
@@ -301,7 +301,7 @@ static int spufs_context_open(struct path *path)int ret;struct file *filp; - ret =get_unused_fd (); + ret =get_unused_fd_flags (0 );if (ret <0 )return ret;
@@ -518,7 +518,7 @@ static int spufs_gang_open(struct path *path)int ret;struct file *filp; - ret =get_unused_fd (); + ret =get_unused_fd_flags (0 );if (ret <0 )return ret;
Signature · 1 line
1.9.3
Re: [PATCHv9 2/5] ppc/cell: trivial: replace get_unused_fd() by get_unused_fd_flags(0)
Quoted 7 lines · Yann Droneaud
This patch replaces calls to
get_unused_fd()with equivalent call toget_unused_fd_flags(0)to preserve current behavor for existing code.In a further patch,
get_unused_fd()will be removed so that new code start usingget_unused_fd_flags(), with the hopeO_CLOEXECcould be used, either by default or choosen by userspace.
Quoted 5 lines
Cc Al Viro <[email protected]>Cc Andrew Morton <[email protected]>Signed-off-by Yann Droneaud <[email protected]>
This is fine by me, do you want an ack, or do you want us to take it via the powerpc tree?
If the former:
cheers
Re: [PATCHv9 2/5] ppc/cell: trivial: replace get_unused_fd() by get_unused_fd_flags(0)
Hi,
Quoted 8 lines · Michael Ellerman
Quoted 7 lines · Yann Droneaud
This patch replaces calls to
get_unused_fd()with equivalent call toget_unused_fd_flags(0)to preserve current behavor for existing code.In a further patch,
get_unused_fd()will be removed so that new code start usingget_unused_fd_flags(), with the hopeO_CLOEXECcould be used, either by default or choosen by userspace.
Quoted 9 lines
Quoted 5 lines
Cc Al Viro <[email protected]>Cc Andrew Morton <[email protected]>Signed-off-by Yann Droneaud <[email protected]>This is fine by me, do you want an ack, or do you want us to take it via the powerpc tree?
The patch was added in -mm by Andrew, so I guess the patch will be merged sooner or later.
Anyway, you could investigate to check if O_CLOEXEC could be used instead of 0 in call to get_unused_fd_flags().
Quoted 4 lines
If the former:
Acked-by Michael Ellerman <[email protected]>
Thanks a lot.
Regards.
Signature · 2 lines
Yann Droneaud OPTEYA
PATCH v9 3/5 binfmt_misc: trivial: replace get_unused_fd() by get_unused_fd_flags(0)
In reply to Yann DroneaudThis patch replaces calls to get_unused_fd() with equivalent call to get_unused_fd_flags(0) to preserve current behavor for existing code.
In a further patch, get_unused_fd() will be removed so that new code start using get_unused_fd_flags(), with the hope O_CLOEXEC could be used, either by default or choosen by userspace.
--- fs/binfmt_misc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/binfmt_misc.c +1 -1
@@ -153,7 +153,7 @@ static int load_misc_binary(struct linux_binprm *bprm)/* if the binary should be opened on behalf of the * interpreter than keep it open and assign descriptor * to it */ - fd_binary =get_unused_fd (); + fd_binary =get_unused_fd_flags (0 );if (fd_binary <0 ) { retval = fd_binary; goto _ret;
Signature · 1 line
1.9.3
PATCH v9 4/5 file: trivial: replace get_unused_fd() by get_unused_fd_flags(0)
In reply to Yann DroneaudThis patch replaces calls to get_unused_fd() with equivalent call to get_unused_fd_flags(0) to preserve current behavor for existing code.
In a further patch, get_unused_fd() will be removed so that new code start using get_unused_fd_flags(), with the hope O_CLOEXEC could be used, either by default or choosen by userspace.
--- fs/file.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/file.c +1 -1
@@ -869,7 +869,7 @@ SYSCALL_DEFINE1(dup, unsigned int, fildes)struct file *file =fget_raw (fildes);if (file) { - ret =get_unused_fd (); + ret =get_unused_fd_flags (0 );if (ret >=0 )fd_install (ret, file);else
Signature · 1 line
1.9.3
PATCH v9 5/5 file: remove get_unused_fd() macro
In reply to Yann DroneaudMacro get_unused_fd() is used to allocate a file descriptor with default flags. Those default flags (0) don't enable close-on-exec.
This can be seen as an unsafe default: in most case close-on-exec should be enabled to not leak file descriptor across exec().
It would be better to have a "safer" default set of flags, eg. O_CLOEXEC must be used to enable close-on-exec.
Instead this patch removes get_unused_fd() so that out of tree modules won't be affect by a runtime behavor change which might introduce other kind of bugs: it's better to catch the change at build time, making it easier to fix.
Removing the macro will also promote use of get_unused_fd_flags() (or anon_inode_getfd()) with flags provided by userspace. Or, if flags cannot be given by userspace, with flags set to O_CLOEXEC by default.
--- include/linux/file.h | 1 - 1 file changed, 1 deletion(-)
include/linux/file.h +0 -1
@@ -66,7 +66,6 @@ extern void set_close_on_exec(unsigned int fd, int flag);extern bool get_close_on_exec (unsigned int fd);extern void put_filp (struct file *);extern int get_unused_fd_flags (unsigned flags); -#define get_unused_fd () get_unused_fd_flags(0)extern void put_unused_fd (unsigned int fd);extern void fd_install (unsigned int fd,struct file *file);
Signature · 1 line
1.9.3