Skip to content

Commit 71e2b5e

Browse files
prati0100akpm00
authored andcommitted
memfd: export alloc_file()
Patch series "mm: memfd_luo hotfixes". This series contains a couple of fixes for memfd preservation using LUO. This patch (of 3): The Live Update Orchestrator's (LUO) memfd preservation works by preserving all the folios of a memfd, re-creating an empty memfd on the next boot, and then inserting back the preserved folios. Currently it creates the file by directly calling shmem_file_setup(). This leaves out other work done by alloc_file() like setting up the file mode, flags, or calling the security hooks. Export alloc_file() to let memfd_luo use it. Rename it to memfd_alloc_file() since it is no longer private and thus needs a subsystem prefix. Link: https://lkml.kernel.org/r/20260122151842.4069702-1-pratyush@kernel.org Link: https://lkml.kernel.org/r/20260122151842.4069702-2-pratyush@kernel.org Signed-off-by: Pratyush Yadav (Google) <pratyush@kernel.org> Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Reviewed-by: Pasha Tatashin <pasha.tatashin@soleen.com> Cc: Baolin Wang <baolin.wang@linux.alibaba.com> Cc: Hugh Dickins <hughd@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
1 parent dd9e2f5 commit 71e2b5e

2 files changed

Lines changed: 8 additions & 2 deletions

File tree

include/linux/memfd.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ struct folio *memfd_alloc_folio(struct file *memfd, pgoff_t idx);
1717
* to by vm_flags_ptr.
1818
*/
1919
int memfd_check_seals_mmap(struct file *file, vm_flags_t *vm_flags_ptr);
20+
struct file *memfd_alloc_file(const char *name, unsigned int flags);
2021
#else
2122
static inline long memfd_fcntl(struct file *f, unsigned int c, unsigned int a)
2223
{
@@ -31,6 +32,11 @@ static inline int memfd_check_seals_mmap(struct file *file,
3132
{
3233
return 0;
3334
}
35+
36+
static inline struct file *memfd_alloc_file(const char *name, unsigned int flags)
37+
{
38+
return ERR_PTR(-EINVAL);
39+
}
3440
#endif
3541

3642
#endif /* __LINUX_MEMFD_H */

mm/memfd.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ static char *alloc_name(const char __user *uname)
456456
return ERR_PTR(error);
457457
}
458458

459-
static struct file *alloc_file(const char *name, unsigned int flags)
459+
struct file *memfd_alloc_file(const char *name, unsigned int flags)
460460
{
461461
unsigned int *file_seals;
462462
struct file *file;
@@ -520,5 +520,5 @@ SYSCALL_DEFINE2(memfd_create,
520520
return PTR_ERR(name);
521521

522522
fd_flags = (flags & MFD_CLOEXEC) ? O_CLOEXEC : 0;
523-
return FD_ADD(fd_flags, alloc_file(name, flags));
523+
return FD_ADD(fd_flags, memfd_alloc_file(name, flags));
524524
}

0 commit comments

Comments
 (0)