rootless: provide workaround for missing renameat2

on RHEL 7.7 renameat2 is not implemented for s390x, provide a
workaround.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1768519

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
Giuseppe Scrivano 2019-11-06 15:27:44 +01:00
parent a114e9059a
commit 0a8dcd7112
No known key found for this signature in database
GPG Key ID: E4730F97F60286ED
1 changed files with 7 additions and 3 deletions

View File

@ -27,9 +27,13 @@ int renameat2 (int olddirfd, const char *oldpath, int newdirfd, const char *newp
# ifdef SYS_renameat2
return (int) syscall (SYS_renameat2, olddirfd, oldpath, newdirfd, newpath, flags);
# else
/* no way to implement it atomically. */
errno = ENOSYS;
return -1;
/* This might be an issue if another process is trying to read the file while it is empty. */
int fd = open (newpath, O_EXCL|O_CREAT, 0700);
if (fd < 0)
return fd;
close (fd);
/* We are sure we created the file, let's overwrite it. */
return rename (oldpath, newpath);
# endif
}
#endif