svn commit: r365615 - head/lib/libc/sys
Kyle Evans
kevans at FreeBSD.org
Thu Sep 10 21:25:17 UTC 2020
Author: kevans
Date: Thu Sep 10 21:25:16 2020
New Revision: 365615
URL: https://svnweb.freebsd.org/changeset/base/365615
Log:
memfd_create: fix return values
Literally returning EINVAL from a function designed to return an fd makes
for interesting scenarios.
I cannot assign enough pointy hats to cover this one.
Modified:
head/lib/libc/sys/shm_open.c
Modified: head/lib/libc/sys/shm_open.c
==============================================================================
--- head/lib/libc/sys/shm_open.c Thu Sep 10 21:01:22 2020 (r365614)
+++ head/lib/libc/sys/shm_open.c Thu Sep 10 21:25:16 2020 (r365615)
@@ -115,18 +115,26 @@ memfd_create(const char *name, unsigned int flags)
struct shm_largepage_conf slc;
int error, fd, i, npgs, oflags, pgidx, saved_errno, shmflags;
- if (name == NULL)
- return (EBADF);
+ if (name == NULL) {
+ errno = EBADF;
+ return (-1);
+ }
namelen = strlen(name);
- if (namelen + sizeof(MEMFD_NAME_PREFIX) - 1 > NAME_MAX)
- return (EINVAL);
+ if (namelen + sizeof(MEMFD_NAME_PREFIX) - 1 > NAME_MAX) {
+ errno = EINVAL;
+ return (-1);
+ }
if ((flags & ~(MFD_CLOEXEC | MFD_ALLOW_SEALING | MFD_HUGETLB |
- MFD_HUGE_MASK)) != 0)
- return (EINVAL);
+ MFD_HUGE_MASK)) != 0) {
+ errno = EINVAL;
+ return (-1);
+ }
/* Size specified but no HUGETLB. */
if (((flags & MFD_HUGE_MASK) != 0 && (flags & MFD_HUGETLB) == 0) ||
- __bitcount(flags & MFD_HUGE_MASK) > 1)
- return (EINVAL);
+ __bitcount(flags & MFD_HUGE_MASK) > 1) {
+ errno = EINVAL;
+ return (-1);
+ }
/* We've already validated that we're sufficiently sized. */
snprintf(memfd_name, NAME_MAX + 1, "%s%s", MEMFD_NAME_PREFIX, name);
More information about the svn-src-all
mailing list