On Tue, Jan 7, 2025 at 7:48 PM Isaac J. Manjarres <isaacmanjarres@xxxxxxxxxx> wrote: > +SYSCALL_DEFINE2(memfd_create, > + const char __user *, uname, > + unsigned int, flags) > +{ > + struct file *file; > + int fd; > + char *name; > + > + name = memfd_create_name(uname); > + if (IS_ERR(name)) > + return PTR_ERR(name); > + > + file = memfd_file_create(name, flags); > + /* name is not needed beyond this point. */ > kfree(name); > - return error; > + if (IS_ERR(file)) > + return PTR_ERR(file); > + > + fd = get_unused_fd_flags((flags & MFD_CLOEXEC) ? O_CLOEXEC : 0); > + if (fd >= 0) > + fd_install(fd, file); > + else > + fput(file); You changed the order so that get_unused_fd_flags() happens after creating the file, so the error path now does fput(file) instead of put_unused_fd(fd). Is there a reason for this? I would generally assume that calling get_unused_fd_flags() first is better. Otherwise this LGTM. Alice