]> granicus.if.org Git - sudo/commitdiff
Rewind the fd after calling sudo_filedigest(). Otherwise, when
authorTodd C. Miller <Todd.Miller@sudo.ws>
Tue, 24 Apr 2018 02:43:04 +0000 (20:43 -0600)
committerTodd C. Miller <Todd.Miller@sudo.ws>
Tue, 24 Apr 2018 02:43:04 +0000 (20:43 -0600)
running a script via fexecve(), the interpreter may get EOF when
reading /dev/fd/N.  This only appears to affect BSD systems with
fdescfs.  Bug #831.

plugins/sudoers/match.c

index a5a6a5d5540c4e5565055afc8bb680e95881e78c..f9ee3d963b4de28e11e4d25272cc4e7b578ecfce 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 1998-2005, 2007-2017
+ * Copyright (c) 1996, 1998-2005, 2007-2018
  *     Todd C. Miller <Todd.Miller@sudo.ws>
  *
  * Permission to use, copy, modify, and distribute this software for any
@@ -785,6 +785,7 @@ digest_matches(int fd, const char *file, const struct sudo_digest *sd)
     debug_decl(digest_matches, SUDOERS_DEBUG_MATCH)
 
     file_digest = sudo_filedigest(fd, file, sd->digest_type, &digest_len);
+    lseek(fd, SEEK_SET, (off_t)0);
     if (file_digest == NULL) {
        /* Warning (if any) printed by sudo_filedigest() */
        goto done;