Commit 935d44ac authored by Roberto Sassu's avatar Roberto Sassu Committed by Andrew Morton

memfd: check for non-NULL file_seals in memfd_create() syscall

Ensure that file_seals is non-NULL before using it in the memfd_create()
syscall.  One situation in which memfd_file_seals_ptr() could return a
NULL pointer when CONFIG_SHMEM=n, oopsing the kernel.

Link: https://lkml.kernel.org/r/20230607132427.2867435-1-roberto.sassu@huaweicloud.com
Fixes: 47b9012e ("shmem: add sealing support to hugetlb-backed memfd")
Signed-off-by: default avatarRoberto Sassu <roberto.sassu@huawei.com>
Cc: Marc-Andr Lureau <marcandre.lureau@redhat.com>
Cc: Mike Kravetz <mike.kravetz@oracle.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 95a301ee
...@@ -371,12 +371,15 @@ SYSCALL_DEFINE2(memfd_create, ...@@ -371,12 +371,15 @@ SYSCALL_DEFINE2(memfd_create,
inode->i_mode &= ~0111; inode->i_mode &= ~0111;
file_seals = memfd_file_seals_ptr(file); file_seals = memfd_file_seals_ptr(file);
*file_seals &= ~F_SEAL_SEAL; if (file_seals) {
*file_seals |= F_SEAL_EXEC; *file_seals &= ~F_SEAL_SEAL;
*file_seals |= F_SEAL_EXEC;
}
} else if (flags & MFD_ALLOW_SEALING) { } else if (flags & MFD_ALLOW_SEALING) {
/* MFD_EXEC and MFD_ALLOW_SEALING are set */ /* MFD_EXEC and MFD_ALLOW_SEALING are set */
file_seals = memfd_file_seals_ptr(file); file_seals = memfd_file_seals_ptr(file);
*file_seals &= ~F_SEAL_SEAL; if (file_seals)
*file_seals &= ~F_SEAL_SEAL;
} }
fd_install(fd, file); fd_install(fd, file);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment