Răsfoiți Sursa

fix invalid access by openat to possibly-missing variadic mode argument

the mode argument is only required to be present when the O_CREAT or
O_TMPFILE flag is used.
Rich Felker 10 ani în urmă
părinte
comite
2da3ab1382
1 a modificat fișierele cu 8 adăugiri și 4 ștergeri
  1. 8 4
      src/fcntl/openat.c

+ 8 - 4
src/fcntl/openat.c

@@ -6,10 +6,14 @@
 int openat(int fd, const char *filename, int flags, ...)
 {
 	mode_t mode;
-	va_list ap;
-	va_start(ap, flags);
-	mode = va_arg(ap, mode_t);
-	va_end(ap);
+
+	if ((flags & O_CREAT) || (flags & O_TMPFILE) == O_TMPFILE) {
+		va_list ap;
+		va_start(ap, flags);
+		mode = va_arg(ap, mode_t);
+		va_end(ap);
+	}
+
 	return syscall_cp(SYS_openat, fd, filename, flags|O_LARGEFILE, mode);
 }